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]

[COMMIT] Remove deprecated core support from QNX


Kris,

I tweaked i386nto_supply_gregset a bit more, but I'm fairly confident
this will work just as well.  Guess you didn't supply the collect
function since there was no prototype.  Would be good if you tested
this again soon though.

Mark

2004-12-24 Kris Warkentin <kewarken@qnx.com>
	   Mark Kettenis <kettenis@gnu.org>

	* i386-tdep.h (i386_collect_gregset): New prototype.
	* i386-nto-tdep.c (i386_nto_target): Move variable.  Add comment.
	(i386nto_gregset_reg_offset): Rename frame regmap.
	(nto_reg_offset): Tweak comment.  Use ARRAY_SIZE.
	(i386nto_supply_gregset): Implement using register set support.
	(i386nto_supply_regset): Remove redundant comment.
	(i386nto_init_abi): Initialize TDEP->gregset_reg_offset,
	TDEP->gregset_num_regs and TDEP->sizeof_gregset.
	* nto-tdep.c (fetch_core_registers): Remove function.
	(regset_core_fns): Remove structure.
	(_initialize_nto_tdep): Don't call deprecated_add_core_fns.

Index: i386-tdep.h
===================================================================
RCS file: /cvs/src/src/gdb/i386-tdep.h,v
retrieving revision 1.41
diff -u -p -r1.41 i386-tdep.h
--- i386-tdep.h	8 Sep 2004 14:46:08 -0000	1.41
+++ i386-tdep.h	24 Dec 2004 14:42:01 -0000
@@ -166,6 +166,14 @@ extern void i386_supply_gregset (const s
 				 struct regcache *regcache, int regnum,
 				 const void *gregs, size_t len);
 
+/* Collect register REGNUM from the register cache REGCACHE and store
+   it in the buffer specified by GREGS and LEN as described by the
+   general-purpose register set REGSET.  If REGNUM is -1, do this for
+   all registers in REGSET.  */
+extern void i386_collect_gregset (const struct regset *regset,
+				  const struct regcache *regcache,
+				  int regnum, void *gregs, size_t len);
+
 /* Return the appropriate register set for the core section identified
    by SECT_NAME and SECT_SIZE.  */
 extern const struct regset *
Index: i386-nto-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-nto-tdep.c,v
retrieving revision 1.17
diff -u -p -r1.17 i386-nto-tdep.c
--- i386-nto-tdep.c	23 Dec 2004 22:34:23 -0000	1.17
+++ i386-nto-tdep.c	24 Dec 2004 14:42:01 -0000
@@ -35,6 +35,9 @@
 #include "nto-tdep.h"
 #include "solib-svr4.h"
 
+/* Target vector for QNX NTO x86.  */
+static struct nto_target_ops i386_nto_target;
+
 #ifndef X86_CPU_FXSR
 #define X86_CPU_FXSR (1L << 12)
 #endif
@@ -44,47 +47,51 @@
    that is just filler.  Don't ask me, ask the kernel guys.  */
 #define NUM_GPREGS 13
 
