X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fppc-fbsd-nat.c;h=648f628cf7eaa2737204be04266b38368f091d8e;hb=b61121178ec07f9da1242e439fe1a23a314ad30e;hp=6eed99869ff6b0ec714ed8eb89dd2dd56dae0cd7;hpb=03b62bbbce3dc5f15131d9e78f77d035cd1cffb3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ppc-fbsd-nat.c b/gdb/ppc-fbsd-nat.c index 6eed99869f..648f628cf7 100644 --- a/gdb/ppc-fbsd-nat.c +++ b/gdb/ppc-fbsd-nat.c @@ -1,6 +1,6 @@ /* Native-dependent code for PowerPC's running FreeBSD, for GDB. - Copyright (C) 2013-2016 Free Software Foundation, Inc. + Copyright (C) 2013-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -37,6 +37,14 @@ #include "inf-ptrace.h" #include "bsd-kvm.h" +struct ppc_fbsd_nat_target final : public fbsd_nat_target +{ + void fetch_registers (struct regcache *, int) override; + void store_registers (struct regcache *, int) override; +}; + +static ppc_fbsd_nat_target the_ppc_fbsd_nat_target; + /* Fill GDB's register array with the general-purpose register values in *GREGSETP. */ @@ -115,25 +123,23 @@ getfpregs_supplies (struct gdbarch *gdbarch, int regno) /* Fetch register REGNO from the child process. If REGNO is -1, do it for all registers. */ -static void -ppcfbsd_fetch_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) +void +ppc_fbsd_nat_target::fetch_registers (struct regcache *regcache, int regno) { gdb_gregset_t regs; + pid_t pid = regcache->ptid ().lwp (); - if (ptrace (PT_GETREGS, ptid_get_lwp (inferior_ptid), - (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); supply_gregset (regcache, ®s); - if (regno == -1 || getfpregs_supplies (get_regcache_arch (regcache), regno)) + if (regno == -1 || getfpregs_supplies (regcache->arch (), regno)) { const struct regset *fpregset = ppc_fbsd_fpregset (); gdb_fpregset_t fpregs; - if (ptrace (PT_GETFPREGS, ptid_get_lwp (inferior_ptid), - (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get FP registers")); ppc_supply_fpregset (fpregset, regcache, regno, &fpregs, sizeof fpregs); @@ -143,34 +149,30 @@ ppcfbsd_fetch_inferior_registers (struct target_ops *ops, /* Store register REGNO back into the child process. If REGNO is -1, do this for all registers. */ -static void -ppcfbsd_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) +void +ppc_fbsd_nat_target::store_registers (struct regcache *regcache, int regno) { gdb_gregset_t regs; + pid_t pid = regcache->ptid ().lwp (); - if (ptrace (PT_GETREGS, ptid_get_lwp (inferior_ptid), - (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); fill_gregset (regcache, ®s, regno); - if (ptrace (PT_SETREGS, ptid_get_lwp (inferior_ptid), - (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't write registers")); - if (regno == -1 || getfpregs_supplies (get_regcache_arch (regcache), regno)) + if (regno == -1 || getfpregs_supplies (regcache->arch (), regno)) { gdb_fpregset_t fpregs; - if (ptrace (PT_GETFPREGS, ptid_get_lwp (inferior_ptid), - (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get FP registers")); fill_fpregset (regcache, &fpregs, regno); - if (ptrace (PT_SETFPREGS, ptid_get_lwp (inferior_ptid), - (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't set FP registers")); } } @@ -182,7 +184,7 @@ ppcfbsd_store_inferior_registers (struct target_ops *ops, static int ppcfbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); int i, regnum; @@ -190,29 +192,19 @@ ppcfbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb) if (pcb->pcb_sp == 0) return 0; - regcache_raw_supply (regcache, gdbarch_sp_regnum (gdbarch), &pcb->pcb_sp); - regcache_raw_supply (regcache, tdep->ppc_cr_regnum, &pcb->pcb_cr); - regcache_raw_supply (regcache, tdep->ppc_lr_regnum, &pcb->pcb_lr); + regcache->raw_supply (gdbarch_sp_regnum (gdbarch), &pcb->pcb_sp); + regcache->raw_supply (tdep->ppc_cr_regnum, &pcb->pcb_cr); + regcache->raw_supply (tdep->ppc_lr_regnum, &pcb->pcb_lr); for (i = 0, regnum = tdep->ppc_gp0_regnum + 14; i < 20; i++, regnum++) - regcache_raw_supply (regcache, regnum, &pcb->pcb_context[i]); + regcache->raw_supply (regnum, &pcb->pcb_context[i]); return 1; } -/* Provide a prototype to silence -Wmissing-prototypes. */ - -void _initialize_ppcfbsd_nat (void); - void _initialize_ppcfbsd_nat (void) { - struct target_ops *t; - - /* Add in local overrides. */ - t = inf_ptrace_target (); - t->to_fetch_registers = ppcfbsd_fetch_inferior_registers; - t->to_store_registers = ppcfbsd_store_inferior_registers; - fbsd_nat_add_target (t); + add_inf_child_target (&the_ppc_fbsd_nat_target); /* Support debugging kernel virtual memory images. */ bsd_kvm_add_target (ppcfbsd_supply_pcb);