Make input_fd be per UI
[deliverable/binutils-gdb.git] / gdb / mips64obsd-nat.c
index eee3e5ea66cd7537400e7b59b705907cdec84a7f..48464642363a41d6edc94103f61716d935b87f48 100644 (file)
@@ -1,12 +1,12 @@
 /* Native-dependent code for OpenBSD/mips64.
 
 /* Native-dependent code for OpenBSD/mips64.
 
-   Copyright 2004 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
 
    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,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,9 +15,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    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.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 #include "inferior.h"
 
 #include "defs.h"
 #include "inferior.h"
 #include <sys/ptrace.h>
 #include <machine/reg.h>
 
 #include <sys/ptrace.h>
 #include <machine/reg.h>
 
+#include "mips-tdep.h"
 #include "inf-ptrace.h"
 #include "inf-ptrace.h"
+#include "obsd-nat.h"
 
 
-#define MIPS64OBSD_NUM_REGS 73
+/* Shorthand for some register numbers used below.  */
+#define MIPS_PC_REGNUM MIPS_EMBED_PC_REGNUM
+#define MIPS_FP0_REGNUM        MIPS_EMBED_FP0_REGNUM
+#define MIPS_FSR_REGNUM MIPS_EMBED_FP0_REGNUM + 32
 
 /* Supply the general-purpose registers stored in GREGS to REGCACHE.  */
 
 
 /* Supply the general-purpose registers stored in GREGS to REGCACHE.  */
 
@@ -40,8 +43,11 @@ mips64obsd_supply_gregset (struct regcache *regcache, const void *gregs)
   const char *regs = gregs;
   int regnum;
 
   const char *regs = gregs;
   int regnum;
 
-  for (regnum = 0; regnum < MIPS64OBSD_NUM_REGS; regnum++)
+  for (regnum = MIPS_ZERO_REGNUM; regnum <= MIPS_PC_REGNUM; regnum++)
     regcache_raw_supply (regcache, regnum, regs + regnum * 8);
     regcache_raw_supply (regcache, regnum, regs + regnum * 8);
+
+  for (regnum = MIPS_FP0_REGNUM; regnum <= MIPS_FSR_REGNUM; regnum++)
+    regcache_raw_supply (regcache, regnum, regs + (regnum + 2) * 8);
 }
 
 /* Collect the general-purpose registers from REGCACHE and store them
 }
 
 /* Collect the general-purpose registers from REGCACHE and store them
@@ -54,11 +60,17 @@ mips64obsd_collect_gregset (const struct regcache *regcache,
   char *regs = gregs;
   int i;
 
   char *regs = gregs;
   int i;
 
-  for (i = 0; i <= MIPS64OBSD_NUM_REGS; i++)
+  for (i = MIPS_ZERO_REGNUM; i <= MIPS_PC_REGNUM; i++)
     {
       if (regnum == -1 || regnum == i)
        regcache_raw_collect (regcache, i, regs + i * 8);
     }
     {
       if (regnum == -1 || regnum == i)
        regcache_raw_collect (regcache, i, regs + i * 8);
     }
+
+  for (i = MIPS_FP0_REGNUM; i <= MIPS_FSR_REGNUM; i++)
+    {
+      if (regnum == -1 || regnum == i)
+       regcache_raw_collect (regcache, i, regs + (i + 2) * 8);
+    }
 }
 \f
 
 }
 \f
 
@@ -66,34 +78,36 @@ mips64obsd_collect_gregset (const struct regcache *regcache,
    for all registers.  */
 
 static void
    for all registers.  */
 
 static void
-mips64obsd_fetch_inferior_registers (int regnum)
+mips64obsd_fetch_inferior_registers (struct target_ops *ops,
+                                    struct regcache *regcache, int regnum)
 {
   struct reg regs;
 
 {
   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)
              (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-    perror_with_name ("Couldn't get registers");
+    perror_with_name (_("Couldn't get registers"));
 
 
-  mips64obsd_supply_gregset (current_regcache, &regs);
+  mips64obsd_supply_gregset (regcache, &regs);
 }
 
 /* Store register REGNUM back into the inferior.  If REGNUM is -1, do
    this for all registers.  */
 
 static void
 }
 
 /* Store register REGNUM back into the inferior.  If REGNUM is -1, do
    this for all registers.  */
 
 static void
-mips64obsd_store_inferior_registers (int regnum)
+mips64obsd_store_inferior_registers (struct target_ops *ops,
+                                    struct regcache *regcache, int regnum)
 {
   struct reg regs;
 
 {
   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)
              (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-    perror_with_name ("Couldn't get registers");
+    perror_with_name (_("Couldn't get registers"));
 
 
-  mips64obsd_collect_gregset (current_regcache, &regs, regnum);
+  mips64obsd_collect_gregset (regcache, &regs, regnum);
 
 
-  if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
+  if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid),
              (PTRACE_TYPE_ARG3) &regs, 0) == -1)
              (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-    perror_with_name ("Couldn't write registers");
+    perror_with_name (_("Couldn't write registers"));
 }
 \f
 
 }
 \f
 
@@ -108,5 +122,5 @@ _initialize_mips64obsd_nat (void)
   t = inf_ptrace_target ();
   t->to_fetch_registers = mips64obsd_fetch_inferior_registers;
   t->to_store_registers = mips64obsd_store_inferior_registers;
   t = inf_ptrace_target ();
   t->to_fetch_registers = mips64obsd_fetch_inferior_registers;
   t->to_store_registers = mips64obsd_store_inferior_registers;
-  add_target (t);
+  obsd_add_target (t);
 }
 }
This page took 0.026049 seconds and 4 git commands to generate.