]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/sparc-nat.c
gdb: add back declarations for _initialize functions
[thirdparty/binutils-gdb.git] / gdb / sparc-nat.c
index 3d936fcc8fc9fec7e14aea8b0cfd65e726ea9295..dff0f5215657c853a5150140f9782497bc486a54 100644 (file)
@@ -1,7 +1,6 @@
 /* Native-dependent code for SPARC.
 
 /* Native-dependent code for SPARC.
 
-   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 2003-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 
    This file is part of GDB.
 
 #include "regcache.h"
 #include "target.h"
 
 #include "regcache.h"
 #include "target.h"
 
-#include "gdb_assert.h"
 #include <signal.h>
 #include <signal.h>
-#include "gdb_string.h"
 #include <sys/ptrace.h>
 #include <sys/ptrace.h>
-#include "gdb_wait.h"
+#include "gdbsupport/gdb_wait.h"
 #ifdef HAVE_MACHINE_REG_H
 #include <machine/reg.h>
 #endif
 #ifdef HAVE_MACHINE_REG_H
 #include <machine/reg.h>
 #endif
@@ -82,13 +79,16 @@ typedef struct fp_status fpregset_t;
 #endif
 
 /* Register set description.  */
 #endif
 
 /* Register set description.  */
-const struct sparc_gregset *sparc_gregset;
-void (*sparc_supply_gregset) (const struct sparc_gregset *,
+const struct sparc_gregmap *sparc_gregmap;
+const struct sparc_fpregmap *sparc_fpregmap;
+void (*sparc_supply_gregset) (const struct sparc_gregmap *,
                              struct regcache *, int , const void *);
                              struct regcache *, int , const void *);
-void (*sparc_collect_gregset) (const struct sparc_gregset *,
+void (*sparc_collect_gregset) (const struct sparc_gregmap *,
                               const struct regcache *, int, void *);
                               const struct regcache *, int, void *);
-void (*sparc_supply_fpregset) (struct regcache *, int , const void *);
-void (*sparc_collect_fpregset) (const struct regcache *, int , void *);
+void (*sparc_supply_fpregset) (const struct sparc_fpregmap *,
+                              struct regcache *, int , const void *);
+void (*sparc_collect_fpregset) (const struct sparc_fpregmap *,
+                               const struct regcache *, int , void *);
 int (*sparc_gregset_supplies_p) (struct gdbarch *, int);
 int (*sparc_fpregset_supplies_p) (struct gdbarch *, int);
 
 int (*sparc_gregset_supplies_p) (struct gdbarch *, int);
 int (*sparc_fpregset_supplies_p) (struct gdbarch *, int);
 
@@ -134,11 +134,10 @@ sparc32_fpregset_supplies_p (struct gdbarch *gdbarch, int regnum)
    for all registers (including the floating-point registers).  */
 
 void
    for all registers (including the floating-point registers).  */
 
 void
