From: Kris Warkentin <kewarken@qnx.com>
To: "M.M. Kettenis" <m.m.kettenis@alumnus.utwente.nl>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [patch] remove deprecated core support from QNX NTO
Date: Thu, 23 Dec 2004 22:31:00 -0000 [thread overview]
Message-ID: <41CAFE17.4070605@qnx.com> (raw)
In-Reply-To: <41CAF4EC.3040804@qnx.com>
[-- 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 ----
next prev parent reply other threads:[~2004-12-23 17:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <41CA34EF.6040401@qnx.com>
2004-12-23 16:28 ` M.M. Kettenis
2004-12-23 17:12 ` Kris Warkentin
2004-12-23 22:31 ` Kris Warkentin [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41CAFE17.4070605@qnx.com \
--to=kewarken@qnx.com \
--cc=gdb-patches@sources.redhat.com \
--cc=m.m.kettenis@alumnus.utwente.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox