diff options
-rw-r--r-- | gdb/Makefile.in | 9 | ||||
-rw-r--r-- | gdb/alphanbsd-nat.c | 127 | ||||
-rw-r--r-- | gdb/alphanbsd-tdep.c | 94 | ||||
-rw-r--r-- | gdb/config/alpha/nbsd.mh | 2 |
4 files changed, 98 insertions, 134 deletions
diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 6af6fe9..4ff3105 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1178,7 +1178,7 @@ unexport CHILLFLAGS CHILL_LIB CHILL_FOR_TARGET : ALLDEPFILES = 29k-share/udi/udip2soc.c 29k-share/udi/udr.c \ 29k-share/udi/udi2go32.c \ a29k-tdep.c a68v-nat.c \ - alpha-nat.c alphabsd-nat.c alphanbsd-nat.c \ + alpha-nat.c alphabsd-nat.c \ alpha-tdep.c alpha-linux-tdep.c alphabsd-tdep.c alphanbsd-tdep.c \ alpha-osf1-tdep.c alphafbsd-tdep.c \ arm-linux-nat.c arm-linux-tdep.c arm-tdep.c \ @@ -1248,9 +1248,6 @@ alpha-nat.o: alpha-nat.c $(defs_h) $(gdbcore_h) $(inferior_h) $(target_h) \ alphabsd-nat.o: alphabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ alpha-tdep.h alphabsd-tdep.h -alphanbsd-nat.o: alphanbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ - $(gdbcore_h) alpha-tdep.h alphabsd-tdep.h - alpha-tdep.o: alpha-tdep.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) \ $(inferior_h) $(symtab_h) $(dis_asm_h) $(gdb_string_h) $(linespec_h) \ $(regcache_h) $(doublest_h) $(BFD_SRC)/elf-bfd.h alpha-tdep.h @@ -1263,8 +1260,8 @@ alphabsd-tdep.o: alphabsd-tdep.c $(defs_h) $(regcache_h) alphabsd-tdep.h alphafbsd-tdep.o: alphafbsd-tdep.c $(defs_h) $(value_h) alpha-tdep.h -alphanbsd-tdep.o: alphanbsd-tdep.c $(defs_h) $(gdbcore_h) $(value_h) \ - alpha-tdep.h +alphanbsd-tdep.o: alphanbsd-tdep.c $(defs_h) $(gdbcore_h) $(regcache_h) \ + $(value_h) alpha-tdep.h alphabsd-tdep.h annotate.o: annotate.c $(defs_h) $(annotate_h) $(value_h) $(target_h) $(gdbtypes_h) diff --git a/gdb/alphanbsd-nat.c b/gdb/alphanbsd-nat.c deleted file mode 100644 index 61e24fd..0000000 --- a/gdb/alphanbsd-nat.c +++ /dev/null @@ -1,127 +0,0 @@ -/* Native-dependent code for Alpha NetBSD. - 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 <sys/types.h> -#include <machine/reg.h> -#include <machine/frame.h> -#include <machine/pcb.h> -#include "gdbcore.h" -#include "regcache.h" - -#include "alpha-tdep.h" -#include "alphabsd-tdep.h" - -static void -fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which, - CORE_ADDR ignore) -{ - struct md_coredump *core_reg; - char *regs; - int regno; - - /* Table to map a gdb register number to a trapframe register index. */ - static const int regmap[] = - { - FRAME_V0, FRAME_T0, FRAME_T1, FRAME_T2, - FRAME_T3, FRAME_T4, FRAME_T5, FRAME_T6, - FRAME_T7, FRAME_S0, FRAME_S1, FRAME_S2, - FRAME_S3, FRAME_S4, FRAME_S5, FRAME_S6, - FRAME_A0, FRAME_A1, FRAME_A2, FRAME_A3, - FRAME_A4, FRAME_A5, FRAME_T8, FRAME_T9, - FRAME_T10, FRAME_T11, FRAME_RA, FRAME_T12, - FRAME_AT, FRAME_GP, FRAME_SP - }; - - /* We get everything from one section. */ - if (which != 0) - return; - - core_reg = (struct md_coredump *) core_reg_sect; - regs = (char *) &core_reg->md_tf; - - if (core_reg_size < sizeof (*core_reg)) - { - warning ("Wrong size register set in core file."); - return; - } - - /* Integer registers. */ - for (regno = 0; regno < ALPHA_ZERO_REGNUM; regno++) - supply_register (regno, regs + (regmap[regno] * 8)); - supply_register (ALPHA_ZERO_REGNUM, NULL); - supply_register (FP_REGNUM, NULL); - supply_register (PC_REGNUM, regs + (FRAME_PC * 8)); - - /* Floating point registers. */ - alphabsd_supply_fpreg ((char *) &core_reg->md_fpstate, -1); -} - -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 - alphabsd_supply_reg (core_reg_sect, -1); - break; - - case 2: /* Floating point registers. */ - if (core_reg_size != SIZEOF_STRUCT_FPREG) - warning ("Wrong size FP register set in core file."); - else - alphabsd_supply_fpreg (core_reg_sect, -1); - break; - - default: - /* Don't know what kind of register request this is; just ignore it. */ - break; - } -} - -static struct core_fns alphanbsd_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 alphanbsd_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 */ -}; - -void -_initialize_alphanbsd_nat (void) -{ - add_core_fns (&alphanbsd_core_fns); - add_core_fns (&alphanbsd_elfcore_fns); -} diff --git a/gdb/alphanbsd-tdep.c b/gdb/alphanbsd-tdep.c index 33c3cd7..65641ec 100644 --- a/gdb/alphanbsd-tdep.c +++ b/gdb/alphanbsd-tdep.c @@ -21,10 +21,101 @@ #include "defs.h" #include "gdbcore.h" +#include "regcache.h" #include "value.h" #include "solib-svr4.h" #include "alpha-tdep.h" +#include "alphabsd-tdep.h" + +static void +fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which, + CORE_ADDR ignore) +{ + char *regs, *fpregs; + int regno; + + /* Table to map a gdb register number to a trapframe register index. */ + static const int regmap[] = + { + 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15, + 30, 31, 32, 16, + 17, 18, 19, 20, + 21, 22, 23, 24, + 25, 29, 26 + }; +#define SIZEOF_TRAPFRAME (33 * 8) + + /* We get everything from one section. */ + if (which != 0) + return; + + regs = core_reg_sect; + fpregs = core_reg_sect + SIZEOF_TRAPFRAME; + + if (core_reg_size < (SIZEOF_TRAPFRAME + SIZEOF_STRUCT_FPREG)) + { + warning ("Wrong size register set in core file."); + return; + } + + /* Integer registers. */ + for (regno = 0; regno < ALPHA_ZERO_REGNUM; regno++) + supply_register (regno, regs + (regmap[regno] * 8)); + supply_register (ALPHA_ZERO_REGNUM, NULL); + supply_register (FP_REGNUM, NULL); + supply_register (PC_REGNUM, regs + (28 * 8)); + + /* Floating point registers. */ + alphabsd_supply_fpreg (fpregs, -1); +} + +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 + alphabsd_supply_reg (core_reg_sect, -1); + break; + + case 2: /* Floating point registers. */ + if (core_reg_size != SIZEOF_STRUCT_FPREG) + warning ("Wrong size FP register set in core file."); + else + alphabsd_supply_fpreg (core_reg_sect, -1); + break; + + default: + /* Don't know what kind of register request this is; just ignore it. */ + break; + } +} + +static struct core_fns alphanbsd_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 alphanbsd_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 */ +}; /* Fetch (and possibly build) an appropriate link_map_offsets structure for NetBSD/alpha targets using the struct offsets @@ -154,4 +245,7 @@ void _initialize_alphanbsd_tdep (void) { alpha_gdbarch_register_os_abi (ALPHA_ABI_NETBSD, alphanbsd_init_abi); + + add_core_fns (&alphanbsd_core_fns); + add_core_fns (&alphanbsd_elfcore_fns); } diff --git a/gdb/config/alpha/nbsd.mh b/gdb/config/alpha/nbsd.mh index 4d7664b..bc1ec25 100644 --- a/gdb/config/alpha/nbsd.mh +++ b/gdb/config/alpha/nbsd.mh @@ -1,4 +1,4 @@ # Host: Alpha running NetBSD NAT_CLIBS= -NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o alphabsd-nat.o alphanbsd-nat.o +NATDEPFILES= infptrace.o inftarg.o fork-child.o corelow.o alphabsd-nat.o NAT_FILE= nm-nbsd.h |