diff options
author | Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> | 2018-05-22 11:09:05 -0300 |
---|---|---|
committer | Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> | 2018-05-22 11:52:02 -0300 |
commit | d078308a2ed1290e587b4365e2d7382d951a26af (patch) | |
tree | af477b250fd1fcb1889e31c062a3c42942f34d15 | |
parent | 7273b5fc4baef93f8caaed678476e8cb3625338d (diff) | |
download | gdb-d078308a2ed1290e587b4365e2d7382d951a26af.zip gdb-d078308a2ed1290e587b4365e2d7382d951a26af.tar.gz gdb-d078308a2ed1290e587b4365e2d7382d951a26af.tar.bz2 |
[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.
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/arch/ppc-linux-common.h | 9 | ||||
-rw-r--r-- | gdb/gdbserver/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/gdbserver/linux-ppc-low.c | 8 | ||||
-rw-r--r-- | gdb/ppc-linux-nat.c | 8 | ||||
-rw-r--r-- | gdb/ppc-linux-tdep.c | 6 |
6 files changed, 36 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7e9b9b2..d99f5c0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 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. * ppc-linux-nat.c (ppc_linux_target_wordsize): Move to nat/ppc-linux.c. diff --git a/gdb/arch/ppc-linux-common.h b/gdb/arch/ppc-linux-common.h index b82adc4..798781c 100644 --- a/gdb/arch/ppc-linux-common.h +++ b/gdb/arch/ppc-linux-common.h @@ -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); diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 9149c2f..1efddc4 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,5 +1,11 @@ 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. (ppc_store_vsxregset): Likewise. (ppc_fill_vrregset): Likewise. diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c index b440b0e..3678518 100644 --- a/gdb/gdbserver/linux-ppc-low.c +++ b/gdb/gdbserver/linux-ppc-low.c @@ -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) diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c index 7e96032..a8f202d 100644 --- a/gdb/ppc-linux-nat.c +++ b/gdb/ppc-linux-nat.c @@ -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. diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index 1d3b019..344069d 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -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 |