/* Target-dependent code for Solaris SPARC.
- Copyright (C) 2003-2004, 2006-2012 Free Software Foundation, Inc.
+ Copyright (C) 2003-2019 Free Software Foundation, Inc.
This file is part of GDB.
#include "objfiles.h"
#include "osabi.h"
#include "regcache.h"
+#include "regset.h"
#include "target.h"
#include "trad-frame.h"
-#include "gdb_assert.h"
-#include "gdb_string.h"
-
#include "sol2-tdep.h"
#include "sparc-tdep.h"
#include "solib-svr4.h"
/* From <sys/regset.h>. */
-const struct sparc_gregset sparc32_sol2_gregset =
+const struct sparc_gregmap sparc32_sol2_gregmap =
{
32 * 4, /* %psr */
33 * 4, /* %pc */
16 * 4, /* %l0 */
};
-const struct sparc_fpregset sparc32_sol2_fpregset =
+const struct sparc_fpregmap sparc32_sol2_fpregmap =
{
0 * 4, /* %f0 */
33 * 4, /* %fsr */
};
+
+static void
+sparc32_sol2_supply_core_gregset (const struct regset *regset,
+ struct regcache *regcache,
+ int regnum, const void *gregs, size_t len)
+{
+ sparc32_supply_gregset (&sparc32_sol2_gregmap, regcache, regnum, gregs);
+}
+
+static void
+sparc32_sol2_collect_core_gregset (const struct regset *regset,
+ const struct regcache *regcache,
+ int regnum, void *gregs, size_t len)
+{
+ sparc32_collect_gregset (&sparc32_sol2_gregmap, regcache, regnum, gregs);
+}
+
+static void
+sparc32_sol2_supply_core_fpregset (const struct regset *regset,
+ struct regcache *regcache,
+ int regnum, const void *fpregs, size_t len)
+{
+ sparc32_supply_fpregset (&sparc32_sol2_fpregmap, regcache, regnum, fpregs);
+}
+
+static void
+sparc32_sol2_collect_core_fpregset (const struct regset *regset,
+ const struct regcache *regcache,
+ int regnum, void *fpregs, size_t len)
+{
+ sparc32_collect_fpregset (&sparc32_sol2_fpregmap, regcache, regnum, fpregs);
+}
+
+static const struct regset sparc32_sol2_gregset =
+ {
+ NULL,
+ sparc32_sol2_supply_core_gregset,
+ sparc32_sol2_collect_core_gregset
+ };
+
+static const struct regset sparc32_sol2_fpregset =
+ {
+ NULL,
+ sparc32_sol2_supply_core_fpregset,
+ sparc32_sol2_collect_core_fpregset
+ };
\f
/* The Solaris signal trampolines reside in libc. For normal signals,
int regnum;
if (*this_cache)
- return *this_cache;
+ return (struct sparc_frame_cache *) *this_cache;
cache = sparc_frame_cache (this_frame, this_cache);
gdb_assert (cache == *this_cache);
/* Unglobalize NAME. */
-const const char *
+const char *
sparc_sol2_static_transform_name (const char *name)
{
/* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop,
globalization prefix is followed by the function name (nested
static variables within a function are supposed to generate a
warning message, and are left alone). The procedure is
- documented in the Stabs Interface Manual, which is distrubuted
+ documented in the Stabs Interface Manual, which is distributed
with the compilers, although version 4.0 of the manual seems to
be incorrect in some places, at least for SPARC. The
globalization prefix is encoded into an N_OPT stab, with the form
"G=<prefix>". The globalization prefix always seems to start
- with a dollar sign '$'; a dot '.' is used as a seperator. So we
+ with a dollar sign '$'; a dot '.' is used as a separator. So we
simply strip everything up until the last dot. */
if (name[0] == '$')
{
- char *p = strrchr (name, '.');
+ const char *p = strrchr (name, '.');
if (p)
return p + 1;
}
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ tdep->gregset = &sparc32_sol2_gregset;
+ tdep->sizeof_gregset = 152;
+
+ tdep->fpregset = &sparc32_sol2_fpregset;
+ tdep->sizeof_fpregset = 400;
+
/* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO)
compiler puts out 0 instead of the address in N_SO stabs. Starting with
SunPRO 3.0, the compiler does this for N_FUN stabs too. */
/* How to print LWP PTIDs from core files. */
set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str);
}
-\f
-
-/* Provide a prototype to silence -Wmissing-prototypes. */
-void _initialize_sparc_sol2_tdep (void);
void
_initialize_sparc_sol2_tdep (void)