* Re: [patch] remove deprecated core support from QNX NTO
[not found] <41CA34EF.6040401@qnx.com>
@ 2004-12-23 16:28 ` M.M. Kettenis
2004-12-23 17:12 ` Kris Warkentin
0 siblings, 1 reply; 7+ messages in thread
From: M.M. Kettenis @ 2004-12-23 16:28 UTC (permalink / raw)
To: Kris Warkentin; +Cc: gdb-patches
[-- Attachment #1: Message body --]
[-- Type: text/plain, Size: 783 bytes --]
Kris Warkentin <kewarken@qnx.com> wrote:
> > Any reason why you can't use the generic register support in
> > i386-tdep.c?
>
> Actually, I take advantage of the i387 generics for the floating point
> regs since our kernel just uses the opcode to push them in the normal
> order. Unfortunately though, our gpregs are in a different order and
> not all of them are there so we have some unique mappings.
QNX NTO is in no way special about this. I was thinking about something like the attached patch. Could you test that one? This approach simply reduces the amount of code needed.
The patch also contains a unrelated change to the shared library code. It also removes a unneeded function. But it'd be nice if you could test that I didn't mess things up.
Mark
[-- Attachment #2: patch --]
[-- Type: application/octet-stream, Size: 5663 bytes --]
Index: i386-nto-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-nto-tdep.c,v
retrieving revision 1.16
diff -u -p -u -p -r1.16 i386-nto-tdep.c
--- i386-nto-tdep.c 10 Dec 2004 13:38:23 -0000 1.16
+++ i386-nto-tdep.c 23 Dec 2004 15:24:42 -0000
@@ -21,17 +21,22 @@
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include "gdb_string.h"
-#include "gdb_assert.h"
#include "defs.h"
#include "frame.h"
-#include "target.h"
+#include "osabi.h"
#include "regcache.h"
-#include "solib-svr4.h"
+#include "target.h"
+
+#include "gdb_string.h"
+#include "gdb_assert.h"
+
#include "i386-tdep.h"
-#include "nto-tdep.h"
-#include "osabi.h"
#include "i387-tdep.h"
+#include "nto-tdep.h"
+#include "solib-svr4.h"
+
+/* FIXME: Comment. */
+static struct nto_target_ops i386_nto_target;
#ifndef X86_CPU_FXSR
#define X86_CPU_FXSR (1L << 12)
@@ -42,47 +47,47 @@
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))
+ 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);
+ struct regset *gregset = tdep->gregset;
- 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);
- }
+ gdb_assert (tdep->gregset_reg_offset == i386nto_gregset_reg_offset);
+ i386_supply_gregset (gregset, current_regcache, -1, gpregs, NUM_GPREGS * 4);
}
static void
@@ -99,7 +104,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:
@@ -194,39 +199,6 @@ i386nto_regset_fill (int regset, char *d
return 0;
}
-static struct link_map_offsets *
-i386nto_svr4_fetch_link_map_offsets (void)
-{
- static struct link_map_offsets lmo;
- static struct link_map_offsets *lmp = NULL;
-
- if (lmp == NULL)
- {
- lmp = &lmo;
-
- lmo.r_debug_size = 8; /* The actual size is 20 bytes, but
- only 8 bytes are used. */
- lmo.r_map_offset = 4;
- lmo.r_map_size = 4;
-
- lmo.link_map_size = 20; /* The actual size is 552 bytes, but
- only 20 bytes are used. */
- lmo.l_addr_offset = 0;
- lmo.l_addr_size = 4;
-
- lmo.l_name_offset = 4;
- lmo.l_name_size = 4;
-
- lmo.l_next_offset = 12;
- lmo.l_next_size = 4;
-
- lmo.l_prev_offset = 16;
- lmo.l_prev_size = 4;
- }
-
- return lmp;
-}
-
/* Return whether the frame preceding NEXT_FRAME corresponds to a QNX
Neutrino sigtramp routine. */
@@ -268,7 +240,7 @@ init_i386nto_ops (void)
i386_nto_target.register_area = i386nto_register_area;
i386_nto_target.regset_fill = i386nto_regset_fill;
i386_nto_target.fetch_link_map_offsets =
- i386nto_svr4_fetch_link_map_offsets;
+ svr4_ilp32_fetch_link_map_offsets;
}
static void
@@ -289,6 +261,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;
@@ -297,8 +273,8 @@ i386nto_init_abi (struct gdbarch_info in
/* Setjmp()'s return PC saved in EDX (5). */
tdep->jb_pc_offset = 20; /* 5x32 bit ints in. */
- set_solib_svr4_fetch_link_map_offsets (gdbarch,
- i386nto_svr4_fetch_link_map_offsets);
+ set_solib_svr4_fetch_link_map_offsets
+ (gdbarch, svr4_ilp32_fetch_link_map_offsets);
/* Our loader handles solib relocations slightly differently than svr4. */
TARGET_SO_RELOCATE_SECTION_ADDRESSES = nto_relocate_section_addresses;
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [patch] remove deprecated core support from QNX NTO
2004-12-23 16:28 ` [patch] remove deprecated core support from QNX NTO M.M. Kettenis
@ 2004-12-23 17:12 ` Kris Warkentin
2004-12-23 22:31 ` Kris Warkentin
0 siblings, 1 reply; 7+ messages in thread
From: Kris Warkentin @ 2004-12-23 17:12 UTC (permalink / raw)
To: M.M. Kettenis; +Cc: gdb-patches
M.M. Kettenis wrote:
>>regs since our kernel just uses the opcode to push them in the normal
>>order. Unfortunately though, our gpregs are in a different order and
>>not all of them are there so we have some unique mappings.
>>
>>
>
>QNX NTO is in no way special about this. I was thinking about something
>like the attached patch. Could you test that one? This approach simply
>reduces the amount of code needed.
>
>
Looks good. I didn't know the i386-tdep had the mapping ability. Do
other arches have that as well? I'm assuming you meant to return the
value here:
static int
nto_reg_offset (int regnum)
{
if (regnum >= 0 && regnum < ARRAY_SIZE (i386nto_gregset_reg_offset))
i386nto_gregset_reg_offset[regnum];
^^^^ return?
return -1;
}
When I run an app, it's dumping core in i386_supply_gregset because
tdep->regset is not initialized. Not quite sure what the proper way to
do that is. Still investigating.
>The patch also contains a unrelated change to the shared library code.
>It also removes a unneeded function. But it'd be nice if you could test
>that I didn't mess things up.
>
>
Thanks for all the help Mark. I'm always a big fan of eliminating
redundant code.
cheers,
Kris
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [patch] remove deprecated core support from QNX NTO
2004-12-23 17:12 ` Kris Warkentin
@ 2004-12-23 22:31 ` Kris Warkentin
2004-12-23 22:34 ` Mark Kettenis
0 siblings, 1 reply; 7+ messages in thread
From: Kris Warkentin @ 2004-12-23 22:31 UTC (permalink / raw)
To: M.M. Kettenis; +Cc: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 556 bytes --]
Kris Warkentin wrote:
>When I run an app, it's dumping core in i386_supply_gregset because
>tdep->regset is not initialized. Not quite sure what the proper way to
>do that is. Still investigating.
>
Got it working. I had to put a check in i386_nto_supply_gregset for
whether tdep->regset had been allocated or not. I've attached the new
patch which is a blend of your code and mine. Much cleaner and results
in a fair bit of code removal. I'll wait until you tell me I'm not
completely off base before I construct a ChangeLog.
cheers,
Kris
[-- Attachment #2: blah.diff --]
[-- Type: text/x-patch, Size: 9616 bytes --]
Index: i386-nto-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-nto-tdep.c,v
retrieving revision 1.16
diff -c -r1.16 i386-nto-tdep.c
*** i386-nto-tdep.c 10 Dec 2004 13:38:23 -0000 1.16
--- i386-nto-tdep.c 23 Dec 2004 17:15:14 -0000
***************
*** 21,37 ****
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
- #include "gdb_string.h"
- #include "gdb_assert.h"
#include "defs.h"
#include "frame.h"
! #include "target.h"
#include "regcache.h"
! #include "solib-svr4.h"
#include "i386-tdep.h"
- #include "nto-tdep.h"
- #include "osabi.h"
#include "i387-tdep.h"
#ifndef X86_CPU_FXSR
#define X86_CPU_FXSR (1L << 12)
--- 21,42 ----
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "frame.h"
! #include "osabi.h"
#include "regcache.h"
! #include "target.h"
!
! #include "gdb_string.h"
! #include "gdb_assert.h"
!
#include "i386-tdep.h"
#include "i387-tdep.h"
+ #include "nto-tdep.h"
+ #include "solib-svr4.h"
+
+ /* Target vector for i386nto target. */
+ static struct nto_target_ops i386_nto_target;
#ifndef X86_CPU_FXSR
#define X86_CPU_FXSR (1L << 12)
***************
*** 42,88 ****
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 */
};
! static struct nto_target_ops i386_nto_target;
- /* 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)
{
! return (regno >= 0 && regno < NUM_GPREGS) ? regmap[regno] : -1;
}
static void
i386nto_supply_gregset (char *gpregs)
{
! unsigned regno;
! int empty = 0;
! 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);
! }
}
static void
--- 47,95 ----
that is just filler. Don't ask me, ask the kernel guys. */
#define NUM_GPREGS 13
! /* 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 */
};
! /* Given a GDB register number REGNUM, return the offset into
! Neutrino's register structure or -1 if the register is unknown. */
static int
! nto_reg_offset (int regnum)
{
! 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)
{
! struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
! if(tdep->gregset == NULL)
! tdep->gregset = regset_alloc (current_gdbarch, i386_supply_gregset, NULL);
!
! gdb_assert (tdep->gregset_reg_offset == i386nto_gregset_reg_offset);
! i386_supply_gregset (tdep->gregset, current_regcache, -1, gpregs, NUM_GPREGS * 4);
}
static void
***************
*** 99,105 ****
{
switch (regset)
{
! case NTO_REG_GENERAL: /* QNX has different ordering of GP regs than GDB. */
i386nto_supply_gregset (data);
break;
case NTO_REG_FLOAT:
--- 106,112 ----
{
switch (regset)
{
! case NTO_REG_GENERAL:
i386nto_supply_gregset (data);
break;
case NTO_REG_FLOAT:
***************
*** 194,232 ****
return 0;
}
- static struct link_map_offsets *
- i386nto_svr4_fetch_link_map_offsets (void)
- {
- static struct link_map_offsets lmo;
- static struct link_map_offsets *lmp = NULL;
-
- if (lmp == NULL)
- {
- lmp = &lmo;
-
- lmo.r_debug_size = 8; /* The actual size is 20 bytes, but
- only 8 bytes are used. */
- lmo.r_map_offset = 4;
- lmo.r_map_size = 4;
-
- lmo.link_map_size = 20; /* The actual size is 552 bytes, but
- only 20 bytes are used. */
- lmo.l_addr_offset = 0;
- lmo.l_addr_size = 4;
-
- lmo.l_name_offset = 4;
- lmo.l_name_size = 4;
-
- lmo.l_next_offset = 12;
- lmo.l_next_size = 4;
-
- lmo.l_prev_offset = 16;
- lmo.l_prev_size = 4;
- }
-
- return lmp;
- }
-
/* Return whether the frame preceding NEXT_FRAME corresponds to a QNX
Neutrino sigtramp routine. */
--- 201,206 ----
***************
*** 268,274 ****
i386_nto_target.register_area = i386nto_register_area;
i386_nto_target.regset_fill = i386nto_regset_fill;
i386_nto_target.fetch_link_map_offsets =
! i386nto_svr4_fetch_link_map_offsets;
}
static void
--- 242,248 ----
i386_nto_target.register_area = i386nto_register_area;
i386_nto_target.regset_fill = i386nto_regset_fill;
i386_nto_target.fetch_link_map_offsets =
! svr4_ilp32_fetch_link_map_offsets;
}
static void
***************
*** 276,281 ****
--- 250,259 ----
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ /* Register core file support. */
+ set_gdbarch_regset_from_core_section
+ (gdbarch, i386_regset_from_core_section);
+
/* Deal with our strange signals. */
nto_initialize_signals ();
***************
*** 289,294 ****
--- 267,276 ----
/* 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;
***************
*** 297,304 ****
/* Setjmp()'s return PC saved in EDX (5). */
tdep->jb_pc_offset = 20; /* 5x32 bit ints in. */
! set_solib_svr4_fetch_link_map_offsets (gdbarch,
! i386nto_svr4_fetch_link_map_offsets);
/* Our loader handles solib relocations slightly differently than svr4. */
TARGET_SO_RELOCATE_SECTION_ADDRESSES = nto_relocate_section_addresses;
--- 279,286 ----
/* Setjmp()'s return PC saved in EDX (5). */
tdep->jb_pc_offset = 20; /* 5x32 bit ints in. */
! set_solib_svr4_fetch_link_map_offsets
! (gdbarch, svr4_ilp32_fetch_link_map_offsets);
/* Our loader handles solib relocations slightly differently than svr4. */
TARGET_SO_RELOCATE_SECTION_ADDRESSES = nto_relocate_section_addresses;
Index: nto-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/nto-tdep.c,v
retrieving revision 1.10
diff -c -r1.10 nto-tdep.c
*** nto-tdep.c 10 Dec 2004 13:38:23 -0000 1.10
--- nto-tdep.c 23 Dec 2004 17:15:14 -0000
***************
*** 66,72 ****
}
void
! nto_set_target(struct nto_target_ops *targ)
{
nto_regset_id = targ->regset_id;
nto_supply_gregset = targ->supply_gregset;
--- 66,72 ----
}
void
! nto_set_target (struct nto_target_ops *targ)
{
nto_regset_id = targ->regset_id;
nto_supply_gregset = targ->supply_gregset;
***************
*** 345,385 ****
nto_elf_osabi_sniffer (bfd *abfd)
{
if (nto_is_nto_target)
! 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 *) ®set, core_reg_sect,
- min (core_reg_size, sizeof (regset)));
- nto_supply_gregset ((char *) ®set);
- }
- else if (which == 2)
- {
- memcpy ((char *) ®set, core_reg_sect,
- min (core_reg_size, sizeof (regset)));
- nto_supply_fpregset ((char *) ®set);
- }
- }
-
- /* 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)
{
--- 345,354 ----
nto_elf_osabi_sniffer (bfd *abfd)
{
if (nto_is_nto_target)
! return nto_is_nto_target (abfd);
return GDB_OSABI_UNKNOWN;
}
void
nto_initialize_signals (void)
{
***************
*** 414,419 ****
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 (®set_core_fns);
}
--- 383,386 ----
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [patch] remove deprecated core support from QNX NTO
2004-12-23 22:31 ` Kris Warkentin
@ 2004-12-23 22:34 ` Mark Kettenis
0 siblings, 0 replies; 7+ messages in thread
From: Mark Kettenis @ 2004-12-23 22:34 UTC (permalink / raw)
To: kewarken; +Cc: gdb-patches
Date: Thu, 23 Dec 2004 12:19:19 -0500
From: Kris Warkentin <kewarken@qnx.com>
Kris Warkentin wrote:
>When I run an app, it's dumping core in i386_supply_gregset because
>tdep->regset is not initialized. Not quite sure what the proper way to
>do that is. Still investigating.
>
Got it working. I had to put a check in i386_nto_supply_gregset for
whether tdep->regset had been allocated or not. I've attached the new
patch which is a blend of your code and mine. Much cleaner and results
in a fair bit of code removal. I'll wait until you tell me I'm not
completely off base before I construct a ChangeLog.
Thanks for testing this. The solib changes really need to be
seperated out, but I'll take care of this, and check things in over
christmas.
Thanks again,
Mark
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [patch] remove deprecated core support from QNX NTO
2004-12-23 3:02 ` Mark Kettenis
@ 2004-12-23 9:21 ` Kris Warkentin
0 siblings, 0 replies; 7+ messages in thread
From: Kris Warkentin @ 2004-12-23 9:21 UTC (permalink / raw)
To: gdb-patches
Mark Kettenis wrote:
> Date: Tue, 21 Dec 2004 18:23:35 -0500
> From: Kris Warkentin <kewarken@qnx.com>
>
> Really long ChangeLog for relatively simple fix. Created new
> supply_regset functions and changed my old ones to call them instead.
>
> Then register them with gdbarch and rip out all the deprecated stuff.
>
> Look okay?
>
> Any reason why you can't use the generic register support in
> i386-tdep.c?
Actually, I take advantage of the i387 generics for the floating point
regs since our kernel just uses the opcode to push them in the normal
order. Unfortunately though, our gpregs are in a different order and
not all of them are there so we have some unique mappings. Plus, having
it all in one place makes it more consistent when switching between
native and remote targets.
cheers,
Kris
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [patch] remove deprecated core support from QNX NTO
2004-12-22 22:03 Kris Warkentin
@ 2004-12-23 3:02 ` Mark Kettenis
2004-12-23 9:21 ` Kris Warkentin
0 siblings, 1 reply; 7+ messages in thread
From: Mark Kettenis @ 2004-12-23 3:02 UTC (permalink / raw)
To: kewarken; +Cc: gdb-patches
Date: Tue, 21 Dec 2004 18:23:35 -0500
From: Kris Warkentin <kewarken@qnx.com>
Really long ChangeLog for relatively simple fix. Created new
supply_regset functions and changed my old ones to call them instead.
Then register them with gdbarch and rip out all the deprecated stuff.
Look okay?
Any reason why you can't use the generic register support in
i386-tdep.c?
Mark
^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch] remove deprecated core support from QNX NTO
@ 2004-12-22 22:03 Kris Warkentin
2004-12-23 3:02 ` Mark Kettenis
0 siblings, 1 reply; 7+ messages in thread
From: Kris Warkentin @ 2004-12-22 22:03 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 812 bytes --]
Really long ChangeLog for relatively simple fix. Created new
supply_regset functions and changed my old ones to call them instead.
Then register them with gdbarch and rip out all the deprecated stuff.
Look okay?
cheers,
Kris
2004-12-21 Kris Warkentin <kewarken@qnx.com>
* i386-nto-tdep.c (i386nto_supply_gregset_core): New function.
(i386nto_supply_fpregset_core): Ditto.
(i386nto_supply_gregset): Call core function above.
(i386nto_supply_fpregset): Ditto.
(i386nto_gregset): New structure for core file support.
(i386nto_fpregset): Ditto.
(i386nto_regset_from_core_section): New function.
(i386nto_init_abi): Register core file support.
* nto-tdep.c (fetch_core_registers): Remove function.
(regset_core_fns): Remove structure.
(_initialize_nto_tdep): Don't call deprecated_add_core_fns.
[-- Attachment #2: core.diff --]
[-- Type: text/plain, Size: 5629 bytes --]
Index: i386-nto-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-nto-tdep.c,v
retrieving revision 1.16
diff -c -r1.16 i386-nto-tdep.c
*** i386-nto-tdep.c 10 Dec 2004 13:38:23 -0000 1.16
--- i386-nto-tdep.c 21 Dec 2004 23:18:38 -0000
***************
*** 70,97 ****
}
static void
! i386nto_supply_gregset (char *gpregs)
{
! unsigned regno;
int empty = 0;
! 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);
}
}
static void
! i386nto_supply_fpregset (char *fpregs)
{
! if (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR)
! i387_supply_fxsave (current_regcache, -1, fpregs);
else
! i387_supply_fsave (current_regcache, -1, fpregs);
}
static void
--- 70,149 ----
}
static void
! i386nto_supply_gregset_core (const struct regset *regset,
! struct regcache *regcache,
! int regnum, const void *gregs, size_t len)
{
! const char *regs = gregs;
! unsigned i;
int empty = 0;
! for (i = 0; i < I386_NUM_GREGS; i++)
{
! if (i == regnum || regnum == -1)
! {
! int offset = nto_reg_offset (i);
! if (offset == -1)
! regcache_raw_supply (regcache, i, (char *) &empty);
! else
! regcache_raw_supply (regcache, i, regs + offset);
! }
}
}
static void
! i386nto_supply_gregset (char *gpregs)
{
! i386nto_supply_gregset_core (NULL, current_regcache, -1, gpregs,
! NUM_GPREGS * 4);
! }
!
! static void
! i386nto_supply_fpregset_core (const struct regset *regset,
! struct regcache *regcache,
! int regnum, const void *fpregs, size_t len)
! {
! if (len >= I387_SIZEOF_FXSAVE)
! i387_supply_fxsave (current_regcache, regnum, fpregs);
else
! i387_supply_fsave (current_regcache, regnum, fpregs);
! }
!
! static void
! i386nto_supply_fpregset (char *fpregs)
! {
! int len = (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR) ?
! I387_SIZEOF_FXSAVE : I387_SIZEOF_FSAVE;
!
! i386nto_supply_fpregset_core (NULL, current_regcache, -1, fpregs, len);
! }
!
! /* nto i386 register sets. */
!
! static struct regset i386nto_gregset = {
! NULL,
! i386nto_supply_gregset_core
! };
!
! static struct regset i386nto_fpregset = {
! NULL,
! i386nto_supply_fpregset_core
! };
!
! /* Return the appropriate register set for the core section identified
! by SECT_NAME and SECT_SIZE. */
!
! static const struct regset *
! i386nto_regset_from_core_section (struct gdbarch *gdbarch,
! const char *sect_name, size_t sect_size)
! {
! if (strcmp (sect_name, ".reg") == 0)
! return &i386nto_gregset;
!
! if (strcmp (sect_name, ".reg2") == 0)
! return &i386nto_fpregset;
!
! return NULL;
}
static void
***************
*** 276,281 ****
--- 328,337 ----
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ /* Register core file support. */
+ set_gdbarch_regset_from_core_section
+ (gdbarch, i386nto_regset_from_core_section);
+
/* Deal with our strange signals. */
nto_initialize_signals ();
Index: nto-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/nto-tdep.c,v
retrieving revision 1.10
diff -c -r1.10 nto-tdep.c
*** nto-tdep.c 10 Dec 2004 13:38:23 -0000 1.10
--- nto-tdep.c 21 Dec 2004 23:18:38 -0000
***************
*** 66,72 ****
}
void
! nto_set_target(struct nto_target_ops *targ)
{
nto_regset_id = targ->regset_id;
nto_supply_gregset = targ->supply_gregset;
--- 66,72 ----
}
void
! nto_set_target (struct nto_target_ops *targ)
{
nto_regset_id = targ->regset_id;
nto_supply_gregset = targ->supply_gregset;
***************
*** 345,385 ****
nto_elf_osabi_sniffer (bfd *abfd)
{
if (nto_is_nto_target)
! 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 *) ®set, core_reg_sect,
- min (core_reg_size, sizeof (regset)));
- nto_supply_gregset ((char *) ®set);
- }
- else if (which == 2)
- {
- memcpy ((char *) ®set, core_reg_sect,
- min (core_reg_size, sizeof (regset)));
- nto_supply_fpregset ((char *) ®set);
- }
- }
-
- /* 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)
{
--- 345,354 ----
nto_elf_osabi_sniffer (bfd *abfd)
{
if (nto_is_nto_target)
! return nto_is_nto_target (abfd);
return GDB_OSABI_UNKNOWN;
}
void
nto_initialize_signals (void)
{
***************
*** 414,419 ****
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 (®set_core_fns);
}
--- 383,386 ----
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2004-12-23 22:32 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <41CA34EF.6040401@qnx.com>
2004-12-23 16:28 ` [patch] remove deprecated core support from QNX NTO M.M. Kettenis
2004-12-23 17:12 ` Kris Warkentin
2004-12-23 22:31 ` Kris Warkentin
2004-12-23 22:34 ` Mark Kettenis
2004-12-22 22:03 Kris Warkentin
2004-12-23 3:02 ` Mark Kettenis
2004-12-23 9:21 ` Kris Warkentin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox