From d6b74b0fa6d22cfd94451b9024cd43fddb2d6f4e Mon Sep 17 00:00:00 2001 From: Jason Thorpe Date: Wed, 8 May 2002 16:18:41 +0000 Subject: * sh-nbsd-nat.c: Rename to... * shnbsd-nat.c: ...this. * sh-nbsd-tdep.c: Rename to... * shnbsd-tdep.c: ...this. * sh-nbsd-tdep.h: Rename to... * shnbsd-tdep.h: ...this. * config/sh/nbsd.mh: Use shnbsd-nat.o. * config/sh/nbsd.mt: Use shnbsd-tdep.o. --- gdb/ChangeLog | 11 +++ gdb/config/sh/nbsd.mh | 2 +- gdb/config/sh/nbsd.mt | 2 +- gdb/sh-nbsd-nat.c | 76 ---------------- gdb/sh-nbsd-tdep.c | 235 -------------------------------------------------- gdb/sh-nbsd-tdep.h | 31 ------- gdb/shnbsd-nat.c | 76 ++++++++++++++++ gdb/shnbsd-tdep.c | 235 ++++++++++++++++++++++++++++++++++++++++++++++++++ gdb/shnbsd-tdep.h | 31 +++++++ 9 files changed, 355 insertions(+), 344 deletions(-) delete mode 100644 gdb/sh-nbsd-nat.c delete mode 100644 gdb/sh-nbsd-tdep.c delete mode 100644 gdb/sh-nbsd-tdep.h create mode 100644 gdb/shnbsd-nat.c create mode 100644 gdb/shnbsd-tdep.c create mode 100644 gdb/shnbsd-tdep.h diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2b0a10689ef..8d98b187992 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2002-05-08 Jason Thorpe + + * sh-nbsd-nat.c: Rename to... + * shnbsd-nat.c: ...this. + * sh-nbsd-tdep.c: Rename to... + * shnbsd-tdep.c: ...this. + * sh-nbsd-tdep.h: Rename to... + * shnbsd-tdep.h: ...this. + * config/sh/nbsd.mh: Use shnbsd-nat.o. + * config/sh/nbsd.mt: Use shnbsd-tdep.o. + 2002-05-08 Richard Earnshaw * remote-rdi.c (_initializie_remote_rdi): Use ANSI-style string diff --git a/gdb/config/sh/nbsd.mh b/gdb/config/sh/nbsd.mh index 24040267631..dd677b60e4b 100644 --- a/gdb/config/sh/nbsd.mh +++ b/gdb/config/sh/nbsd.mh @@ -1,4 +1,4 @@ # Host: SuperH running NetBSD NAT_CLIBS= -NATDEPFILES= infptrace.o inftarg.o fork-child.o sh-nbsd-nat.o +NATDEPFILES= infptrace.o inftarg.o fork-child.o shnbsd-nat.o NAT_FILE= nm-nbsd.h diff --git a/gdb/config/sh/nbsd.mt b/gdb/config/sh/nbsd.mt index 1bece84cf9b..b440993724b 100644 --- a/gdb/config/sh/nbsd.mt +++ b/gdb/config/sh/nbsd.mt @@ -1,5 +1,5 @@ # Target: SuperH running NetBSD -TDEPFILES= sh-tdep.o sh-nbsd-tdep.o corelow.o solib.o solib-svr4.o +TDEPFILES= sh-tdep.o shnbsd-tdep.o corelow.o solib.o solib-svr4.o TM_FILE= tm-nbsd.h SIM_OBS = remote-sim.o diff --git a/gdb/sh-nbsd-nat.c b/gdb/sh-nbsd-nat.c deleted file mode 100644 index 469674b169b..00000000000 --- a/gdb/sh-nbsd-nat.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Native-dependent code for SuperH running NetBSD, for GDB. - Copyright 2002 Free Software Foundation, Inc. - Contributed by Wasabi Systems, 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include -#include -#include - -#include "defs.h" -#include "inferior.h" - -#include "sh-nbsd-tdep.h" - -/* Determine if PT_GETREGS fetches this register. */ -#define GETREGS_SUPPLIES(regno) \ - (((regno) >= R0_REGNUM && (regno) <= (R0_REGNUM + 15)) \ -|| (regno) == PC_REGNUM || (regno) == PR_REGNUM \ -|| (regno) == MACH_REGNUM || (regno) == MACL_REGNUM \ -|| (regno) == SR_REGNUM) - -void -fetch_inferior_registers (int regno) -{ - if (regno == -1 || GETREGS_SUPPLIES (regno)) - { - struct reg inferior_registers; - - if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &inferior_registers, 0) == -1) - perror_with_name ("Couldn't get registers"); - - sh_nbsd_supply_register ((char *) &inferior_registers, regno); - - if (regno != -1) - return; - } -} - -void -store_inferior_registers (int regno) -{ - if (regno == -1 || GETREGS_SUPPLIES (regno)) - { - struct reg inferior_registers; - - if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &inferior_registers, 0) == -1) - perror_with_name ("Couldn't get registers"); - - sh_nbsd_fill_register ((char *) &inferior_registers, regno); - - if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &inferior_registers, 0) == -1) - perror_with_name ("Couldn't set registers"); - - if (regno != -1) - return; - } -} diff --git a/gdb/sh-nbsd-tdep.c b/gdb/sh-nbsd-tdep.c deleted file mode 100644 index 512162e3894..00000000000 --- a/gdb/sh-nbsd-tdep.c +++ /dev/null @@ -1,235 +0,0 @@ -/* Target-dependent code for SuperH running NetBSD, for GDB. - Copyright 2002 Free Software Foundation, Inc. - Contributed by Wasabi Systems, 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include "defs.h" -#include "gdbcore.h" -#include "regcache.h" -#include "value.h" -#include "solib-svr4.h" - -#include "sh-nbsd-tdep.h" - -/* Convert an r0-r15 register number into an offset into a ptrace - register structure. */ -static const int regmap[] = -{ - (20 * 4), /* r0 */ - (19 * 4), /* r1 */ - (18 * 4), /* r2 */ - (17 * 4), /* r3 */ - (16 * 4), /* r4 */ - (15 * 4), /* r5 */ - (14 * 4), /* r6 */ - (13 * 4), /* r7 */ - (12 * 4), /* r8 */ - (11 * 4), /* r9 */ - (10 * 4), /* r10 */ - ( 9 * 4), /* r11 */ - ( 8 * 4), /* r12 */ - ( 7 * 4), /* r13 */ - ( 6 * 4), /* r14 */ - ( 5 * 4), /* r15 */ -}; - -#define SIZEOF_STRUCT_REG (21 * 4) - -void -sh_nbsd_supply_registers (char *regs) -{ - int regno; - - for (regno = R0_REGNUM; regno <= (R0_REGNUM + 15); regno++) - supply_register (regno, regs + regmap[regno - R0_REGNUM]); - - supply_register (PC_REGNUM, regs + (0 * 4)); - supply_register (SR_REGNUM, regs + (1 * 4)); - supply_register (PR_REGNUM, regs + (2 * 4)); - supply_register (MACH_REGNUM, regs + (3 * 4)); - supply_register (MACL_REGNUM, regs + (4 * 4)); -} - -void -sh_nbsd_supply_register (char *regs, int regno) -{ - if (regno == -1) - sh_nbsd_supply_registers (regs); - - if (regno == PC_REGNUM) - supply_register (PC_REGNUM, regs + (0 * 4)); - else if (regno == SR_REGNUM) - supply_register (SR_REGNUM, regs + (1 * 4)); - else if (regno == PR_REGNUM) - supply_register (PR_REGNUM, regs + (2 * 4)); - else if (regno == MACH_REGNUM) - supply_register (MACH_REGNUM, regs + (3 * 4)); - else if (regno == MACL_REGNUM) - supply_register (MACL_REGNUM, regs + (4 * 4)); - else if (regno >= R0_REGNUM && regno <= (R0_REGNUM + 15)) - supply_register (regno, regs + regmap[regno - R0_REGNUM]); -} - -void -sh_nbsd_fill_registers (char *regs) -{ - int regno; - - for (regno = R0_REGNUM; regno <= (R0_REGNUM + 15); regno++) - regcache_collect (regno, regs + regmap[regno - R0_REGNUM]); - - regcache_collect (PC_REGNUM, regs + (0 * 4)); - regcache_collect (SR_REGNUM, regs + (1 * 4)); - regcache_collect (PR_REGNUM, regs + (2 * 4)); - regcache_collect (MACH_REGNUM, regs + (3 * 4)); - regcache_collect (MACL_REGNUM, regs + (4 * 4)); -} - -void -sh_nbsd_fill_register (char *regs, int regno) -{ - if (regno == -1) - sh_nbsd_fill_registers (regs); - - if (regno == PC_REGNUM) - regcache_collect (PC_REGNUM, regs + (0 * 4)); - else if (regno == SR_REGNUM) - regcache_collect (SR_REGNUM, regs + (1 * 4)); - else if (regno == PR_REGNUM) - regcache_collect (PR_REGNUM, regs + (2 * 4)); - else if (regno == MACH_REGNUM) - regcache_collect (MACH_REGNUM, regs + (3 * 4)); - else if (regno == MACL_REGNUM) - regcache_collect (MACL_REGNUM, regs + (4 * 4)); - else if (regno >= R0_REGNUM && regno <= (R0_REGNUM + 15)) - regcache_collect (regno, regs + regmap[regno - R0_REGNUM]); -} - -/* Fetch (and possibly build) an appropriate link_map_offsets - structure for NetBSD/sh targets using the struct offsets - defined in (but without actual reference to that file). - - This makes it possible to access NetBSD/sh shared libraries - from a GDB that was not built on a NetBSD/sh host (for cross - debugging). */ - -static struct link_map_offsets * -sh_nbsd_solib_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 = 16; - - lmo.r_map_offset = 4; - lmo.r_map_size = 4; - - lmo.link_map_size = 20; - - 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; -} - -static void -fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, - int which, CORE_ADDR ignore) -{ - /* We get everything from the .reg section. */ - if (which != 0) - return; - - if (core_reg_size < SIZEOF_STRUCT_REG) - { - warning ("Wrong size register set in core file."); - return; - } - - /* Integer registers. */ - sh_nbsd_supply_registers (core_reg_sect); -} - -static void -fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size, - int which, CORE_ADDR ignore) -{ - switch (which) - { - case 0: /* Integer registers. */ - if (core_reg_size != SIZEOF_STRUCT_REG) - warning ("Wrong size register set in core file."); - else - sh_nbsd_supply_registers (core_reg_sect); - break; - - default: - /* Don't know what kind of register request this is; just ignore it. */ - break; - } -} - -static struct core_fns sh_nbsd_core_fns = -{ - bfd_target_unknown_flavour, /* core_flavour */ - default_check_format, /* check_format */ - default_core_sniffer, /* core_sniffer */ - fetch_core_registers, /* core_read_registers */ - NULL /* next */ -}; - -static struct core_fns sh_nbsd_elfcore_fns = -{ - bfd_target_elf_flavour, /* core_flavour */ - default_check_format, /* check_format */ - default_core_sniffer, /* core_sniffer */ - fetch_elfcore_registers, /* core_read_registers */ - NULL /* next */ -}; - -static void -sh_nbsd_init_abi (struct gdbarch_info info, - struct gdbarch *gdbarch) -{ - set_solib_svr4_fetch_link_map_offsets (gdbarch, - sh_nbsd_solib_svr4_fetch_link_map_offsets); -} - -void -_initialize_sh_nbsd_tdep (void) -{ - add_core_fns (&sh_nbsd_core_fns); - add_core_fns (&sh_nbsd_elfcore_fns); - - sh_gdbarch_register_os_abi (SH_OSABI_NETBSD_ELF, sh_nbsd_init_abi); -} diff --git a/gdb/sh-nbsd-tdep.h b/gdb/sh-nbsd-tdep.h deleted file mode 100644 index ede2f93b831..00000000000 --- a/gdb/sh-nbsd-tdep.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Target-dependent definitions for SuperH running NetBSD, for GDB. - Copyright 2002 Free Software Foundation, Inc. - Contributed by Wasabi Systems, 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef SH_NBSD_TDEP_H -#define SH_NBSD_TDEP_H - -void sh_nbsd_supply_registers (char *); -void sh_nbsd_supply_register (char *, int); - -void sh_nbsd_fill_registers (char *); -void sh_nbsd_fill_register (char *, int); - -#endif /* SH_NBSD_TDEP_H */ diff --git a/gdb/shnbsd-nat.c b/gdb/shnbsd-nat.c new file mode 100644 index 00000000000..0367fde1a8f --- /dev/null +++ b/gdb/shnbsd-nat.c @@ -0,0 +1,76 @@ +/* Native-dependent code for SuperH running NetBSD, for GDB. + Copyright 2002 Free Software Foundation, Inc. + Contributed by Wasabi Systems, 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include + +#include "defs.h" +#include "inferior.h" + +#include "shnbsd-tdep.h" + +/* Determine if PT_GETREGS fetches this register. */ +#define GETREGS_SUPPLIES(regno) \ + (((regno) >= R0_REGNUM && (regno) <= (R0_REGNUM + 15)) \ +|| (regno) == PC_REGNUM || (regno) == PR_REGNUM \ +|| (regno) == MACH_REGNUM || (regno) == MACL_REGNUM \ +|| (regno) == SR_REGNUM) + +void +fetch_inferior_registers (int regno) +{ + if (regno == -1 || GETREGS_SUPPLIES (regno)) + { + struct reg inferior_registers; + + if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), + (PTRACE_ARG3_TYPE) &inferior_registers, 0) == -1) + perror_with_name ("Couldn't get registers"); + + sh_nbsd_supply_register ((char *) &inferior_registers, regno); + + if (regno != -1) + return; + } +} + +void +store_inferior_registers (int regno) +{ + if (regno == -1 || GETREGS_SUPPLIES (regno)) + { + struct reg inferior_registers; + + if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), + (PTRACE_ARG3_TYPE) &inferior_registers, 0) == -1) + perror_with_name ("Couldn't get registers"); + + sh_nbsd_fill_register ((char *) &inferior_registers, regno); + + if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), + (PTRACE_ARG3_TYPE) &inferior_registers, 0) == -1) + perror_with_name ("Couldn't set registers"); + + if (regno != -1) + return; + } +} diff --git a/gdb/shnbsd-tdep.c b/gdb/shnbsd-tdep.c new file mode 100644 index 00000000000..a185b51a96f --- /dev/null +++ b/gdb/shnbsd-tdep.c @@ -0,0 +1,235 @@ +/* Target-dependent code for SuperH running NetBSD, for GDB. + Copyright 2002 Free Software Foundation, Inc. + Contributed by Wasabi Systems, 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "gdbcore.h" +#include "regcache.h" +#include "value.h" +#include "solib-svr4.h" + +#include "shnbsd-tdep.h" + +/* Convert an r0-r15 register number into an offset into a ptrace + register structure. */ +static const int regmap[] = +{ + (20 * 4), /* r0 */ + (19 * 4), /* r1 */ + (18 * 4), /* r2 */ + (17 * 4), /* r3 */ + (16 * 4), /* r4 */ + (15 * 4), /* r5 */ + (14 * 4), /* r6 */ + (13 * 4), /* r7 */ + (12 * 4), /* r8 */ + (11 * 4), /* r9 */ + (10 * 4), /* r10 */ + ( 9 * 4), /* r11 */ + ( 8 * 4), /* r12 */ + ( 7 * 4), /* r13 */ + ( 6 * 4), /* r14 */ + ( 5 * 4), /* r15 */ +}; + +#define SIZEOF_STRUCT_REG (21 * 4) + +void +sh_nbsd_supply_registers (char *regs) +{ + int regno; + + for (regno = R0_REGNUM; regno <= (R0_REGNUM + 15); regno++) + supply_register (regno, regs + regmap[regno - R0_REGNUM]); + + supply_register (PC_REGNUM, regs + (0 * 4)); + supply_register (SR_REGNUM, regs + (1 * 4)); + supply_register (PR_REGNUM, regs + (2 * 4)); + supply_register (MACH_REGNUM, regs + (3 * 4)); + supply_register (MACL_REGNUM, regs + (4 * 4)); +} + +void +sh_nbsd_supply_register (char *regs, int regno) +{ + if (regno == -1) + sh_nbsd_supply_registers (regs); + + if (regno == PC_REGNUM) + supply_register (PC_REGNUM, regs + (0 * 4)); + else if (regno == SR_REGNUM) + supply_register (SR_REGNUM, regs + (1 * 4)); + else if (regno == PR_REGNUM) + supply_register (PR_REGNUM, regs + (2 * 4)); + else if (regno == MACH_REGNUM) + supply_register (MACH_REGNUM, regs + (3 * 4)); + else if (regno == MACL_REGNUM) + supply_register (MACL_REGNUM, regs + (4 * 4)); + else if (regno >= R0_REGNUM && regno <= (R0_REGNUM + 15)) + supply_register (regno, regs + regmap[regno - R0_REGNUM]); +} + +void +sh_nbsd_fill_registers (char *regs) +{ + int regno; + + for (regno = R0_REGNUM; regno <= (R0_REGNUM + 15); regno++) + regcache_collect (regno, regs + regmap[regno - R0_REGNUM]); + + regcache_collect (PC_REGNUM, regs + (0 * 4)); + regcache_collect (SR_REGNUM, regs + (1 * 4)); + regcache_collect (PR_REGNUM, regs + (2 * 4)); + regcache_collect (MACH_REGNUM, regs + (3 * 4)); + regcache_collect (MACL_REGNUM, regs + (4 * 4)); +} + +void +sh_nbsd_fill_register (char *regs, int regno) +{ + if (regno == -1) + sh_nbsd_fill_registers (regs); + + if (regno == PC_REGNUM) + regcache_collect (PC_REGNUM, regs + (0 * 4)); + else if (regno == SR_REGNUM) + regcache_collect (SR_REGNUM, regs + (1 * 4)); + else if (regno == PR_REGNUM) + regcache_collect (PR_REGNUM, regs + (2 * 4)); + else if (regno == MACH_REGNUM) + regcache_collect (MACH_REGNUM, regs + (3 * 4)); + else if (regno == MACL_REGNUM) + regcache_collect (MACL_REGNUM, regs + (4 * 4)); + else if (regno >= R0_REGNUM && regno <= (R0_REGNUM + 15)) + regcache_collect (regno, regs + regmap[regno - R0_REGNUM]); +} + +/* Fetch (and possibly build) an appropriate link_map_offsets + structure for NetBSD/sh targets using the struct offsets + defined in (but without actual reference to that file). + + This makes it possible to access NetBSD/sh shared libraries + from a GDB that was not built on a NetBSD/sh host (for cross + debugging). */ + +static struct link_map_offsets * +sh_nbsd_solib_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 = 16; + + lmo.r_map_offset = 4; + lmo.r_map_size = 4; + + lmo.link_map_size = 20; + + 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; +} + +static void +fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, + int which, CORE_ADDR ignore) +{ + /* We get everything from the .reg section. */ + if (which != 0) + return; + + if (core_reg_size < SIZEOF_STRUCT_REG) + { + warning ("Wrong size register set in core file."); + return; + } + + /* Integer registers. */ + sh_nbsd_supply_registers (core_reg_sect); +} + +static void +fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size, + int which, CORE_ADDR ignore) +{ + switch (which) + { + case 0: /* Integer registers. */ + if (core_reg_size != SIZEOF_STRUCT_REG) + warning ("Wrong size register set in core file."); + else + sh_nbsd_supply_registers (core_reg_sect); + break; + + default: + /* Don't know what kind of register request this is; just ignore it. */ + break; + } +} + +static struct core_fns sh_nbsd_core_fns = +{ + bfd_target_unknown_flavour, /* core_flavour */ + default_check_format, /* check_format */ + default_core_sniffer, /* core_sniffer */ + fetch_core_registers, /* core_read_registers */ + NULL /* next */ +}; + +static struct core_fns sh_nbsd_elfcore_fns = +{ + bfd_target_elf_flavour, /* core_flavour */ + default_check_format, /* check_format */ + default_core_sniffer, /* core_sniffer */ + fetch_elfcore_registers, /* core_read_registers */ + NULL /* next */ +}; + +static void +sh_nbsd_init_abi (struct gdbarch_info info, + struct gdbarch *gdbarch) +{ + set_solib_svr4_fetch_link_map_offsets (gdbarch, + sh_nbsd_solib_svr4_fetch_link_map_offsets); +} + +void +_initialize_sh_nbsd_tdep (void) +{ + add_core_fns (&sh_nbsd_core_fns); + add_core_fns (&sh_nbsd_elfcore_fns); + + sh_gdbarch_register_os_abi (SH_OSABI_NETBSD_ELF, sh_nbsd_init_abi); +} diff --git a/gdb/shnbsd-tdep.h b/gdb/shnbsd-tdep.h new file mode 100644 index 00000000000..ede2f93b831 --- /dev/null +++ b/gdb/shnbsd-tdep.h @@ -0,0 +1,31 @@ +/* Target-dependent definitions for SuperH running NetBSD, for GDB. + Copyright 2002 Free Software Foundation, Inc. + Contributed by Wasabi Systems, 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef SH_NBSD_TDEP_H +#define SH_NBSD_TDEP_H + +void sh_nbsd_supply_registers (char *); +void sh_nbsd_supply_register (char *, int); + +void sh_nbsd_fill_registers (char *); +void sh_nbsd_fill_register (char *, int); + +#endif /* SH_NBSD_TDEP_H */ -- cgit v1.2.1