[PowerPC] Consolidate linux vector regset sizes
This patch defines constants for the sizes of the two vector regsets (vector-scalar registers and regular vector registers). The native, gdbserver and core file targets are changed to use these constants. The Linux ptrace calls return (or read) a smaller regset than the one found in core files for vector registers, because ptrace uses a single 4-byte quantity for vrsave at the end of the regset, while the core-file regset uses a full 16-byte field for vrsave. For simplicity, the larger size is used in both cases, and so a buffer with 12 unused additional bytes is passed to ptrace in the native target. gdb/ChangeLog: 2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> * arch/ppc-linux-common.h (PPC_LINUX_SIZEOF_VRREGSET) (PPC_LINUX_SIZEOF_VSXREGSET): Define. * ppc-linux-nat.c (SIZEOF_VSXREGS, SIZEOF_VRREGS): Remove. (gdb_vrregset_t): Change array type size to PPC_LINUX_SIZEOF_VRREGSET. (gdb_vsxregset_t): Change array type size to PPC_LINUX_SIZEOF_VSXREGSET. * ppc-linux-tdep.c (ppc_linux_iterate_over_regset_sections): Change integer literals to PPC_LINUX_SIZEOF_VRREGSET and PPC_LINUX_SIZEOF_VSXREGSET. gdb/gdbserver/ChangeLog: 2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> * linux-ppc-low.c (SIZEOF_VSXREGS, SIZEOF_VRREGS): Remove. (ppc_arch_setup): Change SIZEOF_VRREGS and SIZEOF_VSXREGS to PPC_LINUX_SIZEOF_VRREGSET and PPC_LINUX_SIZEOF_VSXREGSET.
This commit is contained in:
parent
7273b5fc4b
commit
d078308a2e
|
@ -1,3 +1,16 @@
|
|||
2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>
|
||||
|
||||
* arch/ppc-linux-common.h (PPC_LINUX_SIZEOF_VRREGSET)
|
||||
(PPC_LINUX_SIZEOF_VSXREGSET): Define.
|
||||
* ppc-linux-nat.c (SIZEOF_VSXREGS, SIZEOF_VRREGS): Remove.
|
||||
(gdb_vrregset_t): Change array type size to
|
||||
PPC_LINUX_SIZEOF_VRREGSET.
|
||||
(gdb_vsxregset_t): Change array type size to
|
||||
PPC_LINUX_SIZEOF_VSXREGSET.
|
||||
* ppc-linux-tdep.c (ppc_linux_iterate_over_regset_sections):
|
||||
Change integer literals to PPC_LINUX_SIZEOF_VRREGSET and
|
||||
PPC_LINUX_SIZEOF_VSXREGSET.
|
||||
|
||||
2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>
|
||||
|
||||
* configure.nat <linux powerpc>: Add ppc-linux.o to NATDEPFILES.
|
||||
|
|
|
@ -22,6 +22,15 @@
|
|||
|
||||
struct target_desc;
|
||||
|
||||
/* The core file VMX regset has 34 16-byte fields (32 16-byte vector
|
||||
registers, plus two fields containing 4-byte registers, VSCR and
|
||||
VRSAVE), while the ptrace calls return or read 33 16-byte fields
|
||||
plus a 4-byte field for VRSAVE. For simplicity we use the longer
|
||||
length for both cases. */
|
||||
#define PPC_LINUX_SIZEOF_VRREGSET 544
|
||||
|
||||
#define PPC_LINUX_SIZEOF_VSXREGSET 256
|
||||
|
||||
/* Check if the hwcap auxv entry indicates that isa205 is supported. */
|
||||
bool ppc_linux_has_isa205 (unsigned long hwcap);
|
||||
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>
|
||||
|
||||
* linux-ppc-low.c (SIZEOF_VSXREGS, SIZEOF_VRREGS): Remove.
|
||||
(ppc_arch_setup): Change SIZEOF_VRREGS and SIZEOF_VSXREGS to
|
||||
PPC_LINUX_SIZEOF_VRREGSET and PPC_LINUX_SIZEOF_VSXREGSET.
|
||||
|
||||
2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>
|
||||
|
||||
* linux-ppc-low.c (ppc_fill_vsxregset): Remove ppc_hwcap check.
|
||||
|
|
|
@ -459,8 +459,6 @@ static void ppc_fill_gregset (struct regcache *regcache, void *buf)
|
|||
ppc_collect_ptrace_register (regcache, i, (char *) buf + ppc_regmap[i]);
|
||||
}
|
||||
|
||||
#define SIZEOF_VSXREGS 32*8
|
||||
|
||||
static void
|
||||
ppc_fill_vsxregset (struct regcache *regcache, void *buf)
|
||||
{
|
||||
|
@ -483,8 +481,6 @@ ppc_store_vsxregset (struct regcache *regcache, const void *buf)
|
|||
supply_register (regcache, base + i, ®set[i * 8]);
|
||||
}
|
||||
|
||||
#define SIZEOF_VRREGS 33*16+4
|
||||
|
||||
static void
|
||||
ppc_fill_vrregset (struct regcache *regcache, void *buf)
|
||||
{
|
||||
|
@ -660,10 +656,10 @@ ppc_arch_setup (void)
|
|||
switch (regset->get_request)
|
||||
{
|
||||
case PTRACE_GETVRREGS:
|
||||
regset->size = features.altivec ? SIZEOF_VRREGS : 0;
|
||||
regset->size = features.altivec ? PPC_LINUX_SIZEOF_VRREGSET : 0;
|
||||
break;
|
||||
case PTRACE_GETVSXREGS:
|
||||
regset->size = features.vsx ? SIZEOF_VSXREGS : 0;
|
||||
regset->size = features.vsx ? PPC_LINUX_SIZEOF_VSXREGSET : 0;
|
||||
break;
|
||||
case PTRACE_GETEVRREGS:
|
||||
if (ppc_hwcap & PPC_FEATURE_HAS_SPE)
|
||||
|
|
|
@ -174,9 +174,7 @@ struct ppc_hw_breakpoint
|
|||
*/
|
||||
/* *INDENT-ON* */
|
||||
|
||||
#define SIZEOF_VRREGS 33*16+4
|
||||
|
||||
typedef char gdb_vrregset_t[SIZEOF_VRREGS];
|
||||
typedef char gdb_vrregset_t[PPC_LINUX_SIZEOF_VRREGSET];
|
||||
|
||||
/* This is the layout of the POWER7 VSX registers and the way they overlap
|
||||
with the existing FPR and VMX registers.
|
||||
|
@ -210,9 +208,7 @@ typedef char gdb_vrregset_t[SIZEOF_VRREGS];
|
|||
the FP registers (doubleword 0) and hence extend them with additional
|
||||
64 bits (doubleword 1). The other 32 regs overlap with the VMX
|
||||
registers. */
|
||||
#define SIZEOF_VSXREGS 32*8
|
||||
|
||||
typedef char gdb_vsxregset_t[SIZEOF_VSXREGS];
|
||||
typedef char gdb_vsxregset_t[PPC_LINUX_SIZEOF_VSXREGSET];
|
||||
|
||||
/* On PPC processors that support the Signal Processing Extension
|
||||
(SPE) APU, the general-purpose registers are 64 bits long.
|
||||
|
|
|
@ -557,10 +557,12 @@ ppc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
|
|||
cb (".reg2", 264, &ppc32_linux_fpregset, NULL, cb_data);
|
||||
|
||||
if (have_altivec)
|
||||
cb (".reg-ppc-vmx", 544, &ppc32_linux_vrregset, "ppc Altivec", cb_data);
|
||||
cb (".reg-ppc-vmx", PPC_LINUX_SIZEOF_VRREGSET, &ppc32_linux_vrregset,
|
||||
"ppc Altivec", cb_data);
|
||||
|
||||
if (have_vsx)
|
||||
cb (".reg-ppc-vsx", 256, &ppc32_linux_vsxregset, "POWER7 VSX", cb_data);
|
||||
cb (".reg-ppc-vsx", PPC_LINUX_SIZEOF_VSXREGSET,
|
||||
&ppc32_linux_vsxregset, "POWER7 VSX", cb_data);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue