diff options
-rw-r--r-- | gdb/ChangeLog | 20 | ||||
-rw-r--r-- | gdb/config/sparc/sol2.mh | 2 | ||||
-rw-r--r-- | gdb/sparc-sol2-tdep.c | 53 | ||||
-rw-r--r-- | gdb/sparc64-sol2-tdep.c | 53 |
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); |