diff options
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/sh-linux-tdep.c | 4 | ||||
-rw-r--r-- | gdb/sh-tdep.c | 21 | ||||
-rw-r--r-- | gdb/sh-tdep.h | 2 | ||||
-rw-r--r-- | gdb/shnbsd-tdep.c | 1 |
5 files changed, 30 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8b216e2..fdbe981 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,17 @@ 2014-09-30 Andreas Arnez <arnez@linux.vnet.ibm.com> + * sh-linux-tdep.c (sh_linux_init_abi): Set tdep fields + 'sizeof_gregset' and 'sizeof_fpregset'. + * sh-tdep.c (sh_regset_from_core_section): Remove. + (sh_iterate_over_regset_sections): New. + (sh_gdbarch_init): Adjust gdbarch initialization. + * sh-tdep.h (struct gdbarch_tdep): New fields sizeof_gregset and + sizeof_fpregset. + * shnbsd-tdep.c (shnbsd_init_abi): Set tdep field + 'sizeof_gregset'. + +2014-09-30 Andreas Arnez <arnez@linux.vnet.ibm.com> + * score-tdep.c (score7_linux_regset_from_core_section): Remove. (score7_linux_iterate_over_regset_sections): New. (score_gdbarch_init): Adjust gdbarch initialization. diff --git a/gdb/sh-linux-tdep.c b/gdb/sh-linux-tdep.c index 19cba41..2cc9fb8 100644 --- a/gdb/sh-linux-tdep.c +++ b/gdb/sh-linux-tdep.c @@ -200,8 +200,12 @@ sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + /* Remember regset characteristics. The sizes should match + elf_gregset_t and elf_fpregset_t from Linux. */ tdep->core_gregmap = (struct sh_corefile_regmap *)gregs_table; + tdep->sizeof_gregset = 92; tdep->core_fpregmap = (struct sh_corefile_regmap *)fpregs_table; + tdep->sizeof_fpregset = 136; tramp_frame_prepend_unwinder (gdbarch, &sh_linux_sigreturn_tramp_frame); tramp_frame_prepend_unwinder (gdbarch, &sh_linux_rt_sigreturn_tramp_frame); diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index c8c36db..d91a292 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -2207,19 +2207,19 @@ static const struct regset sh_corefile_fpregset = sh_corefile_collect_regset }; -static const struct regset * -sh_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name, - size_t sect_size) +static void +sh_iterate_over_regset_sections (struct gdbarch *gdbarch, + iterate_over_regset_sections_cb *cb, + void *cb_data, + const struct regcache *regcache) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - if (tdep->core_gregmap && strcmp (sect_name, ".reg") == 0) - return &sh_corefile_gregset; - - if (tdep->core_fpregmap && strcmp (sect_name, ".reg2") == 0) - return &sh_corefile_fpregset; + if (tdep->core_gregmap != NULL) + cb (".reg", tdep->sizeof_gregset, &sh_corefile_gregset, NULL, cb_data); - return NULL; + if (tdep->core_fpregmap != NULL) + cb (".reg2", tdep->sizeof_fpregset, &sh_corefile_fpregset, NULL, cb_data); } /* This is the implementation of gdbarch method @@ -2298,7 +2298,8 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) dwarf2_frame_set_init_reg (gdbarch, sh_dwarf2_frame_init_reg); - set_gdbarch_regset_from_core_section (gdbarch, sh_regset_from_core_section); + set_gdbarch_iterate_over_regset_sections + (gdbarch, sh_iterate_over_regset_sections); switch (info.bfd_arch_info->mach) { diff --git a/gdb/sh-tdep.h b/gdb/sh-tdep.h index 5d64c74..da96a84 100644 --- a/gdb/sh-tdep.h +++ b/gdb/sh-tdep.h @@ -95,10 +95,12 @@ struct gdbarch_tdep where each general-purpose register is stored inside the associated core file section. */ struct sh_corefile_regmap *core_gregmap; + int sizeof_gregset; /* Non-NULL when debugging from a core file and when FP registers are available. Provides the offset where each FP register is stored inside the associated core file section. */ struct sh_corefile_regmap *core_fpregmap; + int sizeof_fpregset; }; extern const struct regset sh_corefile_gregset; diff --git a/gdb/shnbsd-tdep.c b/gdb/shnbsd-tdep.c index 2936661..a81c2a1 100644 --- a/gdb/shnbsd-tdep.c +++ b/gdb/shnbsd-tdep.c @@ -64,6 +64,7 @@ shnbsd_init_abi (struct gdbarch_info info, struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->core_gregmap = (struct sh_corefile_regmap *)regmap; + tdep->sizeof_gregset = 84; set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); |