aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog20
-rw-r--r--gdb/config/sparc/sol2.mh2
-rw-r--r--gdb/sparc-sol2-tdep.c53
-rw-r--r--gdb/sparc64-sol2-tdep.c53
4 files changed, 127 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5e1e43f..ebb36b7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,23 @@
+2014-12-03 Ulrich Weigand  <uweigand@de.ibm.com>
+
+ * config/sparc/sol2.mh (NATDEPFILES): Remove core-regset.o.
+ * sparc-sol2-tdep.c: Include "regset.h".
+ (sparc32_sol2_supply_core_gregset): New function.
+ (sparc32_sol2_collect_core_gregset): Likewise.
+ (sparc32_sol2_supply_core_fpregset): Likewise.
+ (sparc32_sol2_collect_core_fpregset): Likewise.
+ (sparc32_sol2_gregset, sparc32_sol2_fpregset): New variables.
+ (sparc32_sol2_init_abi): Set tdep->gregset/sizeof_gregset and
+ tdep->fpregset/sizeof_fpregset.
+ * sparc64-sol2-tdep.c: Include "regset.h".
+ (sparc64_sol2_supply_core_gregset): New function.
+ (sparc64_sol2_collect_core_gregset): Likewise.
+ (sparc64_sol2_supply_core_fpregset): Likewise.
+ (sparc64_sol2_collect_core_fpregset): Likewise.
+ (sparc64_sol2_gregset, sparc64_sol2_fpregset): New variables.
+ (sparc64_sol2_init_abi): Set tdep->gregset/sizeof_gregset and
+ tdep->fpregset/sizeof_fpregset.
+
2014-12-03 Simon Marchi <simon.marchi@ericsson.com>
* common/cleanups.c (make_cleanup_dtor): Use typedef for dtor
diff --git a/gdb/config/sparc/sol2.mh b/gdb/config/sparc/sol2.mh
index c6cabd2..220c61f 100644
--- a/gdb/config/sparc/sol2.mh
+++ b/gdb/config/sparc/sol2.mh
@@ -1,6 +1,6 @@
# Host: Solaris SPARC & UltraSPARC
NAT_FILE= nm-sol2.h
NATDEPFILES= sparc-sol2-nat.o \
- core-regset.o fork-child.o \
+ fork-child.o \
procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o
HAVE_NATIVE_GCORE_HOST = 1
diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c
index 7a7d3eb..827bdd0 100644
--- a/gdb/sparc-sol2-tdep.c
+++ b/gdb/sparc-sol2-tdep.c
@@ -25,6 +25,7 @@
#include "objfiles.h"
#include "osabi.h"
#include "regcache.h"
+#include "regset.h"
#include "target.h"
#include "trad-frame.h"
@@ -50,6 +51,52 @@ 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
+ };
/* The Solaris signal trampolines reside in libc. For normal signals,
@@ -211,6 +258,12 @@ sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
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. */
diff --git a/gdb/sparc64-sol2-tdep.c b/gdb/sparc64-sol2-tdep.c
index 23e943d..d1d6d62 100644
--- a/gdb/sparc64-sol2-tdep.c
+++ b/gdb/sparc64-sol2-tdep.c
@@ -25,6 +25,7 @@
#include "objfiles.h"
#include "osabi.h"
#include "trad-frame.h"
+#include "regset.h"
#include "sol2-tdep.h"
#include "sparc64-tdep.h"
@@ -49,6 +50,52 @@ const struct sparc_fpregmap sparc64_sol2_fpregmap =
0 * 8, /* %f0 */
33 * 8, /* %fsr */
};
+
+static void
+sparc64_sol2_supply_core_gregset (const struct regset *regset,
+ struct regcache *regcache,
+ int regnum, const void *gregs, size_t len)
+{
+ sparc64_supply_gregset (&sparc64_sol2_gregmap, regcache, regnum, gregs);
+}
+
+static void
+sparc64_sol2_collect_core_gregset (const struct regset *regset,
+ const struct regcache *regcache,
+ int regnum, void *gregs, size_t len)
+{
+ sparc64_collect_gregset (&sparc64_sol2_gregmap, regcache, regnum, gregs);
+}
+
+static void
+sparc64_sol2_supply_core_fpregset (const struct regset *regset,
+ struct regcache *regcache,
+ int regnum, const void *fpregs, size_t len)
+{
+ sparc64_supply_fpregset (&sparc64_sol2_fpregmap, regcache, regnum, fpregs);
+}
+
+static void
+sparc64_sol2_collect_core_fpregset (const struct regset *regset,
+ const struct regcache *regcache,
+ int regnum, void *fpregs, size_t len)
+{
+ sparc64_collect_fpregset (&sparc64_sol2_fpregmap, regcache, regnum, fpregs);
+}
+
+static const struct regset sparc64_sol2_gregset =
+ {
+ NULL,
+ sparc64_sol2_supply_core_gregset,
+ sparc64_sol2_collect_core_gregset
+ };
+
+static const struct regset sparc64_sol2_fpregset =
+ {
+ NULL,
+ sparc64_sol2_supply_core_fpregset,
+ sparc64_sol2_collect_core_fpregset
+ };
static struct sparc_frame_cache *
@@ -159,6 +206,12 @@ sparc64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ tdep->gregset = &sparc64_sol2_gregset;
+ tdep->sizeof_gregset = 304;
+
+ tdep->fpregset = &sparc64_sol2_fpregset;
+ tdep->sizeof_fpregset = 544;
+
frame_unwind_append_unwinder (gdbarch, &sparc64_sol2_sigtramp_frame_unwind);
sparc64_init_abi (info, gdbarch);