diff options
-rw-r--r-- | gdb/ChangeLog | 22 | ||||
-rw-r--r-- | gdb/Makefile.in | 3 | ||||
-rw-r--r-- | gdb/config/i386/nbsdaout.mt | 3 | ||||
-rw-r--r-- | gdb/config/i386/nbsdelf.mt | 3 | ||||
-rw-r--r-- | gdb/i386-tdep.h | 1 | ||||
-rw-r--r-- | gdb/i386bsd-tdep.c | 61 | ||||
-rw-r--r-- | gdb/i386nbsd-tdep.c | 79 |
7 files changed, 109 insertions, 63 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 13b07df..da5ebb6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,25 @@ +2002-09-02 Jason Thorpe <thorpej@wasabisystems.com> + + * Makefile.in (i386nbsd-tdep.o): Add $(arch_utils_h), + $(i386_tdep_h), and $(nbsd_tdep_h) to dependency list. + * i386-tdep.h (i386bsd_init_abi): New prototype. + * i386bsd-tdep.c (i386bsd_init_abi): Remove "static" from + function declaration. + (_initialize_i386bsd_tdep): Don't register OS ABI handlers + for NetBSD-a.out or NetBSD-ELF. + (i386nbsd_sigtramp_start, i386nbsd_sigtramp_end) + (i386nbsd_sc_pc_offset, i386nbsd_sc_sp_offset) + (i386nbsd_init_abi, i386nbsdelf_init_abi): Move to... + * i386nbsd-tdep.c: ...here. Include arch-utils.h, i386-tdep.h, + and nbsd-tdep.h. + (i386nbsd_pc_in_sigtramp): New function. + (i386nbsd_init_abi): Set gdbarch_pc_in_sigtramp to + i386nbsd_pc_in_sigtramp. + (_initialize_i386nbsd_tdep): Register i386nbsd_init_abi + and i386nbsdelf_init_abi OS ABI handlers. + * config/i386/nbsdaout.mt (TDEPFILES): Add nbsd-tdep.o. + * config/i386/nbsdelf.mt (TDEPFILES): Likewise. + 2002-09-02 Mark Kettenis <kettenis@gnu.org> * i386-linux-nat.c (dummy_sse_values): Only try to fill in the SSE diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 2389bdc..2ce4805 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1755,7 +1755,8 @@ i386ly-tdep.o: i386ly-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \ # OBSOLETE i386m3-nat.o: i386m3-nat.c # OBSOLETE i386mach-nat.o: i386mach-nat.c i386nbsd-tdep.o: i386nbsd-tdep.c $(defs_h) $(gdbtypes_h) $(gdbcore_h) \ - $(regcache_h) $(i387_tdep_h) + $(regcache_h) $(arch_utils_h) $(i386_tdep_h) $(i387_tdep_h) \ + $(nbsd_tdep_h) i386obsd-nat.o: i386obsd-nat.c $(defs_h) i386v-nat.o: i386v-nat.c $(defs_h) $(frame_h) $(inferior_h) $(language_h) \ $(gdbcore_h) $(gdb_stat_h) $(floatformat_h) $(target_h) diff --git a/gdb/config/i386/nbsdaout.mt b/gdb/config/i386/nbsdaout.mt index aa88957..7ffb502 100644 --- a/gdb/config/i386/nbsdaout.mt +++ b/gdb/config/i386/nbsdaout.mt @@ -1,3 +1,4 @@ # Target: Intel 386 running NetBSD -TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o corelow.o +TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o corelow.o \ + nbsd-tdep.o TM_FILE= tm-nbsdaout.h diff --git a/gdb/config/i386/nbsdelf.mt b/gdb/config/i386/nbsdelf.mt index fc80608..a1035cf 100644 --- a/gdb/config/i386/nbsdelf.mt +++ b/gdb/config/i386/nbsdelf.mt @@ -1,3 +1,4 @@ # Target: Intel 386 running NetBSD -TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o corelow.o +TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o corelow.o \ + nbsd-tdep.o TM_FILE= tm-nbsd.h diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h index 30128d9..646001b 100644 --- a/gdb/i386-tdep.h +++ b/gdb/i386-tdep.h @@ -175,5 +175,6 @@ extern void i386_svr4_init_abi (struct gdbarch_info, struct gdbarch *); /* Functions exported from i386bsd-tdep.c. */ extern CORE_ADDR i386bsd_sigcontext_addr (struct frame_info *frame); +extern void i386bsd_init_abi (struct gdbarch_info, struct gdbarch *); #endif /* i386-tdep.h */ diff --git a/gdb/i386bsd-tdep.c b/gdb/i386bsd-tdep.c index 2edf3ea..368fa56 100644 --- a/gdb/i386bsd-tdep.c +++ b/gdb/i386bsd-tdep.c @@ -93,7 +93,7 @@ i386bsd_aout_in_solib_call_trampoline (CORE_ADDR pc, char *name) int i386bsd_sc_pc_offset = 20; int i386bsd_sc_sp_offset = 8; -static void +void i386bsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); @@ -113,61 +113,6 @@ i386bsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) tdep->sc_sp_offset = i386bsd_sc_sp_offset; } -/* NetBSD 1.0 or later. */ - -CORE_ADDR i386nbsd_sigtramp_start = 0xbfbfdf20; -CORE_ADDR i386nbsd_sigtramp_end = 0xbfbfdff0; - -/* From <machine/signal.h>. */ -int i386nbsd_sc_pc_offset = 44; -int i386nbsd_sc_sp_offset = 56; - -static void -i386nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) -{ - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - - /* Obviously NetBSD is BSD-based. */ - i386bsd_init_abi (info, gdbarch); - - /* NetBSD uses -freg-struct-return by default. */ - tdep->struct_return = reg_struct_return; - - /* NetBSD uses a different memory layout. */ - tdep->sigtramp_start = i386nbsd_sigtramp_start; - tdep->sigtramp_end = i386nbsd_sigtramp_end; - - /* NetBSD has a `struct sigcontext' that's different from the - origional 4.3 BSD. */ - tdep->sc_pc_offset = i386nbsd_sc_pc_offset; - tdep->sc_sp_offset = i386nbsd_sc_sp_offset; -} - -/* NetBSD ELF. */ -static void -i386nbsdelf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) -{ - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - - /* It's still NetBSD. */ - i386nbsd_init_abi (info, gdbarch); - - /* But ELF-based. */ - i386_elf_init_abi (info, gdbarch); - - /* NetBSD ELF uses SVR4-style shared libraries. */ - set_gdbarch_in_solib_call_trampoline (gdbarch, - generic_in_solib_call_trampoline); - - /* NetBSD ELF uses -fpcc-struct-return by default. */ - tdep->struct_return = pcc_struct_return; - - /* We support the SSE registers on NetBSD ELF. */ - tdep->num_xmm_regs = I386_NUM_XREGS - 1; - set_gdbarch_num_regs (gdbarch, I386_NUM_GREGS + I386_NUM_FREGS - + I386_NUM_XREGS); -} - /* FreeBSD 3.0-RELEASE or later. */ CORE_ADDR i386fbsd_sigtramp_start = 0xbfbfdf20; @@ -246,10 +191,6 @@ _initialize_i386bsd_tdep (void) gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_aout_flavour, i386bsd_aout_osabi_sniffer); - gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_NETBSD_AOUT, - i386nbsd_init_abi); - gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_NETBSD_ELF, - i386nbsdelf_init_abi); gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_FREEBSD_AOUT, i386fbsdaout_init_abi); gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_FREEBSD_ELF, diff --git a/gdb/i386nbsd-tdep.c b/gdb/i386nbsd-tdep.c index 634101a..cba2f19 100644 --- a/gdb/i386nbsd-tdep.c +++ b/gdb/i386nbsd-tdep.c @@ -23,8 +23,11 @@ #include "gdbtypes.h" #include "gdbcore.h" #include "regcache.h" +#include "arch-utils.h" +#include "i386-tdep.h" #include "i387-tdep.h" +#include "nbsd-tdep.h" /* Map a GDB register number to an offset in the reg structure. */ static int regmap[] = @@ -137,9 +140,85 @@ static struct core_fns i386nbsd_elfcore_fns = NULL /* next */ }; +static int +i386nbsd_pc_in_sigtramp (CORE_ADDR pc, char *name) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + + /* Check for libc-provided signal trampoline. */ + if (nbsd_pc_in_sigtramp (pc, name)) + return 1; + + /* FIXME: sigtramp_start/sigtramp_end need to go away; we should + not be assuming the location of the kernel-provided trampoline! */ + + return (pc >= tdep->sigtramp_start && pc < tdep->sigtramp_end); +} + +CORE_ADDR i386nbsd_sigtramp_start = 0xbfbfdf20; +CORE_ADDR i386nbsd_sigtramp_end = 0xbfbfdff0; + +/* From <machine/signal.h>. */ +int i386nbsd_sc_pc_offset = 44; +int i386nbsd_sc_sp_offset = 56; + +static void +i386nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + /* Obviously NetBSD is BSD-based. */ + i386bsd_init_abi (info, gdbarch); + + /* NetBSD has different signal trampoline conventions. */ + set_gdbarch_pc_in_sigtramp (gdbarch, i386nbsd_pc_in_sigtramp); + + /* NetBSD uses -freg-struct-return by default. */ + tdep->struct_return = reg_struct_return; + + /* NetBSD uses a different memory layout. */ + tdep->sigtramp_start = i386nbsd_sigtramp_start; + tdep->sigtramp_end = i386nbsd_sigtramp_end; + + /* NetBSD has a `struct sigcontext' that's different from the + origional 4.3 BSD. */ + tdep->sc_pc_offset = i386nbsd_sc_pc_offset; + tdep->sc_sp_offset = i386nbsd_sc_sp_offset; +} + +/* NetBSD ELF. */ +static void +i386nbsdelf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + /* It's still NetBSD. */ + i386nbsd_init_abi (info, gdbarch); + + /* But ELF-based. */ + i386_elf_init_abi (info, gdbarch); + + /* NetBSD ELF uses SVR4-style shared libraries. */ + set_gdbarch_in_solib_call_trampoline (gdbarch, + generic_in_solib_call_trampoline); + + /* NetBSD ELF uses -fpcc-struct-return by default. */ + tdep->struct_return = pcc_struct_return; + + /* We support the SSE registers on NetBSD ELF. */ + tdep->num_xmm_regs = I386_NUM_XREGS - 1; + set_gdbarch_num_regs (gdbarch, I386_NUM_GREGS + I386_NUM_FREGS + + I386_NUM_XREGS); +} + void _initialize_i386nbsd_tdep (void) { add_core_fns (&i386nbsd_core_fns); add_core_fns (&i386nbsd_elfcore_fns); + + gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_NETBSD_AOUT, + i386nbsd_init_abi); + gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_NETBSD_ELF, + i386nbsdelf_init_abi); } |