-/* Map a GDB register number to an offset in the reg structure.  */
-static int regmap[] = {
-  (7 * 4),			/* eax */
-  (6 * 4),			/* ecx */
-  (5 * 4),			/* edx */
-  (4 * 4),			/* ebx */
-  (11 * 4),			/* esp */
-  (2 * 4),			/* epb */
-  (1 * 4),			/* esi */
-  (0 * 4),			/* edi */
-  (8 * 4),			/* eip */
-  (10 * 4),			/* eflags */
-  (9 * 4),			/* cs */
-  (12 * 4),			/* ss */
-  (-1 * 4)			/* filler */
+/* Mapping between the general-purpose registers in `struct xxx'
+   format and GDB's register cache layout.  */
+
+/* From <x86/context.h>.  */
+static int i386nto_gregset_reg_offset[] =
+{
+  7 * 4,			/* %eax */
+  6 * 4,			/* %ecx */
+  5 * 4,			/* %edx */
+  4 * 4,			/* %ebx */
+  11 * 4,			/* %esp */
+  2 * 4,			/* %epb */
+  1 * 4,			/* %esi */
+  0 * 4,			/* %edi */
+  8 * 4,			/* %eip */
+  10 * 4,			/* %eflags */
+  9 * 4,			/* %cs */
+  12 * 4,			/* %ss */
+  -1				/* filler */
 };
 
-static struct nto_target_ops i386_nto_target;
+/* Given a GDB register number REGNUM, return the offset into
+   Neutrino's register structure or -1 if the register is unknown.  */
 
-/* Given a gdb regno, return the offset into Neutrino's register structure
-   or -1 if register is unknown.  */
 static int
-nto_reg_offset (int regno)
+nto_reg_offset (int regnum)
 {
-  return (regno >= 0 && regno < NUM_GPREGS) ? regmap[regno] : -1;
+  if (regnum >= 0 && regnum < ARRAY_SIZE (i386nto_gregset_reg_offset))
+    return i386nto_gregset_reg_offset[regnum];
+
+  return -1;
 }
 
 static void
 i386nto_supply_gregset (char *gpregs)
 {
-  unsigned regno;
-  int empty = 0;
+  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
 
-  for (regno = 0; regno < I386_NUM_GREGS; regno++)
-    {
-      int offset = nto_reg_offset (regno);
-      if (offset == -1)
-	regcache_raw_supply (current_regcache, regno, (char *) &empty);
-      else
-	regcache_raw_supply (current_regcache, regno, gpregs + offset);
-    }
+  if(tdep->gregset == NULL)
+    tdep->gregset = regset_alloc (current_gdbarch, i386_supply_gregset,
+				  i386_collect_gregset);
+
+  gdb_assert (tdep->gregset_reg_offset == i386nto_gregset_reg_offset);
+  tdep->gregset->supply_regset (tdep->gregset, current_regcache, -1,
+				gpregs, NUM_GPREGS * 4);
 }
 
 static void
@@ -101,7 +108,7 @@ i386nto_supply_regset (int regset, char 
 {
   switch (regset)
     {
-    case NTO_REG_GENERAL:	/* QNX has different ordering of GP regs than GDB.  */
+    case NTO_REG_GENERAL:
       i386nto_supply_gregset (data);
       break;
     case NTO_REG_FLOAT:
@@ -258,6 +265,10 @@ i386nto_init_abi (struct gdbarch_info in
   /* NTO has shared libraries.  */
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
 
+  tdep->gregset_reg_offset = i386nto_gregset_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (i386nto_gregset_reg_offset);
+  tdep->sizeof_gregset = NUM_GPREGS * 4;
+
   tdep->sigtramp_p = i386nto_sigtramp_p;
   tdep->sigcontext_addr = i386nto_sigcontext_addr;
   tdep->sc_pc_offset = 56;
Index: nto-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/nto-tdep.c,v
retrieving revision 1.10
diff -u -p -r1.10 nto-tdep.c
--- nto-tdep.c	10 Dec 2004 13:38:23 -0000	1.10
+++ nto-tdep.c	24 Dec 2004 14:42:01 -0000
@@ -66,7 +66,7 @@ nto_target (void)
 }
 
 void
-nto_set_target(struct nto_target_ops *targ)
+nto_set_target (struct nto_target_ops *targ)
 {
   nto_regset_id = targ->regset_id;
   nto_supply_gregset = targ->supply_gregset;
@@ -345,41 +345,10 @@ enum gdb_osabi
 nto_elf_osabi_sniffer (bfd *abfd)
 {
   if (nto_is_nto_target)
-      return nto_is_nto_target (abfd);
+    return nto_is_nto_target (abfd);
   return GDB_OSABI_UNKNOWN;
 }
 
-static void
-fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
-		      int which, CORE_ADDR reg_addr)
-{
-  nto_regset_t regset;
-
-/* See corelow.c:get_core_registers for values of WHICH.  */
-  if (which == 0)
-    {
-      memcpy ((char *) &regset, core_reg_sect,
-	      min (core_reg_size, sizeof (regset)));
-      nto_supply_gregset ((char *) &regset);
-    }
-  else if (which == 2)
-    {
-      memcpy ((char *) &regset, core_reg_sect,
-	      min (core_reg_size, sizeof (regset)));
-      nto_supply_fpregset ((char *) &regset);
-    }
-}
-
-/* Register that we are able to handle ELF file formats using standard
-   procfs "regset" structures.  */
-static struct core_fns regset_core_fns = {
-  bfd_target_elf_flavour,	/* core_flavour */
-  default_check_format,		/* check_format */
-  default_core_sniffer,		/* core_sniffer */
-  fetch_core_registers,		/* core_read_registers */
-  NULL				/* next */
-};
-
 void
 nto_initialize_signals (void)
 {
@@ -414,6 +383,4 @@ When non-zero, nto specific debug info i
 displayed. Different information is displayed\n\
 for different positive values.", "\
 QNX NTO internal debugging is %s.", NULL, NULL, &setdebuglist, &showdebuglist);
-  /* Register core file support.  */
-  deprecated_add_core_fns (&regset_core_fns);
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]