summaryrefslogtreecommitdiff
path: root/gdb/sh-linux-tdep.c
diff options
context:
space:
mode:
authorAndrew Stubbs <andrew.stubbs@st.com>2009-10-21 14:14:57 +0000
committerAndrew Stubbs <andrew.stubbs@st.com>2009-10-21 14:14:57 +0000
commitc9ac0a72c9f06f2a4e3ed58667608b3008f7346d (patch)
treeed172cf022d43924a4ac718682f15f516019f82a /gdb/sh-linux-tdep.c
parent47607d6f7cc0b855499df28ad8d27e4b16349202 (diff)
2009-10-21 Andrew Stubbs <ams@codesourcery.com>
Joel Brobecker <brobecker@adacore.com> * Makefile.in (HFILES_NO_SRCDIR): Remove shnbsd-tdep.h * configure.tgt (sh*-*-linux*): Add corelow.o to gdb_target_obs. * sh-linux-tdep.c: Include sh-tdep.h. (REGSx16): New macro. (gregs_table, fpregs_table): New variables. (sh_linux_init_abi): Set core_gregmap and fpregmap. * sh-tdep.c: Include regset.h. (sh_corefile_supply_regset): New function. (sh_corefile_collect_regset): New function. (sh_corefile_gregset, sh_corefile_fpregset): New variables. (sh_regset_from_core_section): New function. (sh_gdbarch_init): Set up tdep value. Call set_gdbarch_regset_from_core_section. * sh-tdep.h (PC_REGNUM): New enum value. (struct sh_corefile_regs): New type. (sh_corefile_gregset): Export variable. (sh_corefile_supply_regset): New prototype. (sh_corefile_collect_regset): New prototype. * shnbsd-tdep.c: Remove include of regcache.h, gdb_assert.h and shnbsd-tdep.h. (regmap): Use new definition using struct sh_corefile_regs. (shnbsd_supply_gregset, shnbsd_collect_gregset): Delete. (shnbsd_gregset): Delete. (shnbsd_regset_from_core_section): Delete. (shnbsd_supply_reg, shnbsd_fill_reg): Use new regset interface. (shnbsd_init_abi): Set core_gregmap. (shnbsd_supply_reg): Delete. (shnbsd_fill_reg): Delete. (SHNBSD_SIZEOF_GREGS): Move ... * shnbsd-nat.c (SHNBSD_SIZEOF_GREGS): ... to here. Remove include of shnbsd-tdep.h. (shnbsd_fetch_inferior_registers): Replace shnbsd_supply_reg call with sh_corefile_supply_regset. (shnbsd_store_inferior_registers): Replace shnbsd_fill_reg call with sh_corefile_collect_regset. * shnbsd-tdep.h: Delete file.
Diffstat (limited to 'gdb/sh-linux-tdep.c')
-rw-r--r--gdb/sh-linux-tdep.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/gdb/sh-linux-tdep.c b/gdb/sh-linux-tdep.c
index 46aad1dcb6..4e9d18c5f0 100644
--- a/gdb/sh-linux-tdep.c
+++ b/gdb/sh-linux-tdep.c
@@ -24,6 +24,50 @@
#include "symtab.h"
#include "glibc-tdep.h"
+#include "sh-tdep.h"
+
+#define REGSx16(base) \
+ {(base), 0}, \
+ {(base) + 1, 4}, \
+ {(base) + 2, 8}, \
+ {(base) + 3, 12}, \
+ {(base) + 4, 16}, \
+ {(base) + 5, 20}, \
+ {(base) + 6, 24}, \
+ {(base) + 7, 28}, \
+ {(base) + 8, 32}, \
+ {(base) + 9, 36}, \
+ {(base) + 10, 40}, \
+ {(base) + 11, 44}, \
+ {(base) + 12, 48}, \
+ {(base) + 13, 52}, \
+ {(base) + 14, 56}, \
+ {(base) + 15, 60}
+
+/* Describe the contents of the .reg section of the core file. */
+
+static const struct sh_corefile_regmap gregs_table[] =
+{
+ REGSx16 (R0_REGNUM),
+ {PC_REGNUM, 64},
+ {PR_REGNUM, 68},
+ {SR_REGNUM, 72},
+ {GBR_REGNUM, 76},
+ {MACH_REGNUM, 80},
+ {MACL_REGNUM, 84},
+ {-1 /* Terminator. */, 0}
+};
+
+/* Describe the contents of the .reg2 section of the core file. */
+
+static const struct sh_corefile_regmap fpregs_table[] =
+{
+ REGSx16 (FR0_REGNUM),
+ /* REGSx16 xfp_regs omitted. */
+ {FPSCR_REGNUM, 128},
+ {FPUL_REGNUM, 132},
+ {-1 /* Terminator. */, 0}
+};
static void
sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
@@ -36,6 +80,15 @@ sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_fetch_tls_load_module_address (gdbarch,
svr4_fetch_objfile_link_map);
+
+ /* Core files are supported for 32-bit SH only, at present. */
+ if (info.bfd_arch_info->mach != bfd_mach_sh5)
+ {
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+ tdep->core_gregmap = (struct sh_corefile_regmap *)gregs_table;
+ tdep->core_fpregmap = (struct sh_corefile_regmap *)fpregs_table;
+ }
}
/* Provide a prototype to silence -Wmissing-prototypes. */