gdb: Remove support for obsolete OSABIs and a.out
gdb/ChangeLog: 2016-12-09 Pedro Alves <palves@redhat.com> * Makefile.in (ALL_TARGET_OBS): Remove vax-obsd-tdep.o. * alpha-fbsd-tdep.c (_initialize_alphafbsd_tdep): Adjust. * alpha-nbsd-tdep.c: Move comment to _initialize_alphanbsd_tdep. (alphanbsd_core_osabi_sniffer): Delete. (_initialize_alphanbsd_tdep): No longer handle a.out. * alpha-obsd-tdep.c (_initialize_alphaobsd_tdep): Adjust. * amd64-fbsd-tdep.c (_initialize_amd64fbsd_tdep): Adjust. * amd64-nbsd-tdep.c (_initialize_amd64nbsd_tdep): Adjust. * amd64-obsd-tdep.c (amd64obsd_supply_regset) (amd64obsd_combined_regset) (amd64obsd_iterate_over_regset_sections, amd64obsd_core_init_abi): Delete. (_initialize_amd64obsd_tdep): Don't handle a.out. * arm-nbsd-nat.c (struct md_core, fetch_core_registers) (arm_netbsd_core_fns): Delete. (_initialize_arm_netbsd_nat): Don't register arm_netbsd_core_fns. * arm-nbsd-tdep.c (arm_netbsd_aout_init_abi) (arm_netbsd_aout_osabi_sniffer): Delete. (_initialize_arm_netbsd_tdep): Don't handle a.out. * arm-obsd-tdep.c (armobsd_core_osabi_sniffer): Delete. (_initialize_armobsd_tdep): Don't handle a.out. * arm-tdep.c (arm_gdbarch_init): Remove bfd_target_aout_flavour case. * breakpoint.c (disable_breakpoints_in_unloaded_shlib): Remove SunOS a.out handling. * configure.tgt (vax-*-netbsd* | vax-*-knetbsd*-gnu): Remove vax-obsd-tdep.o from gdb_target_objs. (vax-*-openbsd*): Likewise. (*-*-freebsd*): Adjust default gdb_osabi. (*-*-openbsd*): Likewise. * dbxread.c (block_address_function_relative): Delete. (dbx_symfile_read): Remove reference to block_address_function_relative. (dbx_symfile_read): Don't call read_dbx_dynamic_symtab. (read_dbx_dynamic_symtab): Delete. (process_one_symbol): Remove references to block_address_function_relative. * defs.h (GDB_OSABI_FREEBSD_AOUT, GDB_OSABI_NETBSD_AOUT): Remove. (GDB_OSABI_FREEBSD_ELF): Rename to ... (GDB_OSABI_FREEBSD): ... this. (GDB_OSABI_NETBSD_ELF): Rename to ... (GDB_OSABI_NETBSD): ... this. (GDB_OSABI_OPENBSD_ELF): Rename to ... (GDB_OSABI_OPENBSD): ... this. (GDB_OSABI_HPUX_ELF, GDB_OSABI_HPUX_SOM): Remove. * fbsd-tdep.c: Adjust comment. * hppa-nbsd-tdep.c (_initialize_hppanbsd_tdep): Adjust. * hppa-obsd-tdep.c (GDB_OSABI_NETBSD_CORE): Delete. (hppaobsd_core_osabi_sniffer): Delete. (_initialize_hppabsd_tdep): Don't handle a.out. * hppa-tdep.c (hppa_stub_frame_unwind_cache): Don't handle GDB_OSABI_HPUX_SOM. (hppa_gdbarch_init): Likewise. * i386-bsd-tdep.c (i386bsd_aout_osabi_sniffer) (i386bsd_core_osabi_sniffer, _initialize_i386bsd_tdep): Delete. * i386-fbsd-tdep.c (i386fbsdaout_init_abi): Delete. Merge bits with ... (i386fbsd_init_abi): ... this. (_initialize_i386fbsd_tdep): Don't handle a.out. * i386-nbsd-tdep.c (_initialize_i386nbsd_tdep): Adjust. * i386-obsd-tdep.c (i386obsd_aout_supply_regset) (i386obsd_aout_gregset) (i386obsd_aout_iterate_over_regset_sections): Delete. (i386obsd_init_abi): Merge with i386obsd_elf_init_abi. (i386obsd_aout_init_abi): Delete. (_initialize_i386obsd_tdep): Don't handle a.out. * m68k-bsd-tdep.c (m68kobsd_sigtramp_cache_init) (m68kobsd_sigtramp): Delete. (m68kbsd_init_abi): Merge with ... (m68kbsd_elf_init_abi): ... this, and delete it. (m68kbsd_aout_init_abi): Delete. (m68kbsd_aout_osabi_sniffer, m68kbsd_core_osabi_sniffer): Delete. (_initialize_m68kbsd_tdep): Don't handle a.out. * mips-nbsd-tdep.c (_initialize_mipsnbsd_tdep): Adjust. * mips64-obsd-tdep.c (_initialize_mips64obsd_tdep): Adjust. * osabi.c (gdb_osabi_names): Remove "a.out" entries. Drop "ELF" suffixes. Remove "HP-UX" entries. (generic_elf_osabi_sniff_abi_tag_sections): Adjust. (generic_elf_osabi_sniffer): No longer handle GDB_OSABI_HPUX_ELF. Adjust. (_initialize_ppcfbsd_tdep): Adjust. * ppc-nbsd-tdep.c (_initialize_ppcnbsd_tdep): Adjust. * ppc-obsd-tdep.c (GDB_OSABI_NETBSD_CORE) (ppcobsd_core_osabi_sniffer): Delete. (_initialize_ppcobsd_tdep): Don't handle a.out. * rs6000-tdep.c (rs6000_gdbarch_init): Adjust. * sh-nbsd-tdep.c (GDB_OSABI_NETBSD_CORE) (shnbsd_core_osabi_sniffer): Delete. (_initialize_shnbsd_tdep): Don't handle a.out. * solib.c (clear_solib): Don't handle SunOS/a.out. * sparc-nbsd-tdep.c (sparc32nbsd_init_abi): Make extern. (sparc32nbsd_aout_init_abi): Delete. (sparc32nbsd_elf_init_abi): Merged into sparc32nbsd_init_abi. (sparcnbsd_aout_osabi_sniffer): Delete. (GDB_OSABI_NETBSD_CORE, sparcnbsd_core_osabi_sniffer): Delete. (_initialize_sparcnbsd_tdep): No longer handle a.out. * sparc-obsd-tdep.c (sparc32obsd_init_abi) (_initialize_sparc32obsd_tdep): Adjust. * sparc-tdep.h (sparc32nbsd_elf_init_abi): Rename to ... (sparc32nbsd_init_abi): ... this. * sparc64-fbsd-tdep.c (_initialize_sparc64fbsd_tdep): Adjust. * sparc64-nbsd-tdep.c (_initialize_sparc64nbsd_tdep): Adjust. * sparc64-obsd-tdep.c (_initialize_sparc64obsd_tdep): Adjust. * stabsread.c: Update comment. * symmisc.c (print_objfile_statistics): Don't mention "a.out" in output. * vax-nbsd-tdep.c (_initialize_vaxnbsd_tdep): Adjust. * vax-obsd-tdep.c: Delete file.
This commit is contained in:
parent
f94f411b83
commit
1736a7bd96
111
gdb/ChangeLog
111
gdb/ChangeLog
|
@ -1,3 +1,114 @@
|
|||
2016-12-09 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* Makefile.in (ALL_TARGET_OBS): Remove vax-obsd-tdep.o.
|
||||
* alpha-fbsd-tdep.c (_initialize_alphafbsd_tdep): Adjust.
|
||||
* alpha-nbsd-tdep.c: Move comment to _initialize_alphanbsd_tdep.
|
||||
(alphanbsd_core_osabi_sniffer): Delete.
|
||||
(_initialize_alphanbsd_tdep): No longer handle a.out.
|
||||
* alpha-obsd-tdep.c (_initialize_alphaobsd_tdep): Adjust.
|
||||
* amd64-fbsd-tdep.c (_initialize_amd64fbsd_tdep): Adjust.
|
||||
* amd64-nbsd-tdep.c (_initialize_amd64nbsd_tdep): Adjust.
|
||||
* amd64-obsd-tdep.c (amd64obsd_supply_regset)
|
||||
(amd64obsd_combined_regset)
|
||||
(amd64obsd_iterate_over_regset_sections, amd64obsd_core_init_abi):
|
||||
Delete.
|
||||
(_initialize_amd64obsd_tdep): Don't handle a.out.
|
||||
* arm-nbsd-nat.c (struct md_core, fetch_core_registers)
|
||||
(arm_netbsd_core_fns): Delete.
|
||||
(_initialize_arm_netbsd_nat): Don't register arm_netbsd_core_fns.
|
||||
* arm-nbsd-tdep.c (arm_netbsd_aout_init_abi)
|
||||
(arm_netbsd_aout_osabi_sniffer): Delete.
|
||||
(_initialize_arm_netbsd_tdep): Don't handle a.out.
|
||||
* arm-obsd-tdep.c (armobsd_core_osabi_sniffer): Delete.
|
||||
(_initialize_armobsd_tdep): Don't handle a.out.
|
||||
* arm-tdep.c (arm_gdbarch_init): Remove bfd_target_aout_flavour
|
||||
case.
|
||||
* breakpoint.c (disable_breakpoints_in_unloaded_shlib): Remove
|
||||
SunOS a.out handling.
|
||||
* configure.tgt (vax-*-netbsd* | vax-*-knetbsd*-gnu): Remove
|
||||
vax-obsd-tdep.o from gdb_target_objs.
|
||||
(vax-*-openbsd*): Likewise.
|
||||
(*-*-freebsd*): Adjust default gdb_osabi.
|
||||
(*-*-openbsd*): Likewise.
|
||||
* dbxread.c (block_address_function_relative): Delete.
|
||||
(dbx_symfile_read): Remove reference to
|
||||
block_address_function_relative.
|
||||
(dbx_symfile_read): Don't call read_dbx_dynamic_symtab.
|
||||
(read_dbx_dynamic_symtab): Delete.
|
||||
(process_one_symbol): Remove references to
|
||||
block_address_function_relative.
|
||||
* defs.h (GDB_OSABI_FREEBSD_AOUT, GDB_OSABI_NETBSD_AOUT): Remove.
|
||||
(GDB_OSABI_FREEBSD_ELF): Rename to ...
|
||||
(GDB_OSABI_FREEBSD): ... this.
|
||||
(GDB_OSABI_NETBSD_ELF): Rename to ...
|
||||
(GDB_OSABI_NETBSD): ... this.
|
||||
(GDB_OSABI_OPENBSD_ELF): Rename to ...
|
||||
(GDB_OSABI_OPENBSD): ... this.
|
||||
(GDB_OSABI_HPUX_ELF, GDB_OSABI_HPUX_SOM): Remove.
|
||||
* fbsd-tdep.c: Adjust comment.
|
||||
* hppa-nbsd-tdep.c (_initialize_hppanbsd_tdep): Adjust.
|
||||
* hppa-obsd-tdep.c (GDB_OSABI_NETBSD_CORE): Delete.
|
||||
(hppaobsd_core_osabi_sniffer): Delete.
|
||||
(_initialize_hppabsd_tdep): Don't handle a.out.
|
||||
* hppa-tdep.c (hppa_stub_frame_unwind_cache): Don't handle
|
||||
GDB_OSABI_HPUX_SOM.
|
||||
(hppa_gdbarch_init): Likewise.
|
||||
* i386-bsd-tdep.c (i386bsd_aout_osabi_sniffer)
|
||||
(i386bsd_core_osabi_sniffer, _initialize_i386bsd_tdep): Delete.
|
||||
* i386-fbsd-tdep.c (i386fbsdaout_init_abi): Delete. Merge bits
|
||||
with ...
|
||||
(i386fbsd_init_abi): ... this.
|
||||
(_initialize_i386fbsd_tdep): Don't handle a.out.
|
||||
* i386-nbsd-tdep.c (_initialize_i386nbsd_tdep): Adjust.
|
||||
* i386-obsd-tdep.c (i386obsd_aout_supply_regset)
|
||||
(i386obsd_aout_gregset)
|
||||
(i386obsd_aout_iterate_over_regset_sections): Delete.
|
||||
(i386obsd_init_abi): Merge with i386obsd_elf_init_abi.
|
||||
(i386obsd_aout_init_abi): Delete.
|
||||
(_initialize_i386obsd_tdep): Don't handle a.out.
|
||||
* m68k-bsd-tdep.c (m68kobsd_sigtramp_cache_init)
|
||||
(m68kobsd_sigtramp): Delete.
|
||||
(m68kbsd_init_abi): Merge with ...
|
||||
(m68kbsd_elf_init_abi): ... this, and delete it.
|
||||
(m68kbsd_aout_init_abi): Delete.
|
||||
(m68kbsd_aout_osabi_sniffer, m68kbsd_core_osabi_sniffer): Delete.
|
||||
(_initialize_m68kbsd_tdep): Don't handle a.out.
|
||||
* mips-nbsd-tdep.c (_initialize_mipsnbsd_tdep): Adjust.
|
||||
* mips64-obsd-tdep.c (_initialize_mips64obsd_tdep): Adjust.
|
||||
* osabi.c (gdb_osabi_names): Remove "a.out" entries. Drop "ELF"
|
||||
suffixes. Remove "HP-UX" entries.
|
||||
(generic_elf_osabi_sniff_abi_tag_sections): Adjust.
|
||||
(generic_elf_osabi_sniffer): No longer handle GDB_OSABI_HPUX_ELF.
|
||||
Adjust.
|
||||
(_initialize_ppcfbsd_tdep): Adjust.
|
||||
* ppc-nbsd-tdep.c (_initialize_ppcnbsd_tdep): Adjust.
|
||||
* ppc-obsd-tdep.c (GDB_OSABI_NETBSD_CORE)
|
||||
(ppcobsd_core_osabi_sniffer): Delete.
|
||||
(_initialize_ppcobsd_tdep): Don't handle a.out.
|
||||
* rs6000-tdep.c (rs6000_gdbarch_init): Adjust.
|
||||
* sh-nbsd-tdep.c (GDB_OSABI_NETBSD_CORE)
|
||||
(shnbsd_core_osabi_sniffer): Delete.
|
||||
(_initialize_shnbsd_tdep): Don't handle a.out.
|
||||
* solib.c (clear_solib): Don't handle SunOS/a.out.
|
||||
* sparc-nbsd-tdep.c (sparc32nbsd_init_abi): Make extern.
|
||||
(sparc32nbsd_aout_init_abi): Delete.
|
||||
(sparc32nbsd_elf_init_abi): Merged into sparc32nbsd_init_abi.
|
||||
(sparcnbsd_aout_osabi_sniffer): Delete.
|
||||
(GDB_OSABI_NETBSD_CORE, sparcnbsd_core_osabi_sniffer): Delete.
|
||||
(_initialize_sparcnbsd_tdep): No longer handle a.out.
|
||||
* sparc-obsd-tdep.c (sparc32obsd_init_abi)
|
||||
(_initialize_sparc32obsd_tdep): Adjust.
|
||||
* sparc-tdep.h (sparc32nbsd_elf_init_abi): Rename to ...
|
||||
(sparc32nbsd_init_abi): ... this.
|
||||
* sparc64-fbsd-tdep.c (_initialize_sparc64fbsd_tdep): Adjust.
|
||||
* sparc64-nbsd-tdep.c (_initialize_sparc64nbsd_tdep): Adjust.
|
||||
* sparc64-obsd-tdep.c (_initialize_sparc64obsd_tdep): Adjust.
|
||||
* stabsread.c: Update comment.
|
||||
* symmisc.c (print_objfile_statistics): Don't mention "a.out" in
|
||||
output.
|
||||
* vax-nbsd-tdep.c (_initialize_vaxnbsd_tdep): Adjust.
|
||||
* vax-obsd-tdep.c: Delete file.
|
||||
|
||||
2016-12-09 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
PR tdep/20954
|
||||
|
|
|
@ -873,7 +873,6 @@ ALL_TARGET_OBS = \
|
|||
tilegx-tdep.o \
|
||||
v850-tdep.o \
|
||||
vax-nbsd-tdep.o \
|
||||
vax-obsd-tdep.o \
|
||||
vax-tdep.o \
|
||||
windows-tdep.o \
|
||||
xcoffread.o \
|
||||
|
|
|
@ -127,6 +127,6 @@ void _initialize_alphafbsd_tdep (void);
|
|||
void
|
||||
_initialize_alphafbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_FREEBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_FREEBSD,
|
||||
alphafbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -35,9 +35,6 @@
|
|||
|
||||
/* Core file support. */
|
||||
|
||||
/* Even though NetBSD/alpha used ELF since day one, it used the
|
||||
traditional a.out-style core dump format before NetBSD 1.6. */
|
||||
|
||||
/* Sizeof `struct reg' in <machine/reg.h>. */
|
||||
#define ALPHANBSD_SIZEOF_GREGS (32 * 8)
|
||||
|
||||
|
@ -279,26 +276,15 @@ alphanbsd_init_abi (struct gdbarch_info info,
|
|||
}
|
||||
|
||||
|
||||
static enum gdb_osabi
|
||||
alphanbsd_core_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
|
||||
return GDB_OSABI_NETBSD_ELF;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
void _initialize_alphanbsd_tdep (void);
|
||||
|
||||
void
|
||||
_initialize_alphanbsd_tdep (void)
|
||||
{
|
||||
/* BFD doesn't set a flavour for NetBSD style a.out core files. */
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_alpha, bfd_target_unknown_flavour,
|
||||
alphanbsd_core_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_NETBSD_ELF,
|
||||
/* Even though NetBSD/alpha used ELF since day one, it used the
|
||||
traditional a.out-style core dump format before NetBSD 1.6, but
|
||||
we don't support those. */
|
||||
gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_NETBSD,
|
||||
alphanbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -132,6 +132,6 @@ void _initialize_alphaobsd_tdep (void);
|
|||
void
|
||||
_initialize_alphaobsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_OPENBSD,
|
||||
alphaobsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -315,5 +315,5 @@ void
|
|||
_initialize_amd64fbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
|
||||
GDB_OSABI_FREEBSD_ELF, amd64fbsd_init_abi);
|
||||
GDB_OSABI_FREEBSD, amd64fbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -129,5 +129,5 @@ _initialize_amd64nbsd_tdep (void)
|
|||
gdb_assert (ARRAY_SIZE (amd64nbsd_r_reg_offset) == AMD64_NUM_GREGS);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
|
||||
GDB_OSABI_NETBSD_ELF, amd64nbsd_init_abi);
|
||||
GDB_OSABI_NETBSD, amd64nbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -35,44 +35,6 @@
|
|||
#include "solib-svr4.h"
|
||||
#include "bsd-uthread.h"
|
||||
|
||||
/* Support for core dumps. */
|
||||
|
||||
static void
|
||||
amd64obsd_supply_regset (const struct regset *regset,
|
||||
struct regcache *regcache, int regnum,
|
||||
const void *regs, size_t len)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
||||
const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
||||
gdb_assert (len >= tdep->sizeof_gregset + I387_SIZEOF_FXSAVE);
|
||||
|
||||
i386_supply_gregset (regset, regcache, regnum, regs, tdep->sizeof_gregset);
|
||||
amd64_supply_fxsave (regcache, regnum,
|
||||
((const gdb_byte *)regs) + tdep->sizeof_gregset);
|
||||
}
|
||||
|
||||
static const struct regset amd64obsd_combined_regset =
|
||||
{
|
||||
NULL, amd64obsd_supply_regset, NULL
|
||||
};
|
||||
|
||||
static void
|
||||
amd64obsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
|
||||
iterate_over_regset_sections_cb *cb,
|
||||
void *cb_data,
|
||||
const struct regcache *regcache)
|
||||
{
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
||||
/* OpenBSD core dumps don't use seperate register sets for the
|
||||
general-purpose and floating-point registers. */
|
||||
|
||||
cb (".reg", tdep->sizeof_gregset + I387_SIZEOF_FXSAVE,
|
||||
&amd64obsd_combined_regset, NULL, cb_data);
|
||||
}
|
||||
|
||||
|
||||
/* Support for signal handlers. */
|
||||
|
||||
/* Default page size. */
|
||||
|
@ -483,17 +445,6 @@ amd64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
/* Unwind kernel trap frames correctly. */
|
||||
frame_unwind_prepend_unwinder (gdbarch, &amd64obsd_trapframe_unwind);
|
||||
}
|
||||
|
||||
/* Traditional (a.out) NetBSD-style core dumps. */
|
||||
|
||||
static void
|
||||
amd64obsd_core_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
amd64obsd_init_abi (info, gdbarch);
|
||||
|
||||
set_gdbarch_iterate_over_regset_sections
|
||||
(gdbarch, amd64obsd_iterate_over_regset_sections);
|
||||
}
|
||||
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
|
@ -506,9 +457,5 @@ _initialize_amd64obsd_tdep (void)
|
|||
gdb_assert (ARRAY_SIZE (amd64obsd_r_reg_offset) == AMD64_NUM_GREGS);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
|
||||
GDB_OSABI_OPENBSD_ELF, amd64obsd_init_abi);
|
||||
|
||||
/* OpenBSD uses traditional (a.out) NetBSD-style core dumps. */
|
||||
gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
|
||||
GDB_OSABI_NETBSD_AOUT, amd64obsd_core_init_abi);
|
||||
GDB_OSABI_OPENBSD, amd64obsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -409,25 +409,6 @@ armnbsd_store_registers (struct target_ops *ops,
|
|||
}
|
||||
}
|
||||
|
||||
struct md_core
|
||||
{
|
||||
struct reg intreg;
|
||||
struct fpreg freg;
|
||||
};
|
||||
|
||||
static void
|
||||
fetch_core_registers (struct regcache *regcache,
|
||||
char *core_reg_sect, unsigned core_reg_size,
|
||||
int which, CORE_ADDR ignore)
|
||||
{
|
||||
struct md_core *core_reg = (struct md_core *) core_reg_sect;
|
||||
int regno;
|
||||
CORE_ADDR r_pc;
|
||||
|
||||
arm_supply_gregset (regcache, &core_reg->intreg);
|
||||
arm_supply_fparegset (regcache, &core_reg->freg);
|
||||
}
|
||||
|
||||
static void
|
||||
fetch_elfcore_registers (struct regcache *regcache,
|
||||
char *core_reg_sect, unsigned core_reg_size,
|
||||
|
@ -468,15 +449,6 @@ fetch_elfcore_registers (struct regcache *regcache,
|
|||
}
|
||||
}
|
||||
|
||||
static struct core_fns arm_netbsd_core_fns =
|
||||
{
|
||||
bfd_target_unknown_flavour, /* core_flovour. */
|
||||
default_check_format, /* check_format. */
|
||||
default_core_sniffer, /* core_sniffer. */
|
||||
fetch_core_registers, /* core_read_registers. */
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct core_fns arm_netbsd_elfcore_fns =
|
||||
{
|
||||
bfd_target_elf_flavour, /* core_flovour. */
|
||||
|
@ -496,6 +468,5 @@ _initialize_arm_netbsd_nat (void)
|
|||
t->to_store_registers = armnbsd_store_registers;
|
||||
add_target (t);
|
||||
|
||||
deprecated_add_core_fns (&arm_netbsd_core_fns);
|
||||
deprecated_add_core_fns (&arm_netbsd_elfcore_fns);
|
||||
}
|
||||
|
|
|
@ -70,17 +70,6 @@ arm_netbsd_init_abi_common (struct gdbarch_info info,
|
|||
set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
|
||||
}
|
||||
|
||||
static void
|
||||
arm_netbsd_aout_init_abi (struct gdbarch_info info,
|
||||
struct gdbarch *gdbarch)
|
||||
{
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
||||
arm_netbsd_init_abi_common (info, gdbarch);
|
||||
if (tdep->fp_model == ARM_FLOAT_AUTO)
|
||||
tdep->fp_model = ARM_FLOAT_SOFT_FPA;
|
||||
}
|
||||
|
||||
static void
|
||||
arm_netbsd_elf_init_abi (struct gdbarch_info info,
|
||||
struct gdbarch *gdbarch)
|
||||
|
@ -96,26 +85,12 @@ arm_netbsd_elf_init_abi (struct gdbarch_info info,
|
|||
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
|
||||
}
|
||||
|
||||
static enum gdb_osabi
|
||||
arm_netbsd_aout_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "a.out-arm-netbsd") == 0)
|
||||
return GDB_OSABI_NETBSD_AOUT;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
extern initialize_file_ftype _initialize_arm_netbsd_tdep;
|
||||
|
||||
void
|
||||
_initialize_arm_netbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_aout_flavour,
|
||||
arm_netbsd_aout_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD_AOUT,
|
||||
arm_netbsd_aout_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD,
|
||||
arm_netbsd_elf_init_abi);
|
||||
}
|
||||
|
|
|
@ -116,25 +116,12 @@ armobsd_init_abi (struct gdbarch_info info,
|
|||
}
|
||||
|
||||
|
||||
static enum gdb_osabi
|
||||
armobsd_core_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
|
||||
return GDB_OSABI_OPENBSD_ELF;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
extern initialize_file_ftype _initialize_armobsd_tdep;
|
||||
|
||||
void
|
||||
_initialize_armobsd_tdep (void)
|
||||
{
|
||||
/* BFD doesn't set a flavour for NetBSD style a.out core files. */
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_unknown_flavour,
|
||||
armobsd_core_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_OPENBSD,
|
||||
armobsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -8990,11 +8990,6 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
|
||||
switch (bfd_get_flavour (info.abfd))
|
||||
{
|
||||
case bfd_target_aout_flavour:
|
||||
/* Assume it's an old APCS-style ABI. */
|
||||
arm_abi = ARM_ABI_APCS;
|
||||
break;
|
||||
|
||||
case bfd_target_coff_flavour:
|
||||
/* Assume it's an old APCS-style ABI. */
|
||||
/* XXX WinCE? */
|
||||
|
|
|
@ -7957,14 +7957,6 @@ disable_breakpoints_in_unloaded_shlib (struct so_list *solib)
|
|||
struct bp_location *loc, **locp_tmp;
|
||||
int disabled_shlib_breaks = 0;
|
||||
|
||||
/* SunOS a.out shared libraries are always mapped, so do not
|
||||
disable breakpoints; they will only be reported as unloaded
|
||||
through clear_solib when GDB discards its shared library
|
||||
list. See clear_solib for more information. */
|
||||
if (exec_bfd != NULL
|
||||
&& bfd_get_flavour (exec_bfd) == bfd_target_aout_flavour)
|
||||
return;
|
||||
|
||||
ALL_BP_LOCATIONS (loc, locp_tmp)
|
||||
{
|
||||
/* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
|
||||
|
|
|
@ -643,11 +643,11 @@ v850*-*-elf | v850*-*-rtems*)
|
|||
|
||||
vax-*-netbsd* | vax-*-knetbsd*-gnu)
|
||||
# Target: NetBSD/vax
|
||||
gdb_target_obs="vax-tdep.o vax-nbsd-tdep.o solib-svr4.o"
|
||||
gdb_target_obs="vax-tdep.o solib-svr4.o"
|
||||
;;
|
||||
vax-*-openbsd*)
|
||||
# Target: OpenBSD/vax
|
||||
gdb_target_obs="vax-tdep.o vax-obsd-tdep.o"
|
||||
gdb_target_obs="vax-tdep.o"
|
||||
;;
|
||||
vax-*-*)
|
||||
# Target: VAX
|
||||
|
@ -720,12 +720,12 @@ esac
|
|||
|
||||
case "${targ}" in
|
||||
*-*-freebsd* | *-*-kfreebsd*-gnu)
|
||||
gdb_osabi=GDB_OSABI_FREEBSD_ELF ;;
|
||||
gdb_osabi=GDB_OSABI_FREEBSD ;;
|
||||
*-*-linux* | *-*-uclinux*)
|
||||
gdb_osabi=GDB_OSABI_LINUX ;;
|
||||
*-*-nto*) gdb_osabi=GDB_OSABI_QNXNTO ;;
|
||||
m68*-*-openbsd* | m88*-*-openbsd* | vax-*-openbsd*) ;;
|
||||
*-*-openbsd*) gdb_osabi=GDB_OSABI_OPENBSD_ELF ;;
|
||||
*-*-openbsd*) gdb_osabi=GDB_OSABI_OPENBSD ;;
|
||||
*-*-solaris*) gdb_osabi=GDB_OSABI_SOLARIS ;;
|
||||
*-*-*-gnu*) ;; # prevent non-GNU kernels to match the Hurd rule below
|
||||
*-*-gnu*) gdb_osabi=GDB_OSABI_HURD ;;
|
||||
|
|
201
gdb/dbxread.c
201
gdb/dbxread.c
|
@ -144,10 +144,6 @@ static unsigned int next_file_string_table_offset;
|
|||
|
||||
static int symfile_relocatable = 0;
|
||||
|
||||
/* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are
|
||||
relative to the function start address. */
|
||||
|
||||
static int block_address_function_relative = 0;
|
||||
|
||||
/* The lowest text address we have yet encountered. This is needed
|
||||
because in an a.out file, there is no header field which tells us
|
||||
|
@ -262,9 +258,6 @@ static void dbx_read_symtab (struct partial_symtab *self,
|
|||
|
||||
static void dbx_psymtab_to_symtab_1 (struct objfile *, struct partial_symtab *);
|
||||
|
||||
static void read_dbx_dynamic_symtab (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile);
|
||||
|
||||
static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *);
|
||||
|
||||
static void free_bincl_list (struct objfile *);
|
||||
|
@ -534,18 +527,6 @@ dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
|
|||
|
||||
symfile_relocatable = bfd_get_file_flags (sym_bfd) & HAS_RELOC;
|
||||
|
||||
/* This is true for Solaris (and all other systems which put stabs
|
||||
in sections, hopefully, since it would be silly to do things
|
||||
differently from Solaris), and false for SunOS4 and other a.out
|
||||
file formats. */
|
||||
block_address_function_relative =
|
||||
((startswith (bfd_get_target (sym_bfd), "elf"))
|
||||
|| (startswith (bfd_get_target (sym_bfd), "som"))
|
||||
|| (startswith (bfd_get_target (sym_bfd), "coff"))
|
||||
|| (startswith (bfd_get_target (sym_bfd), "pe"))
|
||||
|| (startswith (bfd_get_target (sym_bfd), "epoc-pe"))
|
||||
|| (startswith (bfd_get_target (sym_bfd), "nlm")));
|
||||
|
||||
val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
|
||||
if (val < 0)
|
||||
perror_with_name (objfile_name (objfile));
|
||||
|
@ -566,10 +547,6 @@ dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
|
|||
|
||||
read_dbx_symtab (reader, objfile);
|
||||
|
||||
/* Add the dynamic symbols. */
|
||||
|
||||
read_dbx_dynamic_symtab (reader, objfile);
|
||||
|
||||
/* Install any minimal symbols that have been collected as the current
|
||||
minimal symbols for this objfile. */
|
||||
|
||||
|
@ -976,144 +953,6 @@ set_namestring (struct objfile *objfile, const struct internal_nlist *nlist)
|
|||
return namestring;
|
||||
}
|
||||
|
||||
/* Scan a SunOs dynamic symbol table for symbols of interest and
|
||||
add them to the minimal symbol table. */
|
||||
|
||||
static void
|
||||
read_dbx_dynamic_symtab (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
bfd *abfd = objfile->obfd;
|
||||
struct cleanup *back_to;
|
||||
int counter;
|
||||
long dynsym_size;
|
||||
long dynsym_count;
|
||||
asymbol **dynsyms;
|
||||
asymbol **symptr;
|
||||
arelent **relptr;
|
||||
long dynrel_size;
|
||||
long dynrel_count;
|
||||
arelent **dynrels;
|
||||
CORE_ADDR sym_value;
|
||||
const char *name;
|
||||
|
||||
/* Check that the symbol file has dynamic symbols that we know about.
|
||||
bfd_arch_unknown can happen if we are reading a sun3 symbol file
|
||||
on a sun4 host (and vice versa) and bfd is not configured
|
||||
--with-target=all. This would trigger an assertion in bfd/sunos.c,
|
||||
so we ignore the dynamic symbols in this case. */
|
||||
if (bfd_get_flavour (abfd) != bfd_target_aout_flavour
|
||||
|| (bfd_get_file_flags (abfd) & DYNAMIC) == 0
|
||||
|| bfd_get_arch (abfd) == bfd_arch_unknown)
|
||||
return;
|
||||
|
||||
dynsym_size = bfd_get_dynamic_symtab_upper_bound (abfd);
|
||||
if (dynsym_size < 0)
|
||||
return;
|
||||
|
||||
dynsyms = (asymbol **) xmalloc (dynsym_size);
|
||||
back_to = make_cleanup (xfree, dynsyms);
|
||||
|
||||
dynsym_count = bfd_canonicalize_dynamic_symtab (abfd, dynsyms);
|
||||
if (dynsym_count < 0)
|
||||
{
|
||||
do_cleanups (back_to);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Enter dynamic symbols into the minimal symbol table
|
||||
if this is a stripped executable. */
|
||||
if (bfd_get_symcount (abfd) <= 0)
|
||||
{
|
||||
symptr = dynsyms;
|
||||
for (counter = 0; counter < dynsym_count; counter++, symptr++)
|
||||
{
|
||||
asymbol *sym = *symptr;
|
||||
asection *sec;
|
||||
int type;
|
||||
|
||||
sec = bfd_get_section (sym);
|
||||
|
||||
/* BFD symbols are section relative. */
|
||||
sym_value = sym->value + sec->vma;
|
||||
|
||||
if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
|
||||
{
|
||||
type = N_TEXT;
|
||||
}
|
||||
else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
|
||||
{
|
||||
type = N_DATA;
|
||||
}
|
||||
else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
|
||||
{
|
||||
type = N_BSS;
|
||||
}
|
||||
else
|
||||
continue;
|
||||
|
||||
if (sym->flags & BSF_GLOBAL)
|
||||
type |= N_EXT;
|
||||
|
||||
record_minimal_symbol (reader, bfd_asymbol_name (sym), sym_value,
|
||||
type, objfile);
|
||||
}
|
||||
}
|
||||
|
||||
/* Symbols from shared libraries have a dynamic relocation entry
|
||||
that points to the associated slot in the procedure linkage table.
|
||||
We make a mininal symbol table entry with type mst_solib_trampoline
|
||||
at the address in the procedure linkage table. */
|
||||
dynrel_size = bfd_get_dynamic_reloc_upper_bound (abfd);
|
||||
if (dynrel_size < 0)
|
||||
{
|
||||
do_cleanups (back_to);
|
||||
return;
|
||||
}
|
||||
|
||||
dynrels = (arelent **) xmalloc (dynrel_size);
|
||||
make_cleanup (xfree, dynrels);
|
||||
|
||||
dynrel_count = bfd_canonicalize_dynamic_reloc (abfd, dynrels, dynsyms);
|
||||
if (dynrel_count < 0)
|
||||
{
|
||||
do_cleanups (back_to);
|
||||
return;
|
||||
}
|
||||
|
||||
for (counter = 0, relptr = dynrels;
|
||||
counter < dynrel_count;
|
||||
counter++, relptr++)
|
||||
{
|
||||
arelent *rel = *relptr;
|
||||
CORE_ADDR address = rel->address;
|
||||
|
||||
switch (bfd_get_arch (abfd))
|
||||
{
|
||||
case bfd_arch_sparc:
|
||||
if (rel->howto->type != RELOC_JMP_SLOT)
|
||||
continue;
|
||||
break;
|
||||
case bfd_arch_m68k:
|
||||
/* `16' is the type BFD produces for a jump table relocation. */
|
||||
if (rel->howto->type != 16)
|
||||
continue;
|
||||
|
||||
/* Adjust address in the jump table to point to
|
||||
the start of the bsr instruction. */
|
||||
address -= 2;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
name = bfd_asymbol_name (*rel->sym_ptr_ptr);
|
||||
reader.record (name, address, mst_solib_trampoline);
|
||||
}
|
||||
|
||||
do_cleanups (back_to);
|
||||
}
|
||||
|
||||
static CORE_ADDR
|
||||
find_stab_function_addr (char *namestring, const char *filename,
|
||||
struct objfile *objfile)
|
||||
|
@ -2688,14 +2527,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
|
|||
source file. Used to detect the SunPRO solaris compiler. */
|
||||
static int n_opt_found;
|
||||
|
||||
if (!block_address_function_relative)
|
||||
{
|
||||
/* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
|
||||
function start address, so just use the text offset. */
|
||||
function_start_offset =
|
||||
ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
|
||||
}
|
||||
|
||||
/* Something is wrong if we see real data before seeing a source
|
||||
file name. */
|
||||
|
||||
|
@ -2751,8 +2582,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
|
|||
|
||||
/* May be switching to an assembler file which may not be using
|
||||
block relative stabs, so reset the offset. */
|
||||
if (block_address_function_relative)
|
||||
function_start_offset = 0;
|
||||
function_start_offset = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -2774,13 +2604,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
|
|||
if (n_opt_found && desc == 1)
|
||||
break;
|
||||
|
||||
if (block_address_function_relative)
|
||||
/* Relocate for Sun ELF acc fn-relative syms. */
|
||||
valu += function_start_offset;
|
||||
else
|
||||
/* On most machines, the block addresses are relative to the
|
||||
N_SO, the linker did not relocate them (sigh). */
|
||||
valu += last_source_start_addr;
|
||||
valu += function_start_offset;
|
||||
|
||||
push_context (desc, valu);
|
||||
break;
|
||||
|
@ -2793,13 +2617,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
|
|||
if (n_opt_found && desc == 1)
|
||||
break;
|
||||
|
||||
if (block_address_function_relative)
|
||||
/* Relocate for Sun ELF acc fn-relative syms. */
|
||||
valu += function_start_offset;
|
||||
else
|
||||
/* On most machines, the block addresses are relative to the
|
||||
N_SO, the linker did not relocate them (sigh). */
|
||||
valu += last_source_start_addr;
|
||||
valu += function_start_offset;
|
||||
|
||||
if (context_stack_depth <= 0)
|
||||
{
|
||||
|
@ -2894,8 +2712,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
|
|||
if (*name == '\000')
|
||||
break;
|
||||
|
||||
if (block_address_function_relative)
|
||||
function_start_offset = 0;
|
||||
function_start_offset = 0;
|
||||
|
||||
start_stabs ();
|
||||
start_symtab (objfile, name, NULL, valu);
|
||||
|
@ -3113,14 +2930,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
|
|||
valu = minsym_valu;
|
||||
}
|
||||
|
||||
if (block_address_function_relative)
|
||||
/* For Solaris 2 compilers, the block addresses and
|
||||
N_SLINE's are relative to the start of the
|
||||
function. On normal systems, and when using GCC on
|
||||
Solaris 2, these addresses are just absolute, or
|
||||
relative to the N_SO, depending on
|
||||
BLOCK_ADDRESS_ABSOLUTE. */
|
||||
function_start_offset = valu;
|
||||
/* These addresses are absolute. */
|
||||
function_start_offset = valu;
|
||||
|
||||
within_function = 1;
|
||||
|
||||
|
|
10
gdb/defs.h
10
gdb/defs.h
|
@ -574,15 +574,11 @@ enum gdb_osabi
|
|||
GDB_OSABI_HURD,
|
||||
GDB_OSABI_SOLARIS,
|
||||
GDB_OSABI_LINUX,
|
||||
GDB_OSABI_FREEBSD_AOUT,
|
||||
GDB_OSABI_FREEBSD_ELF,
|
||||
GDB_OSABI_NETBSD_AOUT,
|
||||
GDB_OSABI_NETBSD_ELF,
|
||||
GDB_OSABI_OPENBSD_ELF,
|
||||
GDB_OSABI_FREEBSD,
|
||||
GDB_OSABI_NETBSD,
|
||||
GDB_OSABI_OPENBSD,
|
||||
GDB_OSABI_WINCE,
|
||||
GDB_OSABI_GO32,
|
||||
GDB_OSABI_HPUX_ELF,
|
||||
GDB_OSABI_HPUX_SOM,
|
||||
GDB_OSABI_QNXNTO,
|
||||
GDB_OSABI_CYGWIN,
|
||||
GDB_OSABI_AIX,
|
||||
|
|
|
@ -334,7 +334,7 @@ fbsd_get_syscall_number (struct gdbarch *gdbarch,
|
|||
internal_error (__FILE__, __LINE__, _("fbsd_get_sycall_number called"));
|
||||
}
|
||||
|
||||
/* To be called from GDB_OSABI_FREEBSD_ELF handlers. */
|
||||
/* To be called from GDB_OSABI_FREEBSD handlers. */
|
||||
|
||||
void
|
||||
fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
|
|
|
@ -213,6 +213,6 @@ extern initialize_file_ftype _initialize_hppanbsd_tdep;
|
|||
void
|
||||
_initialize_hppanbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_NETBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_NETBSD,
|
||||
hppanbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -166,30 +166,12 @@ hppaobsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
}
|
||||
|
||||
|
||||
/* OpenBSD uses uses the traditional NetBSD core file format, even for
|
||||
ports that use ELF. */
|
||||
#define GDB_OSABI_NETBSD_CORE GDB_OSABI_OPENBSD_ELF
|
||||
|
||||
static enum gdb_osabi
|
||||
hppaobsd_core_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
|
||||
return GDB_OSABI_NETBSD_CORE;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
void _initialize_hppabsd_tdep (void);
|
||||
|
||||
void
|
||||
_initialize_hppabsd_tdep (void)
|
||||
{
|
||||
/* BFD doesn't set a flavour for NetBSD style a.out core files. */
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_hppa, bfd_target_unknown_flavour,
|
||||
hppaobsd_core_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_OPENBSD,
|
||||
hppaobsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -2454,21 +2454,6 @@ hppa_stub_frame_unwind_cache (struct frame_info *this_frame,
|
|||
|
||||
info->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
|
||||
|
||||
if (gdbarch_osabi (gdbarch) == GDB_OSABI_HPUX_SOM)
|
||||
{
|
||||
/* HPUX uses export stubs in function calls; the export stub clobbers
|
||||
the return value of the caller, and, later restores it from the
|
||||
stack. */
|
||||
u = find_unwind_entry (get_frame_pc (this_frame));
|
||||
|
||||
if (u && u->stub_unwind.stub_type == EXPORT)
|
||||
{
|
||||
info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].addr = info->base - 24;
|
||||
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
/* By default we assume that stubs do not change the rp. */
|
||||
info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].realreg = HPPA_RP_REGNUM;
|
||||
|
||||
|
@ -3062,14 +3047,6 @@ hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
{
|
||||
struct gdbarch_tdep *tdep;
|
||||
struct gdbarch *gdbarch;
|
||||
|
||||
/* Try to determine the ABI of the object we are loading. */
|
||||
if (info.abfd != NULL && info.osabi == GDB_OSABI_UNKNOWN)
|
||||
{
|
||||
/* If it's a SOM file, assume it's HP/UX SOM. */
|
||||
if (bfd_get_flavour (info.abfd) == bfd_target_som_flavour)
|
||||
info.osabi = GDB_OSABI_HPUX_SOM;
|
||||
}
|
||||
|
||||
/* find a candidate among the list of pre-declared architectures. */
|
||||
arches = gdbarch_list_lookup_by_info (arches, &info);
|
||||
|
|
|
@ -86,38 +86,3 @@ i386bsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
}
|
||||
|
||||
|
||||
static enum gdb_osabi
|
||||
i386bsd_aout_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "a.out-i386-netbsd") == 0)
|
||||
return GDB_OSABI_NETBSD_AOUT;
|
||||
|
||||
if (strcmp (bfd_get_target (abfd), "a.out-i386-freebsd") == 0)
|
||||
return GDB_OSABI_FREEBSD_AOUT;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
static enum gdb_osabi
|
||||
i386bsd_core_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
|
||||
return GDB_OSABI_NETBSD_AOUT;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
void _initialize_i386bsd_tdep (void);
|
||||
|
||||
void
|
||||
_initialize_i386bsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_aout_flavour,
|
||||
i386bsd_aout_osabi_sniffer);
|
||||
|
||||
/* BFD doesn't set a flavour for NetBSD style a.out core files. */
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_unknown_flavour,
|
||||
i386bsd_core_osabi_sniffer);
|
||||
}
|
||||
|
|
|
@ -373,7 +373,7 @@ i386fbsd_collect_uthread (const struct regcache *regcache,
|
|||
}
|
||||
|
||||
static void
|
||||
i386fbsdaout_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
i386fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
||||
|
@ -403,18 +403,10 @@ i386fbsdaout_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
/* FreeBSD provides a user-level threads implementation. */
|
||||
bsd_uthread_set_supply_uthread (gdbarch, i386fbsd_supply_uthread);
|
||||
bsd_uthread_set_collect_uthread (gdbarch, i386fbsd_collect_uthread);
|
||||
}
|
||||
|
||||
static void
|
||||
i386fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
/* It's almost identical to FreeBSD a.out. */
|
||||
i386fbsdaout_init_abi (info, gdbarch);
|
||||
|
||||
/* Except that it uses ELF. */
|
||||
i386_elf_init_abi (info, gdbarch);
|
||||
|
||||
/* FreeBSD ELF uses SVR4-style shared libraries. */
|
||||
/* FreeBSD uses SVR4-style shared libraries. */
|
||||
set_solib_svr4_fetch_link_map_offsets
|
||||
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
|
||||
}
|
||||
|
@ -491,8 +483,6 @@ void _initialize_i386fbsd_tdep (void);
|
|||
void
|
||||
_initialize_i386fbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_FREEBSD_AOUT,
|
||||
i386fbsdaout_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_FREEBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_FREEBSD,
|
||||
i386fbsd4_init_abi);
|
||||
}
|
||||
|
|
|
@ -322,6 +322,6 @@ extern initialize_file_ftype _initialize_i386nbsd_tdep;
|
|||
void
|
||||
_initialize_i386nbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETBSD,
|
||||
i386nbsdelf_init_abi);
|
||||
}
|
||||
|
|
|
@ -134,40 +134,6 @@ static int i386obsd_r_reg_offset[] =
|
|||
15 * 4 /* %gs */
|
||||
};
|
||||
|
||||
static void
|
||||
i386obsd_aout_supply_regset (const struct regset *regset,
|
||||
struct regcache *regcache, int regnum,
|
||||
const void *regs, size_t len)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
||||
const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
const gdb_byte *gregs = (const gdb_byte *) regs;
|
||||
|
||||
gdb_assert (len >= tdep->sizeof_gregset + I387_SIZEOF_FSAVE);
|
||||
|
||||
i386_supply_gregset (regset, regcache, regnum, regs, tdep->sizeof_gregset);
|
||||
i387_supply_fsave (regcache, regnum, gregs + tdep->sizeof_gregset);
|
||||
}
|
||||
|
||||
static const struct regset i386obsd_aout_gregset =
|
||||
{
|
||||
NULL, i386obsd_aout_supply_regset, NULL
|
||||
};
|
||||
|
||||
static void
|
||||
i386obsd_aout_iterate_over_regset_sections (struct gdbarch *gdbarch,
|
||||
iterate_over_regset_sections_cb *cb,
|
||||
void *cb_data,
|
||||
const struct regcache *regcache)
|
||||
{
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
||||
/* OpenBSD a.out core dumps don't use seperate register sets for the
|
||||
general-purpose and floating-point registers. */
|
||||
|
||||
cb (".reg", tdep->sizeof_gregset + I387_SIZEOF_FSAVE,
|
||||
&i386obsd_aout_gregset, NULL, cb_data);
|
||||
}
|
||||
|
||||
|
||||
/* Sigtramp routine location for OpenBSD 3.1 and earlier releases. */
|
||||
|
@ -445,6 +411,7 @@ i386obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
/* Obviously OpenBSD is BSD-based. */
|
||||
i386bsd_init_abi (info, gdbarch);
|
||||
obsd_init_abi (info, gdbarch);
|
||||
i386_elf_init_abi (info, gdbarch);
|
||||
|
||||
/* OpenBSD has a different `struct reg'. */
|
||||
tdep->gregset_reg_offset = i386obsd_r_reg_offset;
|
||||
|
@ -470,30 +437,6 @@ i386obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
|
||||
/* Unwind kernel trap frames correctly. */
|
||||
frame_unwind_prepend_unwinder (gdbarch, &i386obsd_trapframe_unwind);
|
||||
}
|
||||
|
||||
/* OpenBSD a.out. */
|
||||
|
||||
static void
|
||||
i386obsd_aout_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
i386obsd_init_abi (info, gdbarch);
|
||||
|
||||
/* OpenBSD a.out has a single register set. */
|
||||
set_gdbarch_iterate_over_regset_sections
|
||||
(gdbarch, i386obsd_aout_iterate_over_regset_sections);
|
||||
}
|
||||
|
||||
/* OpenBSD ELF. */
|
||||
|
||||
static void
|
||||
i386obsd_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
/* It's still OpenBSD. */
|
||||
i386obsd_init_abi (info, gdbarch);
|
||||
|
||||
/* But ELF-based. */
|
||||
i386_elf_init_abi (info, gdbarch);
|
||||
|
||||
/* OpenBSD ELF uses SVR4-style shared libraries. */
|
||||
set_solib_svr4_fetch_link_map_offsets
|
||||
|
@ -507,14 +450,6 @@ void _initialize_i386obsd_tdep (void);
|
|||
void
|
||||
_initialize_i386obsd_tdep (void)
|
||||
{
|
||||
/* FIXME: kettenis/20021020: Since OpenBSD/i386 binaries are
|
||||
indistingushable from NetBSD/i386 a.out binaries, building a GDB
|
||||
that should support both these targets will probably not work as
|
||||
expected. */
|
||||
#define GDB_OSABI_OPENBSD_AOUT GDB_OSABI_NETBSD_AOUT
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_OPENBSD_AOUT,
|
||||
i386obsd_aout_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
i386obsd_elf_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_OPENBSD,
|
||||
i386obsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -129,60 +129,6 @@ m68kbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
|
|||
}
|
||||
|
||||
|
||||
/* Signal trampolines. */
|
||||
|
||||
static void
|
||||
m68kobsd_sigtramp_cache_init (const struct tramp_frame *self,
|
||||
struct frame_info *this_frame,
|
||||
struct trad_frame_cache *this_cache,
|
||||
CORE_ADDR func)
|
||||
{
|
||||
CORE_ADDR addr, base, pc;
|
||||
int regnum;
|
||||
|
||||
base = get_frame_register_unsigned (this_frame, M68K_SP_REGNUM);
|
||||
|
||||
/* The 'addql #4,%sp' instruction at offset 8 adjusts the stack
|
||||
pointer. Adjust the frame base accordingly. */
|
||||
pc = get_frame_register_unsigned (this_frame, M68K_PC_REGNUM);
|
||||
if ((pc - func) > 8)
|
||||
base -= 4;
|
||||
|
||||
/* Get frame pointer, stack pointer, program counter and processor
|
||||
state from `struct sigcontext'. */
|
||||
addr = get_frame_memory_unsigned (this_frame, base + 8, 4);
|
||||
trad_frame_set_reg_addr (this_cache, M68K_FP_REGNUM, addr + 8);
|
||||
trad_frame_set_reg_addr (this_cache, M68K_SP_REGNUM, addr + 12);
|
||||
trad_frame_set_reg_addr (this_cache, M68K_PC_REGNUM, addr + 20);
|
||||
trad_frame_set_reg_addr (this_cache, M68K_PS_REGNUM, addr + 24);
|
||||
|
||||
/* The sc_ap member of `struct sigcontext' points to additional
|
||||
hardware state. Here we find the missing registers. */
|
||||
addr = get_frame_memory_unsigned (this_frame, addr + 16, 4) + 4;
|
||||
for (regnum = M68K_D0_REGNUM; regnum < M68K_FP_REGNUM; regnum++, addr += 4)
|
||||
trad_frame_set_reg_addr (this_cache, regnum, addr);
|
||||
|
||||
/* Construct the frame ID using the function start. */
|
||||
trad_frame_set_id (this_cache, frame_id_build (base, func));
|
||||
}
|
||||
|
||||
static const struct tramp_frame m68kobsd_sigtramp = {
|
||||
SIGTRAMP_FRAME,
|
||||
2,
|
||||
{
|
||||
{ 0x206f, -1 }, { 0x000c, -1}, /* moveal %sp@(12),%a0 */
|
||||
{ 0x4e90, -1 }, /* jsr %a0@ */
|
||||
{ 0x588f, -1 }, /* addql #4,%sp */
|
||||
{ 0x4e41, -1 }, /* trap #1 */
|
||||
{ 0x2f40, -1 }, { 0x0004, -1 }, /* moveal %d0,%sp@(4) */
|
||||
{ 0x7001, -1 }, /* moveq #SYS_exit,%d0 */
|
||||
{ 0x4e40, -1 }, /* trap #0 */
|
||||
{ TRAMP_SENTINEL_INSN, -1 }
|
||||
},
|
||||
m68kobsd_sigtramp_cache_init
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
m68kbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
|
@ -195,30 +141,6 @@ m68kbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
|
||||
set_gdbarch_iterate_over_regset_sections
|
||||
(gdbarch, m68kbsd_iterate_over_regset_sections);
|
||||
}
|
||||
|
||||
/* OpenBSD and NetBSD a.out. */
|
||||
|
||||
static void
|
||||
m68kbsd_aout_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
||||
m68kbsd_init_abi (info, gdbarch);
|
||||
|
||||
tdep->struct_return = reg_struct_return;
|
||||
|
||||
tramp_frame_prepend_unwinder (gdbarch, &m68kobsd_sigtramp);
|
||||
}
|
||||
|
||||
/* NetBSD ELF. */
|
||||
|
||||
static void
|
||||
m68kbsd_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
||||
m68kbsd_init_abi (info, gdbarch);
|
||||
|
||||
/* NetBSD ELF uses the SVR4 ABI. */
|
||||
m68k_svr4_init_abi (info, gdbarch);
|
||||
|
@ -230,41 +152,12 @@ m68kbsd_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
}
|
||||
|
||||
|
||||
static enum gdb_osabi
|
||||
m68kbsd_aout_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "a.out-m68k-netbsd") == 0
|
||||
|| strcmp (bfd_get_target (abfd), "a.out-m68k4k-netbsd") == 0)
|
||||
return GDB_OSABI_NETBSD_AOUT;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
static enum gdb_osabi
|
||||
m68kbsd_core_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
|
||||
return GDB_OSABI_NETBSD_AOUT;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
void _initialize_m68kbsd_tdep (void);
|
||||
|
||||
void
|
||||
_initialize_m68kbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_m68k, bfd_target_aout_flavour,
|
||||
m68kbsd_aout_osabi_sniffer);
|
||||
|
||||
/* BFD doesn't set a flavour for NetBSD style a.out core files. */
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_m68k, bfd_target_unknown_flavour,
|
||||
m68kbsd_core_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_m68k, 0, GDB_OSABI_NETBSD_AOUT,
|
||||
m68kbsd_aout_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_m68k, 0, GDB_OSABI_NETBSD_ELF,
|
||||
m68kbsd_elf_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_m68k, 0, GDB_OSABI_NETBSD,
|
||||
m68kbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -380,6 +380,6 @@ extern initialize_file_ftype _initialize_mipsnbsd_tdep;
|
|||
void
|
||||
_initialize_mipsnbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_NETBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_NETBSD,
|
||||
mipsnbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -165,6 +165,6 @@ void _initialize_mips64obsd_tdep (void);
|
|||
void
|
||||
_initialize_mips64obsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_OPENBSD,
|
||||
mips64obsd_init_abi);
|
||||
}
|
||||
|
|
44
gdb/osabi.c
44
gdb/osabi.c
|
@ -64,15 +64,11 @@ static const struct osabi_names gdb_osabi_names[] =
|
|||
{ "GNU/Hurd", NULL },
|
||||
{ "Solaris", NULL },
|
||||
{ "GNU/Linux", "linux(-gnu)?" },
|
||||
{ "FreeBSD/a.out", NULL },
|
||||
{ "FreeBSD/ELF", NULL },
|
||||
{ "NetBSD/a.out", NULL },
|
||||
{ "NetBSD/ELF", NULL },
|
||||
{ "OpenBSD/ELF", NULL },
|
||||
{ "FreeBSD", NULL },
|
||||
{ "NetBSD", NULL },
|
||||
{ "OpenBSD", NULL },
|
||||
{ "WindowsCE", NULL },
|
||||
{ "DJGPP", NULL },
|
||||
{ "HP-UX/ELF", NULL },
|
||||
{ "HP-UX/SOM", NULL },
|
||||
{ "QNX-Neutrino", NULL },
|
||||
{ "Cygwin", NULL },
|
||||
{ "AIX", NULL },
|
||||
|
@ -482,11 +478,11 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
|
|||
break;
|
||||
|
||||
case GNU_ABI_TAG_FREEBSD:
|
||||
*osabi = GDB_OSABI_FREEBSD_ELF;
|
||||
*osabi = GDB_OSABI_FREEBSD;
|
||||
break;
|
||||
|
||||
case GNU_ABI_TAG_NETBSD:
|
||||
*osabi = GDB_OSABI_NETBSD_ELF;
|
||||
*osabi = GDB_OSABI_NETBSD;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -501,7 +497,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
|
|||
NT_FREEBSD_ABI_TAG))
|
||||
{
|
||||
/* There is no need to check the version yet. */
|
||||
*osabi = GDB_OSABI_FREEBSD_ELF;
|
||||
*osabi = GDB_OSABI_FREEBSD;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -513,7 +509,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
|
|||
&& check_note (abfd, sect, note, §size, "NetBSD", 4, NT_NETBSD_IDENT))
|
||||
{
|
||||
/* There is no need to check the version yet. */
|
||||
*osabi = GDB_OSABI_NETBSD_ELF;
|
||||
*osabi = GDB_OSABI_NETBSD;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -523,14 +519,14 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
|
|||
NT_OPENBSD_IDENT))
|
||||
{
|
||||
/* There is no need to check the version yet. */
|
||||
*osabi = GDB_OSABI_OPENBSD_ELF;
|
||||
*osabi = GDB_OSABI_OPENBSD;
|
||||
return;
|
||||
}
|
||||
|
||||
/* .note.netbsdcore.procinfo notes, used by NetBSD. */
|
||||
if (strcmp (name, ".note.netbsdcore.procinfo") == 0)
|
||||
{
|
||||
*osabi = GDB_OSABI_NETBSD_ELF;
|
||||
*osabi = GDB_OSABI_NETBSD;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -547,6 +543,7 @@ generic_elf_osabi_sniffer (bfd *abfd)
|
|||
{
|
||||
case ELFOSABI_NONE:
|
||||
case ELFOSABI_GNU:
|
||||
case ELFOSABI_HPUX:
|
||||
/* When the EI_OSABI field in the ELF header is ELFOSABI_NONE
|
||||
(0), then the ELF structures in the file are conforming to
|
||||
the base specification for that machine (there are no
|
||||
|
@ -555,34 +552,27 @@ generic_elf_osabi_sniffer (bfd *abfd)
|
|||
|
||||
The same applies for ELFOSABI_GNU: this can mean GNU/Hurd,
|
||||
GNU/Linux, and possibly more. */
|
||||
|
||||
/* And likewise ELFOSABI_HPUX. For some reason the default
|
||||
value for the EI_OSABI field is ELFOSABI_HPUX for all PA-RISC
|
||||
targets (with the exception of GNU/Linux). */
|
||||
bfd_map_over_sections (abfd,
|
||||
generic_elf_osabi_sniff_abi_tag_sections,
|
||||
&osabi);
|
||||
break;
|
||||
|
||||
case ELFOSABI_FREEBSD:
|
||||
osabi = GDB_OSABI_FREEBSD_ELF;
|
||||
osabi = GDB_OSABI_FREEBSD;
|
||||
break;
|
||||
|
||||
case ELFOSABI_NETBSD:
|
||||
osabi = GDB_OSABI_NETBSD_ELF;
|
||||
osabi = GDB_OSABI_NETBSD;
|
||||
break;
|
||||
|
||||
case ELFOSABI_SOLARIS:
|
||||
osabi = GDB_OSABI_SOLARIS;
|
||||
break;
|
||||
|
||||
case ELFOSABI_HPUX:
|
||||
/* For some reason the default value for the EI_OSABI field is
|
||||
ELFOSABI_HPUX for all PA-RISC targets (with the exception of
|
||||
GNU/Linux). We use HP-UX ELF as the default, but let any
|
||||
OS-specific notes override this. */
|
||||
osabi = GDB_OSABI_HPUX_ELF;
|
||||
bfd_map_over_sections (abfd,
|
||||
generic_elf_osabi_sniff_abi_tag_sections,
|
||||
&osabi);
|
||||
break;
|
||||
|
||||
case ELFOSABI_OPENVMS:
|
||||
osabi = GDB_OSABI_OPENVMS;
|
||||
break;
|
||||
|
@ -595,7 +585,7 @@ generic_elf_osabi_sniffer (bfd *abfd)
|
|||
header to "brand" their ELF binaries in FreeBSD 3.x. */
|
||||
if (memcmp (&elf_elfheader (abfd)->e_ident[8],
|
||||
"FreeBSD", sizeof ("FreeBSD")) == 0)
|
||||
osabi = GDB_OSABI_FREEBSD_ELF;
|
||||
osabi = GDB_OSABI_FREEBSD;
|
||||
}
|
||||
|
||||
return osabi;
|
||||
|
|
|
@ -343,11 +343,10 @@ void _initialize_ppcfbsd_tdep (void);
|
|||
void
|
||||
_initialize_ppcfbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc, GDB_OSABI_FREEBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc, GDB_OSABI_FREEBSD,
|
||||
ppcfbsd_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc64,
|
||||
GDB_OSABI_FREEBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc64, GDB_OSABI_FREEBSD,
|
||||
ppcfbsd_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_rs6000, 0, GDB_OSABI_FREEBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_rs6000, 0, GDB_OSABI_FREEBSD,
|
||||
ppcfbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -195,7 +195,7 @@ void _initialize_ppcnbsd_tdep (void);
|
|||
void
|
||||
_initialize_ppcnbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_NETBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_NETBSD,
|
||||
ppcnbsd_init_abi);
|
||||
|
||||
/* Avoid initializing the register offsets again if they were
|
||||
|
|
|
@ -262,33 +262,15 @@ ppcobsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
}
|
||||
|
||||
|
||||
/* OpenBSD uses uses the traditional NetBSD core file format, even for
|
||||
ports that use ELF. */
|
||||
#define GDB_OSABI_NETBSD_CORE GDB_OSABI_OPENBSD_ELF
|
||||
|
||||
static enum gdb_osabi
|
||||
ppcobsd_core_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
|
||||
return GDB_OSABI_NETBSD_CORE;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
void _initialize_ppcobsd_tdep (void);
|
||||
|
||||
void
|
||||
_initialize_ppcobsd_tdep (void)
|
||||
{
|
||||
/* BFD doesn't set a flavour for NetBSD style a.out core files. */
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_powerpc, bfd_target_unknown_flavour,
|
||||
ppcobsd_core_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_rs6000, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_rs6000, 0, GDB_OSABI_OPENBSD,
|
||||
ppcobsd_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_OPENBSD,
|
||||
ppcobsd_init_abi);
|
||||
|
||||
/* Avoid initializing the register offsets again if they were
|
||||
|
|
|
@ -6530,8 +6530,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
switch (info.osabi)
|
||||
{
|
||||
case GDB_OSABI_LINUX:
|
||||
case GDB_OSABI_NETBSD_AOUT:
|
||||
case GDB_OSABI_NETBSD_ELF:
|
||||
case GDB_OSABI_NETBSD:
|
||||
case GDB_OSABI_UNKNOWN:
|
||||
set_gdbarch_unwind_pc (gdbarch, rs6000_unwind_pc);
|
||||
frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
|
||||
|
|
|
@ -71,31 +71,14 @@ shnbsd_init_abi (struct gdbarch_info info,
|
|||
}
|
||||
|
||||
|
||||
/* OpenBSD uses uses the traditional NetBSD core file format, even for
|
||||
ports that use ELF. */
|
||||
#define GDB_OSABI_NETBSD_CORE GDB_OSABI_OPENBSD_ELF
|
||||
|
||||
static enum gdb_osabi
|
||||
shnbsd_core_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
|
||||
return GDB_OSABI_NETBSD_CORE;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
extern initialize_file_ftype _initialize_shnbsd_tdep;
|
||||
|
||||
void
|
||||
_initialize_shnbsd_tdep (void)
|
||||
{
|
||||
/* BFD doesn't set a flavour for NetBSD style a.out core files. */
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_sh, bfd_target_unknown_flavour,
|
||||
shnbsd_core_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_sh, 0, GDB_OSABI_NETBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_sh, 0, GDB_OSABI_NETBSD,
|
||||
shnbsd_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_sh, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_sh, 0, GDB_OSABI_OPENBSD,
|
||||
shnbsd_init_abi);
|
||||
}
|
||||
|
|
24
gdb/solib.c
24
gdb/solib.c
|
@ -1240,29 +1240,7 @@ clear_solib (void)
|
|||
{
|
||||
const struct target_so_ops *ops = solib_ops (target_gdbarch ());
|
||||
|
||||
/* This function is expected to handle ELF shared libraries. It is
|
||||
also used on Solaris, which can run either ELF or a.out binaries
|
||||
(for compatibility with SunOS 4), both of which can use shared
|
||||
libraries. So we don't know whether we have an ELF executable or
|
||||
an a.out executable until the user chooses an executable file.
|
||||
|
||||
ELF shared libraries don't get mapped into the address space
|
||||
until after the program starts, so we'd better not try to insert
|
||||
breakpoints in them immediately. We have to wait until the
|
||||
dynamic linker has loaded them; we'll hit a bp_shlib_event
|
||||
breakpoint (look for calls to create_solib_event_breakpoint) when
|
||||
it's ready.
|
||||
|
||||
SunOS shared libraries seem to be different --- they're present
|
||||
as soon as the process begins execution, so there's no need to
|
||||
put off inserting breakpoints. There's also nowhere to put a
|
||||
bp_shlib_event breakpoint, so if we put it off, we'll never get
|
||||
around to it.
|
||||
|
||||
So: disable breakpoints only if we're using ELF shared libs. */
|
||||
if (exec_bfd != NULL
|
||||
&& bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
|
||||
disable_breakpoints_in_shlibs ();
|
||||
disable_breakpoints_in_shlibs ();
|
||||
|
||||
while (so_list_head)
|
||||
{
|
||||
|
|
|
@ -290,7 +290,7 @@ static const struct regset sparc32nbsd_fpregset =
|
|||
NULL, sparc32nbsd_supply_fpregset, NULL
|
||||
};
|
||||
|
||||
static void
|
||||
void
|
||||
sparc32nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
@ -309,54 +309,11 @@ sparc32nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||
tdep->step_trap = sparcnbsd_step_trap;
|
||||
|
||||
frame_unwind_append_unwinder (gdbarch, &sparc32nbsd_sigcontext_frame_unwind);
|
||||
}
|
||||
|
||||
static void
|
||||
sparc32nbsd_aout_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
sparc32nbsd_init_abi (info, gdbarch);
|
||||
}
|
||||
|
||||
void
|
||||
sparc32nbsd_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
sparc32nbsd_init_abi (info, gdbarch);
|
||||
|
||||
set_solib_svr4_fetch_link_map_offsets
|
||||
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
|
||||
}
|
||||
|
||||
static enum gdb_osabi
|
||||
sparcnbsd_aout_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "a.out-sparc-netbsd") == 0)
|
||||
return GDB_OSABI_NETBSD_AOUT;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
/* OpenBSD uses the traditional NetBSD core file format, even for
|
||||
ports that use ELF. Therefore, if the default OS ABI is OpenBSD
|
||||
ELF, we return that instead of NetBSD a.out. This is mainly for
|
||||
the benfit of OpenBSD/sparc64, which inherits the sniffer below
|
||||
since we include this file for an OpenBSD/sparc64 target. For
|
||||
OpenBSD/sparc, the NetBSD a.out OS ABI is probably similar enough
|
||||
to both the OpenBSD a.out and the OpenBSD ELF OS ABI. */
|
||||
#if defined (GDB_OSABI_DEFAULT) && (GDB_OSABI_DEFAULT == GDB_OSABI_OPENBSD_ELF)
|
||||
#define GDB_OSABI_NETBSD_CORE GDB_OSABI_OPENBSD_ELF
|
||||
#else
|
||||
#define GDB_OSABI_NETBSD_CORE GDB_OSABI_NETBSD_AOUT
|
||||
#endif
|
||||
|
||||
static enum gdb_osabi
|
||||
sparcnbsd_core_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
|
||||
return GDB_OSABI_NETBSD_CORE;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
void _initialize_sparcnbsd_tdep (void);
|
||||
|
@ -364,15 +321,6 @@ void _initialize_sparcnbsd_tdep (void);
|
|||
void
|
||||
_initialize_sparcnbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_sparc, bfd_target_aout_flavour,
|
||||
sparcnbsd_aout_osabi_sniffer);
|
||||
|
||||
/* BFD doesn't set a flavour for NetBSD style a.out core files. */
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_sparc, bfd_target_unknown_flavour,
|
||||
sparcnbsd_core_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_NETBSD_AOUT,
|
||||
sparc32nbsd_aout_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_NETBSD_ELF,
|
||||
sparc32nbsd_elf_init_abi);
|
||||
gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_NETBSD,
|
||||
sparc32nbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -235,7 +235,7 @@ static void
|
|||
sparc32obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
/* OpenBSD/sparc is very similar to NetBSD/sparc ELF. */
|
||||
sparc32nbsd_elf_init_abi (info, gdbarch);
|
||||
sparc32nbsd_init_abi (info, gdbarch);
|
||||
|
||||
set_gdbarch_skip_solib_resolver (gdbarch, obsd_skip_solib_resolver);
|
||||
|
||||
|
@ -253,6 +253,6 @@ void _initialize_sparc32obsd_tdep (void);
|
|||
void
|
||||
_initialize_sparc32obsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_OPENBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_OPENBSD,
|
||||
sparc32obsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -246,8 +246,8 @@ extern const struct sparc_gregmap sparc32nbsd_gregmap;
|
|||
extern CORE_ADDR sparcnbsd_step_trap (struct frame_info *frame,
|
||||
unsigned long insn);
|
||||
|
||||
extern void sparc32nbsd_elf_init_abi (struct gdbarch_info info,
|
||||
struct gdbarch *gdbarch);
|
||||
extern void sparc32nbsd_init_abi (struct gdbarch_info info,
|
||||
struct gdbarch *gdbarch);
|
||||
|
||||
extern struct trad_frame_saved_reg *
|
||||
sparc32nbsd_sigcontext_saved_regs (struct frame_info *next_frame);
|
||||
|
|
|
@ -248,5 +248,5 @@ void
|
|||
_initialize_sparc64fbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9,
|
||||
GDB_OSABI_FREEBSD_ELF, sparc64fbsd_init_abi);
|
||||
GDB_OSABI_FREEBSD, sparc64fbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -276,5 +276,5 @@ void
|
|||
_initialize_sparc64nbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9,
|
||||
GDB_OSABI_NETBSD_ELF, sparc64nbsd_init_abi);
|
||||
GDB_OSABI_NETBSD, sparc64nbsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -448,5 +448,5 @@ void
|
|||
_initialize_sparc64obsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9,
|
||||
GDB_OSABI_OPENBSD_ELF, sparc64obsd_init_abi);
|
||||
GDB_OSABI_OPENBSD, sparc64obsd_init_abi);
|
||||
}
|
||||
|
|
|
@ -18,10 +18,11 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Support routines for reading and decoding debugging information in
|
||||
the "stabs" format. This format is used with many systems that use
|
||||
the a.out object file format, as well as some systems that use
|
||||
COFF or ELF where the stabs data is placed in a special section.
|
||||
Avoid placing any object file format specific code in this file. */
|
||||
the "stabs" format. This format is used by some systems that use
|
||||
COFF or ELF where the stabs data is placed in a special section (as
|
||||
well as with many old systems that used the a.out object file
|
||||
format). Avoid placing any object file format specific code in
|
||||
this file. */
|
||||
|
||||
#include "defs.h"
|
||||
#include "bfd.h"
|
||||
|
|
|
@ -139,7 +139,7 @@ print_objfile_statistics (void)
|
|||
blockvectors);
|
||||
|
||||
if (OBJSTAT (objfile, sz_strtab) > 0)
|
||||
printf_filtered (_(" Space used by a.out string tables: %d\n"),
|
||||
printf_filtered (_(" Space used by string tables: %d\n"),
|
||||
OBJSTAT (objfile, sz_strtab));
|
||||
printf_filtered (_(" Total memory used for objfile obstack: %s\n"),
|
||||
pulongest (obstack_memory_used (&objfile
|
||||
|
|
|
@ -41,6 +41,6 @@ void _initialize_vaxnbsd_tdep (void);
|
|||
void
|
||||
_initialize_vaxnbsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi (bfd_arch_vax, 0, GDB_OSABI_NETBSD_ELF,
|
||||
gdbarch_register_osabi (bfd_arch_vax, 0, GDB_OSABI_NETBSD,
|
||||
vaxnbsd_elf_init_abi);
|
||||
}
|
||||
|
|
|
@ -1,178 +0,0 @@
|
|||
/* Target-dependent code for OpenBSD/vax.
|
||||
|
||||
Copyright (C) 2005-2016 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "defs.h"
|
||||
#include "arch-utils.h"
|
||||
#include "frame.h"
|
||||
#include "frame-unwind.h"
|
||||
#include "osabi.h"
|
||||
#include "symtab.h"
|
||||
#include "trad-frame.h"
|
||||
|
||||
#include "vax-tdep.h"
|
||||
|
||||
/* Signal trampolines. */
|
||||
|
||||
/* Since OpenBSD 3.2, the sigtramp routine is mapped at a random page
|
||||
in virtual memory. The randomness makes it somewhat tricky to
|
||||
detect it, but fortunately we can rely on the fact that the start
|
||||
of the sigtramp routine is page-aligned. We recognize the
|
||||
trampoline by looking for the code that invokes the sigreturn
|
||||
system call. The offset where we can find that code varies from
|
||||
release to release.
|
||||
|
||||
By the way, the mapping mentioned above is read-only, so you cannot
|
||||
place a breakpoint in the signal trampoline. */
|
||||
|
||||
/* Default page size. */
|
||||
static const int vaxobsd_page_size = 4096;
|
||||
|
||||
/* Offset for sigreturn(2). */
|
||||
static const int vaxobsd_sigreturn_offset = 0x11;
|
||||
|
||||
/* Instruction sequence for sigreturn(2). VAX doesn't have
|
||||
fixed-length instructions so we include the ensuing exit(2) to
|
||||
reduce the chance of spurious matches. */
|
||||
static const gdb_byte vaxobsd_sigreturn[] = {
|
||||
0xbc, 0x8f, 0x67, 0x00, /* chmk $SYS_sigreturn */
|
||||
0xbc, 0x01 /* chmk $SYS_exit */
|
||||
};
|
||||
|
||||
static int
|
||||
vaxobsd_sigtramp_sniffer (const struct frame_unwind *self,
|
||||
struct frame_info *this_frame,
|
||||
void **this_cache)
|
||||
{
|
||||
CORE_ADDR pc = get_frame_pc (this_frame);
|
||||
CORE_ADDR start_pc = (pc & ~(vaxobsd_page_size - 1));
|
||||
CORE_ADDR sigreturn_addr = start_pc + vaxobsd_sigreturn_offset;
|
||||
gdb_byte *buf;
|
||||
const char *name;
|
||||
|
||||
find_pc_partial_function (pc, &name, NULL, NULL);
|
||||
if (name)
|
||||
return 0;
|
||||
|
||||
buf = (gdb_byte *) alloca (sizeof vaxobsd_sigreturn);
|
||||
if (!safe_frame_unwind_memory (this_frame, sigreturn_addr,
|
||||
buf, sizeof vaxobsd_sigreturn))
|
||||
return 0;
|
||||
|
||||
if (memcmp(buf, vaxobsd_sigreturn, sizeof vaxobsd_sigreturn) == 0)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct trad_frame_cache *
|
||||
vaxobsd_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
|
||||
{
|
||||
struct trad_frame_cache *cache;
|
||||
CORE_ADDR addr, base, func;
|
||||
|
||||
if (*this_cache)
|
||||
return (struct trad_frame_cache *) *this_cache;
|
||||
|
||||
cache = trad_frame_cache_zalloc (this_frame);
|
||||
*this_cache = cache;
|
||||
|
||||
func = get_frame_pc (this_frame);
|
||||
func &= ~(vaxobsd_page_size - 1);
|
||||
|
||||
base = get_frame_register_unsigned (this_frame, VAX_SP_REGNUM);
|
||||
addr = get_frame_memory_unsigned (this_frame, base - 4, 4);
|
||||
|
||||
trad_frame_set_reg_addr (cache, VAX_SP_REGNUM, addr + 8);
|
||||
trad_frame_set_reg_addr (cache, VAX_FP_REGNUM, addr + 12);
|
||||
trad_frame_set_reg_addr (cache, VAX_AP_REGNUM, addr + 16);
|
||||
trad_frame_set_reg_addr (cache, VAX_PC_REGNUM, addr + 20);
|
||||
trad_frame_set_reg_addr (cache, VAX_PS_REGNUM, addr + 24);
|
||||
|
||||
/* Construct the frame ID using the function start. */
|
||||
trad_frame_set_id (cache, frame_id_build (base, func));
|
||||
|
||||
return cache;
|
||||
}
|
||||
|
||||
static void
|
||||
vaxobsd_sigtramp_frame_this_id (struct frame_info *this_frame,
|
||||
void **this_cache, struct frame_id *this_id)
|
||||
{
|
||||
struct trad_frame_cache *cache =
|
||||
vaxobsd_sigtramp_frame_cache (this_frame, this_cache);
|
||||
|
||||
trad_frame_get_id (cache, this_id);
|
||||
}
|
||||
|
||||
static struct value *
|
||||
vaxobsd_sigtramp_frame_prev_register (struct frame_info *this_frame,
|
||||
void **this_cache, int regnum)
|
||||
{
|
||||
struct trad_frame_cache *cache =
|
||||
vaxobsd_sigtramp_frame_cache (this_frame, this_cache);
|
||||
|
||||
return trad_frame_get_register (cache, this_frame, regnum);
|
||||
}
|
||||
|
||||
static const struct frame_unwind vaxobsd_sigtramp_frame_unwind = {
|
||||
SIGTRAMP_FRAME,
|
||||
default_frame_unwind_stop_reason,
|
||||
vaxobsd_sigtramp_frame_this_id,
|
||||
vaxobsd_sigtramp_frame_prev_register,
|
||||
NULL,
|
||||
vaxobsd_sigtramp_sniffer
|
||||
};
|
||||
|
||||
|
||||
/* OpenBSD a.out. */
|
||||
|
||||
static void
|
||||
vaxobsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
frame_unwind_append_unwinder (gdbarch, &vaxobsd_sigtramp_frame_unwind);
|
||||
}
|
||||
|
||||
/* FIXME: kettenis/20050821: Since OpenBSD/vax binaries are
|
||||
indistingushable from NetBSD/vax a.out binaries, building a GDB
|
||||
that should support both these targets will probably not work as
|
||||
expected. */
|
||||
#define GDB_OSABI_OPENBSD_AOUT GDB_OSABI_NETBSD_AOUT
|
||||
|
||||
static enum gdb_osabi
|
||||
vaxobsd_aout_osabi_sniffer (bfd *abfd)
|
||||
{
|
||||
if (strcmp (bfd_get_target (abfd), "a.out-vax-netbsd") == 0)
|
||||
return GDB_OSABI_OPENBSD_AOUT;
|
||||
|
||||
return GDB_OSABI_UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
void _initialize_vaxobsd_tdep (void);
|
||||
|
||||
void
|
||||
_initialize_vaxobsd_tdep (void)
|
||||
{
|
||||
gdbarch_register_osabi_sniffer (bfd_arch_vax, bfd_target_aout_flavour,
|
||||
vaxobsd_aout_osabi_sniffer);
|
||||
|
||||
gdbarch_register_osabi (bfd_arch_vax, 0, GDB_OSABI_OPENBSD_AOUT,
|
||||
vaxobsd_init_abi);
|
||||
}
|
Loading…
Reference in New Issue