[PowerPC] Add support for TAR
This patch adds support for the Target Address Register for powerpc linux native and core file targets, and in the powerpc linux server stub. gdb/ChangeLog: 2018-10-26 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com> Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * arch/ppc-linux-tdesc.h (tdesc_powerpc_isa207_vsx32l) (tdesc_powerpc_isa207_vsx64l): Declare. * arch/ppc-linux-common.h (PPC_LINUX_SIZEOF_TARREGSET): Define. (struct ppc_linux_features) <isa207>: New field. (ppc_linux_no_features): Add initializer for isa207 field. * arch/ppc-linux-common.c (ppc_linux_match_description): Return new tdescs. * nat/ppc-linux.h (PPC_FEATURE2_ARCH_2_07, PPC_FEATURE2_TAR) (NT_PPC_TAR): Define if not already defined. * features/Makefile (WHICH): Add rs6000/powerpc-isa207-vsx32l and rs6000/powerpc-isa207-vsx64l. (XMLTOC): Add rs6000/powerpc-isa207-vsx32l.xml and rs6000/powerpc-isa207-vsx64l.xml. * features/rs6000/power-tar.xml: New file. * features/rs6000/powerpc-isa207-vsx32l.xml: New file. * features/rs6000/powerpc-isa207-vsx64l.xml: New file. * features/rs6000/powerpc-isa207-vsx32l.c: Generate. * features/rs6000/powerpc-isa207-vsx64l.c: Generate. * regformats/rs6000/powerpc-isa207-vsx32l.dat: Generate. * regformats/rs6000/powerpc-isa207-vsx64l.dat: Generate. * ppc-linux-nat.c (fetch_register, fetch_ppc_registers): Call fetch_regset with the TAR regset. (store_register, store_ppc_registers): Call store_regset with the TAR regset. (ppc_linux_nat_target::read_description): Set isa207 field in the features struct if needed. * ppc-linux-tdep.c: Include features/rs6000/powerpc-isa207-vsx32l.c and features/rs6000/powerpc-isa207-vsx64l.c. (ppc32_regmap_tar, ppc32_linux_tarregset): New globals. (ppc_linux_iterate_over_regset_sections): Call back with the tar regset. (ppc_linux_core_read_description): Check if the tar section is present and set isa207 in the features struct. (_initialize_ppc_linux_tdep): Call initialize_tdesc_powerpc_isa207_vsx32l and initialize_tdesc_powerpc_isa207_vsx64l. * ppc-linux-tdep.h (ppc32_linux_tarregset): Declare. * ppc-tdep.h (gdbarch_tdep) <ppc_tar_regnum>: New field. (enum) <PPC_TAR_REGNUM>: New enum value. * rs6000-tdep.c (rs6000_gdbarch_init): Look for and validate tar feature. (ppc_process_record_op31): Record changes to TAR. gdb/gdbserver/ChangeLog: 2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * configure.srv (ipa_ppc_linux_regobj): Add powerpc-isa207-vsx64l-ipa.o and powerpc-isa207-vsx32l-ipa.o. (powerpc*-*-linux*): Add powerpc-isa207-vsx32l.o and powerpc-isa207-vsx64l.o to srv_regobj, add rs6000/power-tar.xml, rs6000/powerpc-isa207-vsx32l.xml, and rs6000/powerpc-isa207-vsx64l.xml to srv_xmlfiles. * linux-ppc-tdesc-init.h (enum ppc_linux_tdesc) <PPC_TDESC_ISA207_VSX>: New enum value. (init_registers_powerpc_isa207_vsx32l): Declare. (init_registers_powerpc_isa207_vsx64l): Declare. * linux-ppc-low.c (ppc_fill_tarregset): New function. (ppc_store_tarregset): New function. (ppc_regsets): Add entry for the TAR regset. (ppc_arch_setup): Set isa207 in features struct when needed. Set size for the TAR regsets. (ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA207_VSX. (initialize_low_arch): Call init_registers_powerpc_isa207_vsx32l and init_registers_powerpc_isa207_vsx64l. * linux-ppc-ipa.c (get_ipa_tdesc): Handle PPC_TDESC_ISA207_VSX. (initialize_low_tracepoint): Call init_registers_powerpc_isa207_vsx32l and init_registers_powerpc_isa207_vsx64l. gdb/testsuite/ChangeLog: 2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * gdb.arch/powerpc-tar.c: New file. * gdb.arch/powerpc-tar.exp: New file. gdb/doc/ChangeLog: 2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * gdb.texinfo (PowerPC Features): Describe new feature "org.gnu.gdb.power.tar".
This commit is contained in:
parent
7ca18ed6d2
commit
f2cf6173f3
28 changed files with 1167 additions and 6 deletions
|
@ -657,6 +657,15 @@ fetch_register (struct regcache *regcache, int tid, int regno)
|
|||
&ppc32_linux_pprregset);
|
||||
return;
|
||||
}
|
||||
else if (regno == PPC_TAR_REGNUM)
|
||||
{
|
||||
gdb_assert (tdep->ppc_tar_regnum != -1);
|
||||
|
||||
fetch_regset (regcache, tid, NT_PPC_TAR,
|
||||
PPC_LINUX_SIZEOF_TARREGSET,
|
||||
&ppc32_linux_tarregset);
|
||||
return;
|
||||
}
|
||||
|
||||
if (regaddr == -1)
|
||||
{
|
||||
|
@ -858,6 +867,10 @@ fetch_ppc_registers (struct regcache *regcache, int tid)
|
|||
fetch_regset (regcache, tid, NT_PPC_DSCR,
|
||||
PPC_LINUX_SIZEOF_DSCRREGSET,
|
||||
&ppc32_linux_dscrregset);
|
||||
if (tdep->ppc_tar_regnum != -1)
|
||||
fetch_regset (regcache, tid, NT_PPC_TAR,
|
||||
PPC_LINUX_SIZEOF_TARREGSET,
|
||||
&ppc32_linux_tarregset);
|
||||
}
|
||||
|
||||
/* Fetch registers from the child process. Fetch all registers if
|
||||
|
@ -1056,6 +1069,15 @@ store_register (const struct regcache *regcache, int tid, int regno)
|
|||
&ppc32_linux_pprregset);
|
||||
return;
|
||||
}
|
||||
else if (regno == PPC_TAR_REGNUM)
|
||||
{
|
||||
gdb_assert (tdep->ppc_tar_regnum != -1);
|
||||
|
||||
store_regset (regcache, tid, regno, NT_PPC_TAR,
|
||||
PPC_LINUX_SIZEOF_TARREGSET,
|
||||
&ppc32_linux_tarregset);
|
||||
return;
|
||||
}
|
||||
|
||||
if (regaddr == -1)
|
||||
return;
|
||||
|
@ -1275,6 +1297,10 @@ store_ppc_registers (const struct regcache *regcache, int tid)
|
|||
store_regset (regcache, tid, -1, NT_PPC_DSCR,
|
||||
PPC_LINUX_SIZEOF_DSCRREGSET,
|
||||
&ppc32_linux_dscrregset);
|
||||
if (tdep->ppc_tar_regnum != -1)
|
||||
store_regset (regcache, tid, -1, NT_PPC_TAR,
|
||||
PPC_LINUX_SIZEOF_TARREGSET,
|
||||
&ppc32_linux_tarregset);
|
||||
}
|
||||
|
||||
/* Fetch the AT_HWCAP entry from the aux vector. */
|
||||
|
@ -2399,7 +2425,13 @@ ppc_linux_nat_target::read_description ()
|
|||
if ((hwcap2 & PPC_FEATURE2_DSCR)
|
||||
&& check_regset (tid, NT_PPC_PPR, PPC_LINUX_SIZEOF_PPRREGSET)
|
||||
&& check_regset (tid, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET))
|
||||
features.ppr_dscr = true;
|
||||
{
|
||||
features.ppr_dscr = true;
|
||||
if ((hwcap2 & PPC_FEATURE2_ARCH_2_07)
|
||||
&& (hwcap2 & PPC_FEATURE2_TAR)
|
||||
&& check_regset (tid, NT_PPC_TAR, PPC_LINUX_SIZEOF_TARREGSET))
|
||||
features.isa207 = true;
|
||||
}
|
||||
|
||||
return ppc_linux_match_description (features);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue