/* 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 #include #include #include #include #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); registers_fetched (); } /* 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 */