diff --git a/gnu/dist/gdb/config/powerpc/nm-nbsd.h b/gnu/dist/gdb/config/powerpc/nm-nbsd.h index def816d9b0be..f671237bf3fa 100644 --- a/gnu/dist/gdb/config/powerpc/nm-nbsd.h +++ b/gnu/dist/gdb/config/powerpc/nm-nbsd.h @@ -19,7 +19,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Need to define this before including the common nm-nbsd.h. */ -#define SVR4_SHARED_LIBS +#define SVR4_SHARED_LIBS 1 /* Get generic NetBSD native definitions. */ #include "nm-nbsd.h" diff --git a/gnu/dist/gdb/ppcnbsd-nat.c b/gnu/dist/gdb/ppcnbsd-nat.c new file mode 100644 index 000000000000..529fd75c35e2 --- /dev/null +++ b/gnu/dist/gdb/ppcnbsd-nat.c @@ -0,0 +1,140 @@ +/* NetBSD/powerpc native-dependent code for GDB, the GNU debugger. + Copyright 1986, 1987, 1989, 1991, 1992, 1994, 1995, 1996, 1997 + 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 "defs.h" +#include "inferior.h" +#include "target.h" +#include "gdbcore.h" +#include +#include +#include +#include +#include + +static void +fetch_core_registers PARAMS ((char *, unsigned int, int, CORE_ADDR)); + +void +fetch_inferior_registers (regno) + int regno; +{ + struct reg infreg; + + /* Integer registers */ + ptrace(PT_GETREGS, inferior_pid, (PTRACE_ARG3_TYPE) &infreg, 0); + + memcpy(®isters[REGISTER_BYTE (GP0_REGNUM)], infreg.fixreg, + sizeof(infreg.fixreg)); + *(long *) ®isters[REGISTER_BYTE (PC_REGNUM)] = infreg.pc; + *(long *) ®isters[REGISTER_BYTE (PS_REGNUM)] = 0; /* XXX */ + *(long *) ®isters[REGISTER_BYTE (CR_REGNUM)] = infreg.cr; + *(long *) ®isters[REGISTER_BYTE (LR_REGNUM)] = infreg.lr; + *(long *) ®isters[REGISTER_BYTE (CTR_REGNUM)] = infreg.ctr; + *(long *) ®isters[REGISTER_BYTE (XER_REGNUM)] = infreg.xer; + *(long *) ®isters[REGISTER_BYTE (MQ_REGNUM)] = 0; + + /* Floating point registers */ + memset(®isters[REGISTER_BYTE (FP0_REGNUM)], 0, 8*32); + + registers_fetched (); +} + +void +store_inferior_registers (regno) + int regno; +{ + struct reg infreg; + + /* Integer registers */ + memcpy(infreg.fixreg, ®isters[REGISTER_BYTE (GP0_REGNUM)], + sizeof(infreg.fixreg)); + infreg.pc = *(long *) ®isters[REGISTER_BYTE (PC_REGNUM)]; + infreg.cr = *(long *) ®isters[REGISTER_BYTE (CR_REGNUM)]; + infreg.lr = *(long *) ®isters[REGISTER_BYTE (LR_REGNUM)]; + infreg.ctr = *(long *) ®isters[REGISTER_BYTE (CTR_REGNUM)]; + infreg.xer = *(long *) ®isters[REGISTER_BYTE (XER_REGNUM)]; + + ptrace(PT_SETREGS, inferior_pid, (PTRACE_ARG3_TYPE) &infreg, 0); + + /* Floating point registers */ + /* XXX not yet */ + + registers_fetched (); +} + +static void +fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) + char *core_reg_sect; + unsigned core_reg_size; + int which; + CORE_ADDR reg_addr; /* Unused in this version */ +{ + struct md_coredump *core_reg; + struct trapframe *tf; + struct fpreg *fs; + register int regnum; + + /* We get everything from the .reg section. */ + if (which != 0) + return; + + core_reg = (struct md_coredump *)core_reg_sect; + tf = &core_reg->frame; +#if 0 + fs = &core_reg->md_fpstate; +#endif + + if (core_reg_size < sizeof(*core_reg)) { + fprintf_unfiltered (gdb_stderr, "Couldn't read regs from core file\n"); + return; + } + + /* Integer registers */ + for (regnum = 0; regnum < 32; regnum++) + *(long *) ®isters[REGISTER_BYTE (regnum)] = tf->fixreg[regnum]; + +#if 0 + /* Floating point registers */ + memcpy (®isters[REGISTER_BYTE (FP0_REGNUM)], + &fs->fpr_regs[0], sizeof(fs->fpr_regs)); +#endif + + /* Special registers (PC, LR) */ + *(long *) ®isters[REGISTER_BYTE (PC_REGNUM)] = tf->srr0; + *(long *) ®isters[REGISTER_BYTE (LR_REGNUM)] = tf->lr; + + registers_fetched (); +} + + +/* Register that we are able to handle rs6000 core file formats. */ + +static struct core_fns ppcnbsd_core_fns = +{ + bfd_target_elf_flavour, + fetch_core_registers, + NULL +}; + +void +_initialize_core_ppcnbsd () +{ + add_core_fns (&ppcnbsd_core_fns); +} diff --git a/gnu/usr.bin/gdb/Makefile b/gnu/usr.bin/gdb/Makefile index 30f25b0a52d7..37b765b5c1fb 100644 --- a/gnu/usr.bin/gdb/Makefile +++ b/gnu/usr.bin/gdb/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.31 1999/04/04 19:02:31 eeh Exp $ +# $NetBSD: Makefile,v 1.32 1999/05/03 10:27:23 tsubai Exp $ # for OBJECT_FMT .include @@ -79,7 +79,7 @@ TDEPFILES.mipsel= mips-tdep.c NATDEPFILES.ns32k= ns32knbsd-nat.c TDEPFILES.ns32k= ns32k-tdep.c -NATDEPFILES.powerpc= rs6000-nat.c +NATDEPFILES.powerpc= ppcnbsd-nat.c TDEPFILES.powerpc= rs6000-tdep.c NATDEPFILES.sparc= sparcnbsd-nat.c