This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Fix HP-UX 10.20 bootstrap with HP/OSF threads


The enclosed change fixes a number of issues with hpux-thread.c:

1) It uses the variable child_suppress_run.  This used to be defined
   by inftarg.c.  I've moved this to hppa-hpux-nat.c as I gather
   inftarg.c is on the way out.

2) Various REGNUMs needed renaming.

3) Various uses of depracted_registers in hpux_thread_store_registers
   needed fixing.

The changes to config/pa/hpux11.mh and config/pa/hpux11w.mh are not
related.  They just remove an unused define for HOST_IPC.  I noticed
this in looking at an old version of hpux10.20.mh.

I'm now able to successfully build gdb on hppa1.1-hp-hpux10.20 with
DCE threads installed.

Ok?

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)

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.

Index: hppa-hpux-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/hppa-hpux-nat.c,v
retrieving revision 1.1
diff -u -3 -p -r1.1 hppa-hpux-nat.c
--- hppa-hpux-nat.c	20 Nov 2004 17:23:56 -0000	1.1
+++ hppa-hpux-nat.c	22 Nov 2004 03:56:21 -0000
@@ -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 
   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);
 }
Index: hpux-thread.c
===================================================================
RCS file: /cvs/src/src/gdb/hpux-thread.c,v
retrieving revision 1.28
diff -u -3 -p -r1.28 hpux-thread.c
--- hpux-thread.c	8 Oct 2004 20:29:47 -0000	1.28
+++ hpux-thread.c	22 Nov 2004 03:56:21 -0000
@@ -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 ta
   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));
+	    }
 	}
     }
 
Index: config/pa/hpux11.mh
===================================================================
RCS file: /cvs/src/src/gdb/config/pa/hpux11.mh,v
retrieving revision 1.8
diff -u -3 -p -r1.8 hpux11.mh
--- config/pa/hpux11.mh	13 Nov 2004 02:19:03 -0000	1.8
+++ config/pa/hpux11.mh	22 Nov 2004 03:56:22 -0000
@@ -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: config/pa/hpux11w.mh
===================================================================
RCS file: /cvs/src/src/gdb/config/pa/hpux11w.mh,v
retrieving revision 1.9
diff -u -3 -p -r1.9 hpux11w.mh
--- config/pa/hpux11w.mh	13 Nov 2004 02:19:03 -0000	1.9
+++ config/pa/hpux11w.mh	22 Nov 2004 03:56:22 -0000
@@ -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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]