Makefiles: Flatten and sort file lists
[deliverable/binutils-gdb.git] / gdb / ppcobsd-nat.c
index f520450d2c5a1dbad3616a28fcc577988c5cefcd..c8e82c38799629cf5f491b3f00eb24b9c6bedab9 100644 (file)
@@ -1,12 +1,12 @@
 /* Native-dependent code for OpenBSD/powerpc.
 
-   Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2004-2016 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
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 #include "gdbcore.h"
 #include "inferior.h"
 #include "regcache.h"
 
-#include "gdb_assert.h"
-#include <stddef.h>
 #include <sys/types.h>
 #include <sys/ptrace.h>
 #include <sys/signal.h>
@@ -36,6 +32,7 @@
 #include "ppc-tdep.h"
 #include "ppcobsd-tdep.h"
 #include "inf-ptrace.h"
+#include "obsd-nat.h"
 #include "bsd-kvm.h"
 
 /* OpenBSD/powerpc didn't have PT_GETFPREGS/PT_SETFPREGS until release
@@ -47,9 +44,9 @@
 /* Returns true if PT_GETFPREGS fetches this register.  */
 
 static int
-getfpregs_supplies (int regnum)
+getfpregs_supplies (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
   /* FIXME: jimb/2004-05-05: Some PPC variants don't have floating
      point registers.  Traditionally, GDB's register set has still
@@ -61,7 +58,7 @@ getfpregs_supplies (int regnum)
      It's not clear to me how best to update this code, so this assert
      will alert the first person to encounter the NetBSD/E500
      combination to the problem.  */
-  gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
+  gdb_assert (ppc_floating_point_unit_p (gdbarch));
 
   return ((regnum >= tdep->ppc_fp0_regnum
            && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs)
@@ -74,31 +71,33 @@ getfpregs_supplies (int regnum)
    for all registers.  */
 
 static void
-ppcobsd_fetch_registers (int regnum)
+ppcobsd_fetch_registers (struct target_ops *ops,
+                        struct regcache *regcache, int regnum)
 {
   struct reg regs;
 
-  if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
+  if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
              (PTRACE_TYPE_ARG3) &regs, 0) == -1)
     perror_with_name (_("Couldn't get registers"));
 
-  ppc_supply_gregset (&ppcobsd_gregset, current_regcache, -1,
+  ppc_supply_gregset (&ppcobsd_gregset, regcache, -1,
                      &regs, sizeof regs);
 #ifndef PT_GETFPREGS
-  ppc_supply_fpregset (&ppcobsd_gregset, current_regcache, -1,
+  ppc_supply_fpregset (&ppcobsd_gregset, regcache, -1,
                       &regs, sizeof regs);
 #endif
 
 #ifdef PT_GETFPREGS
-  if (regnum == -1 || getfpregs_supplies (regnum))
+  if (regnum == -1
+      || getfpregs_supplies (get_regcache_arch (regcache), regnum))
     {
       struct fpreg fpregs;
 
-      if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
+      if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
                  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
        perror_with_name (_("Couldn't get floating point status"));
 
-      ppc_supply_fpregset (&ppcobsd_fpregset, current_regcache, -1,
+      ppc_supply_fpregset (&ppcobsd_fpregset, regcache, -1,
                           &fpregs, sizeof fpregs);
     }
 #endif
@@ -108,38 +107,40 @@ ppcobsd_fetch_registers (int regnum)
    this for all registers.  */
 
 static void
-ppcobsd_store_registers (int regnum)
+ppcobsd_store_registers (struct target_ops *ops,
+                        struct regcache *regcache, int regnum)
 {
   struct reg regs;
 
-  if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
+  if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
              (PTRACE_TYPE_ARG3) &regs, 0) == -1)
     perror_with_name (_("Couldn't get registers"));
 
-  ppc_collect_gregset (&ppcobsd_gregset, current_regcache,
+  ppc_collect_gregset (&ppcobsd_gregset, regcache,
                       regnum, &regs, sizeof regs);
 #ifndef PT_GETFPREGS
-  ppc_collect_fpregset (&ppcobsd_gregset, current_regcache,
+  ppc_collect_fpregset (&ppcobsd_gregset, regcache,
                        regnum, &regs, sizeof regs);
 #endif
 
-  if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
+  if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid),
              (PTRACE_TYPE_ARG3) &regs, 0) == -1)
     perror_with_name (_("Couldn't write registers"));
 
 #ifdef PT_GETFPREGS
-  if (regnum == -1 || getfpregs_supplies (regnum))
+  if (regnum == -1
+      || getfpregs_supplies (get_regcache_arch (regcache), regnum))
     {
       struct fpreg fpregs;
 
-      if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
+      if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
                  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
        perror_with_name (_("Couldn't get floating point status"));
 
-      ppc_collect_fpregset (&ppcobsd_fpregset, current_regcache,
+      ppc_collect_fpregset (&ppcobsd_fpregset, regcache,
                            regnum, &fpregs, sizeof fpregs);
 
-      if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
+      if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid),
                  (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
        perror_with_name (_("Couldn't write floating point status"));
     }
@@ -150,7 +151,8 @@ ppcobsd_store_registers (int regnum)
 static int
 ppcobsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   struct switchframe sf;
   struct callframe cf;
   int i, regnum;
@@ -169,14 +171,14 @@ ppcobsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
     return 0;
 
   read_memory (pcb->pcb_sp, (gdb_byte *)&sf, sizeof sf);
-  regcache_raw_supply (regcache, SP_REGNUM, &sf.sp);
+  regcache_raw_supply (regcache, gdbarch_sp_regnum (gdbarch), &sf.sp);
   regcache_raw_supply (regcache, tdep->ppc_cr_regnum, &sf.cr);
   regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + 2, &sf.fixreg2);
   for (i = 0, regnum = tdep->ppc_gp0_regnum + 13; i < 19; i++, regnum++)
     regcache_raw_supply (regcache, regnum, &sf.fixreg[i]);
 
   read_memory (sf.sp, (gdb_byte *)&cf, sizeof cf);
-  regcache_raw_supply (regcache, PC_REGNUM, &cf.lr);
+  regcache_raw_supply (regcache, gdbarch_pc_regnum (gdbarch), &cf.lr);
   regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + 30, &cf.r30);
   regcache_raw_supply (regcache, tdep->ppc_gp0_regnum + 31, &cf.r31);
 
@@ -196,10 +198,12 @@ _initialize_ppcobsd_nat (void)
   t = inf_ptrace_target ();
   t->to_fetch_registers = ppcobsd_fetch_registers;
   t->to_store_registers = ppcobsd_store_registers;
-  add_target (t);
+  obsd_add_target (t);
 
   /* General-purpose registers.  */
   ppcobsd_reg_offsets.r0_offset = offsetof (struct reg, gpr);
+  ppcobsd_reg_offsets.gpr_size = 4;
+  ppcobsd_reg_offsets.xr_size = 4;
   ppcobsd_reg_offsets.pc_offset = offsetof (struct reg, pc);
   ppcobsd_reg_offsets.ps_offset = offsetof (struct reg, ps);
   ppcobsd_reg_offsets.cr_offset = offsetof (struct reg, cnd);
@@ -214,6 +218,7 @@ _initialize_ppcobsd_nat (void)
 #ifdef PT_GETFPREGS
   ppcobsd_fpreg_offsets.f0_offset = offsetof (struct fpreg, fpr);
   ppcobsd_fpreg_offsets.fpscr_offset = offsetof (struct fpreg, fpscr);
+  ppcobsd_fpreg_offsets.fpscr_size = 4;
 #endif
 
   /* AltiVec registers.  */
This page took 0.026327 seconds and 4 git commands to generate.