-sparc_fetch_inferior_registers (struct target_ops *ops,
-                               struct regcache *regcache, int regnum)
+sparc_fetch_inferior_registers (struct regcache *regcache, int regnum)
 {
 {
-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  int pid;
+  struct gdbarch *gdbarch = regcache->arch ();
+  pid_t pid;
 
   /* NOTE: cagney/2002-12-03: This code assumes that the currently
      selected light weight processes' registers can be written
 
   /* NOTE: cagney/2002-12-03: This code assumes that the currently
      selected light weight processes' registers can be written
@@ -150,18 +149,16 @@ sparc_fetch_inferior_registers (struct target_ops *ops,
      belong to the selected thread (the LWP could be in the middle of
      executing the thread switch code).
 
      belong to the selected thread (the LWP could be in the middle of
      executing the thread switch code).
 
-     These functions should instead be paramaterized with an explicit
+     These functions should instead be parameterized with an explicit
      object (struct regcache, struct thread_info?) into which the LWPs
      registers can be written.  */
      object (struct regcache, struct thread_info?) into which the LWPs
      registers can be written.  */
-  pid = TIDGET (inferior_ptid);
-  if (pid == 0)
-    pid = PIDGET (inferior_ptid);
+  pid = get_ptrace_pid (regcache->ptid ());
 
   if (regnum == SPARC_G0_REGNUM)
     {
       gdb_byte zero[8] = { 0 };
 
 
   if (regnum == SPARC_G0_REGNUM)
     {
       gdb_byte zero[8] = { 0 };
 
-      regcache_raw_supply (regcache, SPARC_G0_REGNUM, &zero);
+      regcache->raw_supply (SPARC_G0_REGNUM, &zero);
       return;
     }
 
       return;
     }
 
@@ -172,7 +169,7 @@ sparc_fetch_inferior_registers (struct target_ops *ops,
       if (ptrace (PTRACE_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
        perror_with_name (_("Couldn't get registers"));
 
       if (ptrace (PTRACE_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
        perror_with_name (_("Couldn't get registers"));
 
-      sparc_supply_gregset (sparc_gregset, regcache, -1, &regs);
+      sparc_supply_gregset (sparc_gregmap, regcache, -1, &regs);
       if (regnum != -1)
        return;
     }
       if (regnum != -1)
        return;
     }
@@ -184,22 +181,19 @@ sparc_fetch_inferior_registers (struct target_ops *ops,
       if (ptrace (PTRACE_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
        perror_with_name (_("Couldn't get floating point status"));
 
       if (ptrace (PTRACE_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
        perror_with_name (_("Couldn't get floating point status"));
 
-      sparc_supply_fpregset (regcache, -1, &fpregs);
+      sparc_supply_fpregset (sparc_fpregmap, regcache, -1, &fpregs);
     }
 }
 
 void
     }
 }
 
 void
-sparc_store_inferior_registers (struct target_ops *ops,
-                               struct regcache *regcache, int regnum)
+sparc_store_inferior_registers (struct regcache *regcache, int regnum)
 {
 {
-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  int pid;
+  struct gdbarch *gdbarch = regcache->arch ();
+  pid_t pid;
 
   /* NOTE: cagney/2002-12-02: See comment in fetch_inferior_registers
      about threaded assumptions.  */
 
   /* NOTE: cagney/2002-12-02: See comment in fetch_inferior_registers
      about threaded assumptions.  */
-  pid = TIDGET (inferior_ptid);
-  if (pid == 0)
-    pid = PIDGET (inferior_ptid);
+  pid = get_ptrace_pid (regcache->ptid ());
 
   if (regnum == -1 || sparc_gregset_supplies_p (gdbarch, regnum))
     {
 
   if (regnum == -1 || sparc_gregset_supplies_p (gdbarch, regnum))
     {
@@ -208,7 +202,7 @@ sparc_store_inferior_registers (struct target_ops *ops,
       if (ptrace (PTRACE_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
        perror_with_name (_("Couldn't get registers"));
 
       if (ptrace (PTRACE_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
        perror_with_name (_("Couldn't get registers"));
 
-      sparc_collect_gregset (sparc_gregset, regcache, regnum, &regs);
+      sparc_collect_gregset (sparc_gregmap, regcache, regnum, &regs);
 
       if (ptrace (PTRACE_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
        perror_with_name (_("Couldn't write registers"));
 
       if (ptrace (PTRACE_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
        perror_with_name (_("Couldn't write registers"));
@@ -235,7 +229,7 @@ sparc_store_inferior_registers (struct target_ops *ops,
        perror_with_name (_("Couldn't get floating-point registers"));
 
       memcpy (&saved_fpregs, &fpregs, sizeof (fpregs));
        perror_with_name (_("Couldn't get floating-point registers"));
 
       memcpy (&saved_fpregs, &fpregs, sizeof (fpregs));
-      sparc_collect_fpregset (regcache, regnum, &fpregs);
+      sparc_collect_fpregset (sparc_fpregmap, regcache, regnum, &fpregs);
 
       /* Writing the floating-point registers will fail on NetBSD with
         EINVAL if the inferior process doesn't have an FPU state
 
       /* Writing the floating-point registers will fail on NetBSD with
         EINVAL if the inferior process doesn't have an FPU state
@@ -254,12 +248,14 @@ sparc_store_inferior_registers (struct target_ops *ops,
 }
 
 \f
 }
 
 \f
-/* Fetch StackGhost Per-Process XOR cookie.  */
+/* Implement the to_xfer_partial target_ops method for
+   TARGET_OBJECT_WCOOKIE.  Fetch StackGhost Per-Process XOR cookie.  */
 
 
-LONGEST
-sparc_xfer_wcookie (struct target_ops *ops, enum target_object object,
+enum target_xfer_status
+sparc_xfer_wcookie (enum target_object object,
                    const char *annex, gdb_byte *readbuf,
                    const char *annex, gdb_byte *readbuf,
-                   const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
+                   const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
+                   ULONGEST *xfered_len)
 {
   unsigned long wcookie = 0;
   char *buf = (char *)&wcookie;
 {
   unsigned long wcookie = 0;
   char *buf = (char *)&wcookie;
@@ -268,9 +264,9 @@ sparc_xfer_wcookie (struct target_ops *ops, enum target_object object,
   gdb_assert (readbuf && writebuf == NULL);
 
   if (offset == sizeof (unsigned long))
   gdb_assert (readbuf && writebuf == NULL);
 
   if (offset == sizeof (unsigned long))
-    return 0;                  /* Signal EOF.  */
+    return TARGET_XFER_EOF;                    /* Signal EOF.  */
   if (offset > sizeof (unsigned long))
   if (offset > sizeof (unsigned long))
-    return -1;
+    return TARGET_XFER_E_IO;
 
 #ifdef PT_WCOOKIE
   /* If PT_WCOOKIE is defined (by <sys/ptrace.h>), assume we're
 
 #ifdef PT_WCOOKIE
   /* If PT_WCOOKIE is defined (by <sys/ptrace.h>), assume we're
@@ -278,11 +274,7 @@ sparc_xfer_wcookie (struct target_ops *ops, enum target_object object,
      later).  Since release 3.6, OpenBSD uses a fully randomized
      cookie.  */
   {
      later).  Since release 3.6, OpenBSD uses a fully randomized
      cookie.  */
   {
-    int pid;
-
-    pid = TIDGET (inferior_ptid);
-    if (pid == 0)
-      pid = PIDGET (inferior_ptid);
+    int pid = inferior_ptid.pid ();
 
     /* Sanity check.  The proper type for a cookie is register_t, but
        we can't assume that this type exists on all systems supported
 
     /* Sanity check.  The proper type for a cookie is register_t, but
        we can't assume that this type exists on all systems supported
@@ -308,52 +300,20 @@ sparc_xfer_wcookie (struct target_ops *ops, enum target_object object,
     len = sizeof (unsigned long) - offset;
 
   memcpy (readbuf, buf + offset, len);
     len = sizeof (unsigned long) - offset;
 
   memcpy (readbuf, buf + offset, len);
-  return len;
-}
-
-LONGEST (*inf_ptrace_xfer_partial) (struct target_ops *, enum target_object,
-                                   const char *, gdb_byte *, const gdb_byte *,
-                                   ULONGEST, LONGEST);
-
-static LONGEST
-sparc_xfer_partial (struct target_ops *ops, enum target_object object,
-                   const char *annex, gdb_byte *readbuf,
-                   const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
-{
-  if (object == TARGET_OBJECT_WCOOKIE)
-    return sparc_xfer_wcookie (ops, object, annex, readbuf, writebuf, 
-                              offset, len);
-
-  return inf_ptrace_xfer_partial (ops, object, annex, readbuf, writebuf,
-                                 offset, len);
-}
-\f
-/* Create a prototype generic SPARC target.  The client can override
-   it with local methods.  */
-
-struct target_ops *
-sparc_target (void)
-{
-  struct target_ops *t;
-
-  t = inf_ptrace_target ();
-  t->to_fetch_registers = sparc_fetch_inferior_registers;
-  t->to_store_registers = sparc_store_inferior_registers;
-  inf_ptrace_xfer_partial = t->to_xfer_partial;
-  t->to_xfer_partial = sparc_xfer_partial;
-  return t;
+  *xfered_len = (ULONGEST) len;
+  return TARGET_XFER_OK;
 }
 }
-
 \f
 \f
-/* Provide a prototype to silence -Wmissing-prototypes.  */
-void _initialize_sparc_nat (void);
 
 
+void _initialize_sparc_nat ();
 void
 void
-_initialize_sparc_nat (void)
+_initialize_sparc_nat ()
 {
 {
-  /* Deafult to using SunOS 4 register sets.  */
-  if (sparc_gregset == NULL)
-    sparc_gregset = &sparc32_sunos4_gregset;
+  /* Default to using SunOS 4 register sets.  */
+  if (sparc_gregmap == NULL)
+    sparc_gregmap = &sparc32_sunos4_gregmap;
+  if (sparc_fpregmap == NULL)
+    sparc_fpregmap = &sparc32_sunos4_fpregmap;
   if (sparc_supply_gregset == NULL)
     sparc_supply_gregset = sparc32_supply_gregset;
   if (sparc_collect_gregset == NULL)
   if (sparc_supply_gregset == NULL)
     sparc_supply_gregset = sparc32_supply_gregset;
   if (sparc_collect_gregset == NULL)