X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fmips-nbsd-nat.c;h=e942f9dc6b5b37e8bf19853c53df9b6955585fac;hb=401e101e0274d401e90e50cd8280a9ff36006477;hp=b7c19dc85f08d2ec43bc30aab8b47419dc661e6d;hpb=61baf725eca99af2569262d10aca03dcde2698f6;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/mips-nbsd-nat.c b/gdb/mips-nbsd-nat.c index b7c19dc85f..e942f9dc6b 100644 --- a/gdb/mips-nbsd-nat.c +++ b/gdb/mips-nbsd-nat.c @@ -1,6 +1,6 @@ /* Native-dependent code for MIPS systems running NetBSD. - Copyright (C) 2000-2017 Free Software Foundation, Inc. + Copyright (C) 2000-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -30,6 +30,14 @@ #include "mips-nbsd-tdep.h" #include "inf-ptrace.h" +class mips_nbsd_nat_target final : public inf_ptrace_target +{ + void fetch_registers (struct regcache *, int) override; + void store_registers (struct regcache *, int) override; +}; + +static mips_nbsd_nat_target the_mips_nbsd_nat_target; + /* Determine if PT_GETREGS fetches this register. */ static int getregs_supplies (struct gdbarch *gdbarch, int regno) @@ -38,17 +46,17 @@ getregs_supplies (struct gdbarch *gdbarch, int regno) && (regno) <= gdbarch_pc_regnum (gdbarch)); } -static void -mipsnbsd_fetch_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) +void +mips_nbsd_nat_target::fetch_registers (struct regcache *regcache, int regno) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + pid_t pid = regcache->ptid ().pid (); + + struct gdbarch *gdbarch = regcache->arch (); if (regno == -1 || getregs_supplies (gdbarch, regno)) { struct reg regs; - if (ptrace (PT_GETREGS, ptid_get_pid (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")); mipsnbsd_supply_reg (regcache, (char *) ®s, regno); @@ -57,35 +65,33 @@ mipsnbsd_fetch_inferior_registers (struct target_ops *ops, } if (regno == -1 - || regno >= gdbarch_fp0_regnum (get_regcache_arch (regcache))) + || regno >= gdbarch_fp0_regnum (regcache->arch ())) { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, ptid_get_pid (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 floating point status")); mipsnbsd_supply_fpreg (regcache, (char *) &fpregs, regno); } } -static void -mipsnbsd_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) +void +mips_nbsd_nat_target::store_registers (struct regcache *regcache, int regno) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + pid_t pid = regcache->ptid ().pid (); + + struct gdbarch *gdbarch = regcache->arch (); if (regno == -1 || getregs_supplies (gdbarch, regno)) { struct reg regs; - if (ptrace (PT_GETREGS, ptid_get_pid (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")); mipsnbsd_fill_reg (regcache, (char *) ®s, regno); - if (ptrace (PT_SETREGS, ptid_get_pid (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) @@ -93,33 +99,22 @@ mipsnbsd_store_inferior_registers (struct target_ops *ops, } if (regno == -1 - || regno >= gdbarch_fp0_regnum (get_regcache_arch (regcache))) + || regno >= gdbarch_fp0_regnum (regcache->arch ())) { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, ptid_get_pid (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 floating point status")); mipsnbsd_fill_fpreg (regcache, (char *) &fpregs, regno); - if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't write floating point status")); } } - - -/* Provide a prototype to silence -Wmissing-prototypes. */ -void _initialize_mipsnbsd_nat (void); void _initialize_mipsnbsd_nat (void) { - struct target_ops *t; - - t = inf_ptrace_target (); - t->to_fetch_registers = mipsnbsd_fetch_inferior_registers; - t->to_store_registers = mipsnbsd_store_inferior_registers; - add_target (t); + add_inf_child_target (&the_mips_nbsd_nat_target); }