From 1b1818e443eb8f134e0bc2f5ec950c8a16df6883 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Mon, 4 Jan 2010 14:57:44 +0000 Subject: [PATCH] * regset.h (struct core_regset_section): Add HUMAN_NAME. * i386-linux-tdep.c (i386_linux_regset_sections): Fill in HUMAN_NAME. * ppc-linux-tdep.c (ppc_linux_vsx_regset_sections): Likewise. (ppc_linux_vmx_regset_sections): Likewise. (ppc_linux_fp_regset_sections): Likewise. * corelow.c (get_core_register_section): Constify arguments. (get_core_registers): Use gdbarch_core_regset_sections instead of hard-coded platform-specific register section names. --- gdb/ChangeLog | 12 ++++++++++++ gdb/corelow.c | 39 +++++++++++++++++++++++++++------------ gdb/i386-linux-tdep.c | 6 +++--- gdb/ppc-linux-tdep.c | 18 +++++++++--------- gdb/regset.h | 1 + 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 79fe93a2ee7..3d0de470980 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2010-01-04 Ulrich Weigand + + * regset.h (struct core_regset_section): Add HUMAN_NAME. + * i386-linux-tdep.c (i386_linux_regset_sections): Fill in HUMAN_NAME. + * ppc-linux-tdep.c (ppc_linux_vsx_regset_sections): Likewise. + (ppc_linux_vmx_regset_sections): Likewise. + (ppc_linux_fp_regset_sections): Likewise. + + * corelow.c (get_core_register_section): Constify arguments. + (get_core_registers): Use gdbarch_core_regset_sections instead + of hard-coded platform-specific register section names. + 2010-01-04 Ulrich Weigand * dwarf2loc.c (read_pieced_value): If a piece occupies part of diff --git a/gdb/corelow.c b/gdb/corelow.c index 1760e40b363..039573fa110 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -508,9 +508,9 @@ deprecated_core_resize_section_table (int num_added) static void get_core_register_section (struct regcache *regcache, - char *name, + const char *name, int which, - char *human_name, + const char *human_name, int required) { static char *section_name = NULL; @@ -591,6 +591,7 @@ static void get_core_registers (struct target_ops *ops, struct regcache *regcache, int regno) { + struct core_regset_section *sect_list; int i; if (!(core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch)) @@ -601,16 +602,30 @@ get_core_registers (struct target_ops *ops, return; } - get_core_register_section (regcache, - ".reg", 0, "general-purpose", 1); - get_core_register_section (regcache, - ".reg2", 2, "floating-point", 0); - get_core_register_section (regcache, - ".reg-xfp", 3, "extended floating-point", 0); - get_core_register_section (regcache, - ".reg-ppc-vmx", 3, "ppc Altivec", 0); - get_core_register_section (regcache, - ".reg-ppc-vsx", 4, "POWER7 VSX", 0); + sect_list = gdbarch_core_regset_sections (get_regcache_arch (regcache)); + if (sect_list) + while (sect_list->sect_name != NULL) + { + if (strcmp (sect_list->sect_name, ".reg") == 0) + get_core_register_section (regcache, sect_list->sect_name, + 0, sect_list->human_name, 1); + else if (strcmp (sect_list->sect_name, ".reg2") == 0) + get_core_register_section (regcache, sect_list->sect_name, + 2, sect_list->human_name, 0); + else + get_core_register_section (regcache, sect_list->sect_name, + 3, sect_list->human_name, 0); + + sect_list++; + } + + else + { + get_core_register_section (regcache, + ".reg", 0, "general-purpose", 1); + get_core_register_section (regcache, + ".reg2", 2, "floating-point", 0); + } /* Supply dummy value for all registers not found in the core. */ for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++) diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c index 463bc344f72..5acd229d612 100644 --- a/gdb/i386-linux-tdep.c +++ b/gdb/i386-linux-tdep.c @@ -49,9 +49,9 @@ /* Supported register note sections. */ static struct core_regset_section i386_linux_regset_sections[] = { - { ".reg", 144 }, - { ".reg2", 108 }, - { ".reg-xfp", 512 }, + { ".reg", 144, "general-purpose" }, + { ".reg2", 108, "floating-point" }, + { ".reg-xfp", 512, "extended floating-point" }, { NULL, 0 } }; diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index b1a8959d897..36cedf1a537 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -516,25 +516,25 @@ ppc64_standard_linkage1_target (struct frame_info *frame, static struct core_regset_section ppc_linux_vsx_regset_sections[] = { - { ".reg", 268 }, - { ".reg2", 264 }, - { ".reg-ppc-vmx", 544 }, - { ".reg-ppc-vsx", 256 }, + { ".reg", 268, "general-purpose" }, + { ".reg2", 264, "floating-point" }, + { ".reg-ppc-vmx", 544, "ppc Altivec" }, + { ".reg-ppc-vsx", 256, "POWER7 VSX" }, { NULL, 0} }; static struct core_regset_section ppc_linux_vmx_regset_sections[] = { - { ".reg", 268 }, - { ".reg2", 264 }, - { ".reg-ppc-vmx", 544 }, + { ".reg", 268, "general-purpose" }, + { ".reg2", 264, "floating-point" }, + { ".reg-ppc-vmx", 544, "ppc Altivec" }, { NULL, 0} }; static struct core_regset_section ppc_linux_fp_regset_sections[] = { - { ".reg", 268 }, - { ".reg2", 264 }, + { ".reg", 268, "general-purpose" }, + { ".reg2", 264, "floating-point" }, { NULL, 0} }; diff --git a/gdb/regset.h b/gdb/regset.h index b61758e78c5..9a21ced768e 100644 --- a/gdb/regset.h +++ b/gdb/regset.h @@ -29,6 +29,7 @@ struct core_regset_section { const char *sect_name; int size; + const char *human_name; }; /* Data structure describing a register set. */ -- 2.30.2