diff options
Diffstat (limited to 'gdb/ppc-linux-tdep.c')
-rw-r--r-- | gdb/ppc-linux-tdep.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index 13c00de..1d070dd 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -72,6 +72,7 @@ #include "features/rs6000/powerpc-isa205-altivec32l.c" #include "features/rs6000/powerpc-isa205-vsx32l.c" #include "features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c" +#include "features/rs6000/powerpc-isa207-vsx32l.c" #include "features/rs6000/powerpc-64l.c" #include "features/rs6000/powerpc-altivec64l.c" #include "features/rs6000/powerpc-cell64l.c" @@ -80,6 +81,7 @@ #include "features/rs6000/powerpc-isa205-altivec64l.c" #include "features/rs6000/powerpc-isa205-vsx64l.c" #include "features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c" +#include "features/rs6000/powerpc-isa207-vsx64l.c" #include "features/rs6000/powerpc-e500l.c" /* Shared library operations for PowerPC-Linux. */ @@ -581,6 +583,22 @@ const struct regset ppc32_linux_dscrregset = { regcache_collect_regset }; +/* Target Address Register regmap. */ + +static const struct regcache_map_entry ppc32_regmap_tar[] = + { + { 1, PPC_TAR_REGNUM, 8 }, + { 0 } + }; + +/* Target Address Register regset. */ + +const struct regset ppc32_linux_tarregset = { + ppc32_regmap_tar, + regcache_supply_regset, + regcache_collect_regset +}; + const struct regset * ppc_linux_gregset (int wordsize) { @@ -621,6 +639,7 @@ ppc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, int have_vsx = tdep->ppc_vsr0_upper_regnum != -1; int have_ppr = tdep->ppc_ppr_regnum != -1; int have_dscr = tdep->ppc_dscr_regnum != -1; + int have_tar = tdep->ppc_tar_regnum != -1; if (tdep->wordsize == 4) cb (".reg", 48 * 4, 48 * 4, &ppc32_linux_gregset, NULL, cb_data); @@ -650,6 +669,11 @@ ppc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, PPC_LINUX_SIZEOF_DSCRREGSET, &ppc32_linux_dscrregset, "Data Stream Control Register", cb_data); + + if (have_tar) + cb (".reg-ppc-tar", PPC_LINUX_SIZEOF_TARREGSET, + PPC_LINUX_SIZEOF_TARREGSET, + &ppc32_linux_tarregset, "Target Address Register", cb_data); } static void @@ -1063,6 +1087,7 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch, asection *section = bfd_get_section_by_name (abfd, ".reg"); asection *ppr = bfd_get_section_by_name (abfd, ".reg-ppc-ppr"); asection *dscr = bfd_get_section_by_name (abfd, ".reg-ppc-dscr"); + asection *tar = bfd_get_section_by_name (abfd, ".reg-ppc-tar"); if (! section) return NULL; @@ -1096,7 +1121,11 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch, features.isa205 = ppc_linux_has_isa205 (hwcap); if (ppr && dscr) - features.ppr_dscr = true; + { + features.ppr_dscr = true; + if (tar) + features.isa207 = true; + } return ppc_linux_match_description (features); } @@ -1972,6 +2001,7 @@ _initialize_ppc_linux_tdep (void) initialize_tdesc_powerpc_isa205_altivec32l (); initialize_tdesc_powerpc_isa205_vsx32l (); initialize_tdesc_powerpc_isa205_ppr_dscr_vsx32l (); + initialize_tdesc_powerpc_isa207_vsx32l (); initialize_tdesc_powerpc_64l (); initialize_tdesc_powerpc_altivec64l (); initialize_tdesc_powerpc_cell64l (); @@ -1980,5 +2010,6 @@ _initialize_ppc_linux_tdep (void) initialize_tdesc_powerpc_isa205_altivec64l (); initialize_tdesc_powerpc_isa205_vsx64l (); initialize_tdesc_powerpc_isa205_ppr_dscr_vsx64l (); + initialize_tdesc_powerpc_isa207_vsx64l (); initialize_tdesc_powerpc_e500l (); } |