diff options
author | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1998-03-29 22:18:10 +0000 |
---|---|---|
committer | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1998-03-29 22:18:10 +0000 |
commit | e67d583556a72a00ae4703b79321b01cf0e166f9 (patch) | |
tree | 294574e30a9ca6c051c5660df5d5de62b6bf7d3a /gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c | |
parent | 82d7b263d3ef037532ae14b08ba6e5d1297430e8 (diff) |
Adapt the newer of our GDB versions to a.out ports. The main part of this
commit comes from NetBSD. Also, the kernel debugging mode is a bit different
but you will notice when you type gdb -k because it documents the difference
Diffstat (limited to 'gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c')
-rw-r--r-- | gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c b/gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c new file mode 100644 index 00000000000..b5cac264929 --- /dev/null +++ b/gnu/usr.bin/binutils/gdb/vaxnbsd-nat.c @@ -0,0 +1,128 @@ +/* Functions specific to running gdb native on a VAX running NetBSD + Copyright 1989, 1992, 1993, 1994, 1996 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 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 <sys/types.h> +#include <sys/ptrace.h> +#include <machine/reg.h> +#include <machine/frame.h> +#include <machine/pcb.h> + +#include "defs.h" +#include "inferior.h" +#include "target.h" +#include "gdbcore.h" + +void +fetch_inferior_registers (regno) + int regno; +{ + struct reg inferior_registers; + + ptrace (PT_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers, 0); + memcpy (®isters[REGISTER_BYTE (0)], &inferior_registers, + sizeof(inferior_registers)); + + registers_fetched (); +} + +void +store_inferior_registers (regno) + int regno; +{ + struct reg inferior_registers; + + memcpy (&inferior_registers, ®isters[REGISTER_BYTE (0)], + sizeof(inferior_registers)); + ptrace (PT_SETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers, 0); +} + + +/* XXX - Add this to machine/regs.h instead? */ +struct md_core { + struct reg intreg; + /* struct fpreg freg; XXX */ +}; + +static void +fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) + char *core_reg_sect; + unsigned core_reg_size; + int which; + unsigned int reg_addr; /* Unused in this version */ +{ + struct md_core *core_reg; + + core_reg = (struct md_core *)core_reg_sect; + + /* We get everything from the .reg section. */ + if (which != 0) + return; + + if (core_reg_size < sizeof(*core_reg)) { + fprintf_unfiltered (gdb_stderr, "Couldn't read regs from core file\n"); + return; + } + + /* Integer registers */ + memcpy(®isters[REGISTER_BYTE (0)], + &core_reg->intreg, sizeof(struct reg)); + + registers_fetched (); +} + +/* Register that we are able to handle vaxnbsd core file formats. + FIXME: is this really bfd_target_unknown_flavour? */ + +static struct core_fns nat_core_fns = +{ + bfd_target_unknown_flavour, + fetch_core_registers, + NULL +}; + +void +_initialize_vaxnbsd_nat () +{ + add_core_fns (&nat_core_fns); +} + + +/* + * kernel_u_size() is not helpful on NetBSD because + * the "u" struct is NOT in the core dump file. + */ + +#ifdef FETCH_KCORE_REGISTERS +/* + * Get registers from a kernel crash dump or live kernel. + * Called by kcore-nbsd.c:get_kcore_registers(). + */ +void +fetch_kcore_registers (pcb) + struct pcb *pcb; +{ + + printf("XXX: fetch_kcore_registers\n"); + + /* The kernel does not use the FPU, so ignore it. */ + registers_fetched (); +} +#endif /* FETCH_KCORE_REGISTERS */ |