* hppa-hpux-nat.c (child_suppress_run): Add variable to allow
authorDave Anglin <dave.anglin@nrc.ca>
Tue, 23 Nov 2004 01:01:59 +0000 (01:01 +0000)
committerDave Anglin <dave.anglin@nrc.ca>
Tue, 23 Nov 2004 01:01:59 +0000 (01:01 +0000)
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.

gdb/ChangeLog
gdb/config/pa/hpux11.mh
gdb/config/pa/hpux11w.mh
gdb/hppa-hpux-nat.c
gdb/hpux-thread.c

index 804b2486bc0227f9a6a72dc36e02353b167b3723..d38d8400e0af0912762d47b8493f27ed17ad0efe 100644 (file)
@@ -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.
index d3aeb33b623689e924bff10575a0ba08cfb022e9..8b85c42223a5159c06b9e068c13caa0f37a98796 100644 (file)
@@ -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
index d3aeb33b623689e924bff10575a0ba08cfb022e9..8b85c42223a5159c06b9e068c13caa0f37a98796 100644 (file)
@@ -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
index 9f77b4d63f9f1a70ba7508a5462e984cfcf8a632..df925d052abb40ad30bbc1c1773553b702ce25d1 100644 (file)
@@ -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;
+}
 \f
 
 /* 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);
 }
index e9f6cfb6b6e7c971ead6d06b278b0b63005eca50..124d960f10ce31d0b81e91b2ab28cb41fd2fc141 100644 (file)
 #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));
+           }
        }
     }