diff options
author | Mark Kettenis <kettenis@gnu.org> | 2006-05-12 20:53:15 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2006-05-12 20:53:15 +0000 |
commit | def18405fbc42d460b2282b273b8d597eff96ebf (patch) | |
tree | a93c8a431295ba58684423e240d898a3287a2b8c /gdb/ppcnbsd-nat.c | |
parent | f6b66e9075cc6e8355f5eb50e2e122565c867098 (diff) | |
download | gdb-def18405fbc42d460b2282b273b8d597eff96ebf.zip gdb-def18405fbc42d460b2282b273b8d597eff96ebf.tar.gz gdb-def18405fbc42d460b2282b273b8d597eff96ebf.tar.bz2 |
* ppcnbsd-tdep.h: Update copyright year. Include <stddef.h>
(ppcnbsd_supply_reg, ppcnbsd_fill_reg, ppcnbsd_supply_fpreg)
(ppcnbsd_fill_fpreg): Remove prototypes.
(struct regset): Add forward declaration.
(ppcnbsd_gregset, ppcnbsd_fpregset): Extern declarations.
* ppcnbsd-tdep.c: Update copyright year. Include "gdbtypes.h",
"regset.h" and "gdb_string.h". Don't include "breakpoint.h",
"value.h", target.h and nbsd-tdep.h". Reorder includes.
(REG_FIXREG_OFFSET, REG_LR_OFFSET, REG_CR_OFFSET, REG_XER_OFFSET)
(REG_CTR_OFFSET, REG_PC_OFFSET, SIZEOF_STRUCT_REG)
(FPREG_FPR_OFFSET, FPREG_FPSCR_OFFSET, SIZEOF_STRUCT_FPREG):
Remove macros.
(ppcnbsd_supply_reg, ppcnbsd_fill_reg, ppcnbsd_supply_fpreg)
(ppcnbsd_fill_fpreg): Remove functions.
(fetch_core_registers, fetch_elfcore_registers): Remove functions.
(ppcnbsd_core_fns, ppcnbsd_elfcore_fns): Remove variables.
(ppcnbsd_reg_offsets): New variable.
(ppcnbsd_gregset, ppcnbsd_fpregset): New variables.
(ppcnbsd_sigtramp_cache_init): Deal with new signal trampoline
introduced in NetBSD 2.0.
(ppcnbsd_sigtramp): Provide complete signal trampoline.
(ppcnbsd2_sigtramp): New variable.
(ppcnbsd_init_abi): Set svr4_fetch_link_map_offsets to
svr4_ilp32_fetch_link_map_offsets. Set regset_from_core_section.
Add ppcnbs2_sigtramp unwinder.
(_initialize_ppcnbsd_tdep): Don't use deprecated_add_core_fns.
Initialize ppcnbsd_reg_offsets.
* ppcnbsd-nat.c: Update copyright year. Reorder includes.
(getregs_supplies): Use regnum instead of regno.
(getfpregs_supplies): Likewise.
(ppcnbsd_fetch_inferior_registers): Likewise. Call
ppc_supply_gregset and ppc_suppply_fpregset instead of
ppcnbsd_supply_reg and ppcnbsd_supply_fpreg
(ppcnbsd_store_inferior_registers): Likewise. Call
ppc_collect_gregset and ppc_collect_fpregset instead of
ppcnbsd_fill_reg and ppcnbsd_fill_fpreg.
(ppcnbsd_supply_pcb): Use `gdb_byte *' instead of `char *'.
(_initialize_ppcnbsd_nat): Add some whitespace.
* Makefile.in (ppcnbsd-nat.o, ppcnbsd-tdep.o): Update dependencies.
* config/powerpc/nbsd.mh (NATDEPFILES): Remove infptrace.o.
(NAT_FILE): Remove.
* config/powerpc/nbsd.mt (TDEPFILES): Remove nbsd-tdep.o.
Diffstat (limited to 'gdb/ppcnbsd-nat.c')
-rw-r--r-- | gdb/ppcnbsd-nat.c | 81 |
1 files changed, 42 insertions, 39 deletions
diff --git a/gdb/ppcnbsd-nat.c b/gdb/ppcnbsd-nat.c index ca19ca0..a200505 100644 --- a/gdb/ppcnbsd-nat.c +++ b/gdb/ppcnbsd-nat.c @@ -1,5 +1,7 @@ -/* Native-dependent code for PowerPC's running NetBSD, for GDB. - Copyright (C) 2002, 2004 Free Software Foundation, Inc. +/* Native-dependent code for NetBSD/powerpc. + + Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc. + Contributed by Wasabi Systems, Inc. This file is part of GDB. @@ -26,35 +28,37 @@ #include <machine/pcb.h> #include "defs.h" -#include "inferior.h" -#include "gdb_assert.h" #include "gdbcore.h" +#include "inferior.h" #include "regcache.h" -#include "bsd-kvm.h" + +#include "gdb_assert.h" #include "ppc-tdep.h" #include "ppcnbsd-tdep.h" - +#include "bsd-kvm.h" #include "inf-ptrace.h" /* Returns true if PT_GETREGS fetches this register. */ + static int -getregs_supplies (int regno) +getregs_supplies (int regnum) { struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); - return ((regno >= tdep->ppc_gp0_regnum - && regno < tdep->ppc_gp0_regnum + ppc_num_gprs) - || regno == tdep->ppc_lr_regnum - || regno == tdep->ppc_cr_regnum - || regno == tdep->ppc_xer_regnum - || regno == tdep->ppc_ctr_regnum - || regno == PC_REGNUM); + return ((regnum >= tdep->ppc_gp0_regnum + && regnum < tdep->ppc_gp0_regnum + ppc_num_gprs) + || regnum == tdep->ppc_lr_regnum + || regnum == tdep->ppc_cr_regnum + || regnum == tdep->ppc_xer_regnum + || regnum == tdep->ppc_ctr_regnum + || regnum == PC_REGNUM); } /* Like above, but for PT_GETFPREGS. */ + static int -getfpregs_supplies (int regno) +getfpregs_supplies (int regnum) { struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); @@ -70,15 +74,15 @@ getfpregs_supplies (int regno) combination to the problem. */ gdb_assert (ppc_floating_point_unit_p (current_gdbarch)); - return ((regno >= tdep->ppc_fp0_regnum - && regno < tdep->ppc_fp0_regnum + ppc_num_fprs) - || regno == tdep->ppc_fpscr_regnum); + return ((regnum >= tdep->ppc_fp0_regnum + && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs) + || regnum == tdep->ppc_fpscr_regnum); } static void -ppcnbsd_fetch_inferior_registers (int regno) +ppcnbsd_fetch_inferior_registers (int regnum) { - if (regno == -1 || getregs_supplies (regno)) + if (regnum == -1 || getregs_supplies (regnum)) { struct reg regs; @@ -86,12 +90,11 @@ ppcnbsd_fetch_inferior_registers (int regno) (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); - ppcnbsd_supply_reg ((char *) ®s, regno); - if (regno != -1) - return; + ppc_supply_gregset (&ppcnbsd_gregset, current_regcache, + regnum, ®s, sizeof regs); } - if (regno == -1 || getfpregs_supplies (regno)) + if (regnum == -1 || getfpregs_supplies (regnum)) { struct fpreg fpregs; @@ -99,16 +102,15 @@ ppcnbsd_fetch_inferior_registers (int regno) (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get FP registers")); - ppcnbsd_supply_fpreg ((char *) &fpregs, regno); - if (regno != -1) - return; + ppc_supply_fpregset (&ppcnbsd_fpregset, current_regcache, + regnum, &fpregs, sizeof fpregs); } } static void -ppcnbsd_store_inferior_registers (int regno) +ppcnbsd_store_inferior_registers (int regnum) { - if (regno == -1 || getregs_supplies (regno)) + if (regnum == -1 || getregs_supplies (regnum)) { struct reg regs; @@ -116,17 +118,15 @@ ppcnbsd_store_inferior_registers (int regno) (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); - ppcnbsd_fill_reg ((char *) ®s, regno); + ppc_collect_gregset (&ppcnbsd_gregset, current_regcache, + regnum, ®s, sizeof regs); if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't write registers")); - - if (regno != -1) - return; } - if (regno == -1 || getfpregs_supplies (regno)) + if (regnum == -1 || getfpregs_supplies (regnum)) { struct fpreg fpregs; @@ -134,8 +134,9 @@ ppcnbsd_store_inferior_registers (int regno) (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get FP registers")); - ppcnbsd_fill_fpreg ((char *) &fpregs, regno); - + ppc_collect_fpregset (&ppcnbsd_fpregset, current_regcache, + regnum, &fpregs, sizeof fpregs); + if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't set FP registers")); @@ -154,19 +155,19 @@ ppcnbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb) if (pcb->pcb_sp == 0) return 0; - read_memory (pcb->pcb_sp, (char *) &sf, sizeof sf); + read_memory (pcb->pcb_sp, (gdb_byte *)&sf, sizeof sf); regcache_raw_supply (regcache, tdep->ppc_cr_regnum, &sf.cr); regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + 2, &sf.fixreg2); for (i = 0 ; i < 19 ; i++) regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + 13 + i, &sf.fixreg[i]); - read_memory(sf.sp, (char *)&cf, sizeof(cf)); + read_memory(sf.sp, (gdb_byte *)&cf, sizeof(cf)); regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + 30, &cf.r30); regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + 31, &cf.r31); regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + 1, &cf.sp); - read_memory(cf.sp, (char *)&cf, sizeof(cf)); + read_memory(cf.sp, (gdb_byte *)&cf, sizeof(cf)); regcache_raw_supply (regcache, tdep->ppc_lr_regnum, &cf.lr); regcache_raw_supply (regcache, PC_REGNUM, &cf.lr); @@ -180,8 +181,10 @@ void _initialize_ppcnbsd_nat (void) { struct target_ops *t; + /* Support debugging kernel virtual memory images. */ bsd_kvm_add_target (ppcnbsd_supply_pcb); + /* Add in local overrides. */ t = inf_ptrace_target (); t->to_fetch_registers = ppcnbsd_fetch_inferior_registers; |