diff options
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/config/pa/hpux11.mh | 5 | ||||
-rw-r--r-- | gdb/config/pa/hpux11w.mh | 5 | ||||
-rw-r--r-- | gdb/hppa-hpux-nat.c | 14 | ||||
-rw-r--r-- | gdb/hpux-thread.c | 41 |
5 files changed, 54 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 804b248..d38d840 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2004-11-22 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + * 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 <kettenis@gnu.org> * sparc64fbsd-nat.c: Update copyright year. diff --git a/gdb/config/pa/hpux11.mh b/gdb/config/pa/hpux11.mh index d3aeb33..8b85c42 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 d3aeb33..8b85c42 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 9f77b4d..df925d0 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 e9f6cfb..124d960 100644 --- a/gdb/hpux-thread.c +++ b/gdb/hpux-thread.c @@ -44,8 +44,10 @@ #include "inferior.h" #include "regcache.h" #include <fcntl.h> +#include <string.h> #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)); + } } } |