From: Dave Anglin Date: Tue, 23 Nov 2004 01:01:59 +0000 (+0000) Subject: * hppa-hpux-nat.c (child_suppress_run): Add variable to allow X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3f6306ec32b715d16968a54f97e75136f978d7de;p=binutils-gdb.git * hppa-hpux-nat.c (child_suppress_run): Add variable to allow hpux-thread.c to suppress children from running. (hppa_hpux_child_can_run): New function. (_initialize_hppa_hpux_nat): Use hppa_hpux_child_can_run. * hpux-thread.c: Include string.h and hppa-tdep.h. (FLAGS_REGNUM, SP_REGNUM, PC_REGNUM): Rename to HPPA_FLAGS_REGNUM, HPPA_SP_REGNUM and HPPA_PCOQ_HEAD_REGNUM, respectively. (hpux_thread_store_registers): Replace deprecated_registers with calls to regcache_raw_read. * config/pa/hpux11.mh, config/pa/hpux11w.mh: Delete HOST_IPC. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 804b2486bc0..d38d8400e0a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2004-11-22 John David Anglin + + * hppa-hpux-nat.c (child_suppress_run): Add variable to allow + hpux-thread.c to suppress children from running. + (hppa_hpux_child_can_run): New function. + (_initialize_hppa_hpux_nat): Use hppa_hpux_child_can_run. + * hpux-thread.c: Include string.h and hppa-tdep.h. + (FLAGS_REGNUM, SP_REGNUM, PC_REGNUM): Rename to HPPA_FLAGS_REGNUM, + HPPA_SP_REGNUM and HPPA_PCOQ_HEAD_REGNUM, respectively. + (hpux_thread_store_registers): Replace deprecated_registers with + calls to regcache_raw_read. + * config/pa/hpux11.mh, config/pa/hpux11w.mh: Delete HOST_IPC. + 2004-11-21 Mark Kettenis * sparc64fbsd-nat.c: Update copyright year. diff --git a/gdb/config/pa/hpux11.mh b/gdb/config/pa/hpux11.mh index d3aeb33b623..8b85c42223a 100644 --- a/gdb/config/pa/hpux11.mh +++ b/gdb/config/pa/hpux11.mh @@ -7,6 +7,5 @@ MH_CFLAGS = -Dvfork=fork NAT_FILE= nm-hppah11.h -NATDEPFILES= hppah-nat.o corelow.o core-aout.o inftarg.o fork-child.o infttrace.o - -HOST_IPC=-DBSD_IPC -DPOSIX_WAIT +NATDEPFILES= hppah-nat.o corelow.o core-aout.o inftarg.o fork-child.o \ + infttrace.o diff --git a/gdb/config/pa/hpux11w.mh b/gdb/config/pa/hpux11w.mh index d3aeb33b623..8b85c42223a 100644 --- a/gdb/config/pa/hpux11w.mh +++ b/gdb/config/pa/hpux11w.mh @@ -7,6 +7,5 @@ MH_CFLAGS = -Dvfork=fork NAT_FILE= nm-hppah11.h -NATDEPFILES= hppah-nat.o corelow.o core-aout.o inftarg.o fork-child.o infttrace.o - -HOST_IPC=-DBSD_IPC -DPOSIX_WAIT +NATDEPFILES= hppah-nat.o corelow.o core-aout.o inftarg.o fork-child.o \ + infttrace.o diff --git a/gdb/hppa-hpux-nat.c b/gdb/hppa-hpux-nat.c index 9f77b4d63f9..df925d052ab 100644 --- a/gdb/hppa-hpux-nat.c +++ b/gdb/hppa-hpux-nat.c @@ -31,6 +31,9 @@ #include "hppa-tdep.h" #include "inf-ptrace.h" +int child_suppress_run = 0; /* Non-zero if we should pretend not to be + a runnable target. */ + static int hppa_hpux_save_state_offset[] = { ssoff(ss_flags), @@ -273,6 +276,16 @@ hppa_hpux_store_inferior_registers (int regnum) else hppa_hpux_store_register (regnum); } + +static int +hppa_hpux_child_can_run (void) +{ + /* This variable is controlled by modules that layer their own process + structure atop that provided here. hpux-thread.c does this because + of the HP-UX user-mode level thread model. */ + + return !child_suppress_run; +} /* Prevent warning from -Wmissing-prototypes. */ @@ -286,5 +299,6 @@ _initialize_hppa_hpux_nat (void) t = inf_ptrace_target (); t->to_fetch_registers = hppa_hpux_fetch_inferior_registers; t->to_store_registers = hppa_hpux_store_inferior_registers; + t->to_can_run = hppa_hpux_child_can_run; add_target (t); } diff --git a/gdb/hpux-thread.c b/gdb/hpux-thread.c index e9f6cfb6b6e..124d960f10c 100644 --- a/gdb/hpux-thread.c +++ b/gdb/hpux-thread.c @@ -44,8 +44,10 @@ #include "inferior.h" #include "regcache.h" #include +#include #include "gdb_stat.h" #include "gdbcore.h" +#include "hppa-tdep.h" extern int child_suppress_run; @@ -220,7 +222,7 @@ hpux_thread_wait (ptid_t ptid, struct target_waitstatus *ourstatus) return rtnval; } -static char regmap[NUM_REGS] = +static char regmap[] = { -2, -1, -1, 0, 4, 8, 12, 16, 20, 24, /* flags, r1 -> r9 */ 28, 32, 36, 40, 44, 48, 52, 56, 60, -1, /* r10 -> r19 */ @@ -291,12 +293,12 @@ hpux_thread_fetch_registers (int regno) sp = (CORE_ADDR) tcb_ptr->static_ctx.sp - 160; - if (regno == FLAGS_REGNUM) + if (regno == HPPA_FLAGS_REGNUM) /* Flags must be 0 to avoid bogus value for SS_INSYSCALL */ memset (buf, '\000', register_size (current_gdbarch, regno)); - else if (regno == SP_REGNUM) + else if (regno == HPPA_SP_REGNUM) store_unsigned_integer (buf, sizeof sp, sp); - else if (regno == PC_REGNUM) + else if (regno == HPPA_PCOQ_HEAD_REGNUM) read_memory (sp - 20, buf, register_size (current_gdbarch, regno)); else read_memory (sp + regmap[regno], buf, register_size (current_gdbarch, regno)); @@ -353,25 +355,28 @@ hpux_thread_store_registers (int regno) sp = (CORE_ADDR) tcb_ptr->static_ctx.sp - 160; - if (regno == FLAGS_REGNUM) + if (regno == HPPA_FLAGS_REGNUM) deprecated_child_ops.to_store_registers (regno); /* Let lower layer handle this... */ - else if (regno == SP_REGNUM) + else if (regno == HPPA_SP_REGNUM) { - write_memory ((CORE_ADDR) & tcb_ptr->static_ctx.sp, - &deprecated_registers[DEPRECATED_REGISTER_BYTE (regno)], + regcache_raw_read (current_regcache, regno, buf); + write_memory ((CORE_ADDR) &tcb_ptr->static_ctx.sp, buf, + register_size (current_gdbarch, regno)); + tcb_ptr->static_ctx.sp + = (cma__t_hppa_regs *) ((CORE_ADDR) buf + 160); + } + else if (regno == HPPA_PCOQ_HEAD_REGNUM) + { + regcache_raw_read (current_regcache, regno, buf); + write_memory (sp - 20, buf, register_size (current_gdbarch, regno)); - tcb_ptr->static_ctx.sp = (cma__t_hppa_regs *) - (extract_unsigned_integer (&deprecated_registers[DEPRECATED_REGISTER_BYTE (regno)], - register_size (current_gdbarch, regno)) + 160); } - else if (regno == PC_REGNUM) - write_memory (sp - 20, - &deprecated_registers[DEPRECATED_REGISTER_BYTE (regno)], - register_size (current_gdbarch, regno)); else - write_memory (sp + regmap[regno], - &deprecated_registers[DEPRECATED_REGISTER_BYTE (regno)], - register_size (current_gdbarch, regno)); + { + regcache_raw_read (current_regcache, regno, buf); + write_memory (sp + regmap[regno], buf, + register_size (current_gdbarch, regno)); + } } }