[CRIU] [PATCH 1/2] ppc64: use vector128 type for Altivec data
Laurent Dufour
ldufour at linux.vnet.ibm.com
Tue Oct 11 01:25:30 PDT 2016
Signed-off-by: Laurent Dufour <ldufour at linux.vnet.ibm.com>
---
criu/arch/ppc64/crtools.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/criu/arch/ppc64/crtools.c b/criu/arch/ppc64/crtools.c
index 727201a45170..c315f49f51f8 100644
--- a/criu/arch/ppc64/crtools.c
+++ b/criu/arch/ppc64/crtools.c
@@ -183,7 +183,7 @@ static void put_fpu_regs(mcontext_t *mc, UserPpc64FpstateEntry *fpe)
mcfp[i] = fpe->fpregs[i];
}
-static UserPpc64VrstateEntry *copy_altivec_regs(unsigned char *vrregs)
+static UserPpc64VrstateEntry *copy_altivec_regs(__vector128 *vrregs)
{
UserPpc64VrstateEntry *vse;
uint64_t *p64;
@@ -205,12 +205,12 @@ static UserPpc64VrstateEntry *copy_altivec_regs(unsigned char *vrregs)
/* Vectors are 2*64bits entries */
for (i = 0; i < (NVRREG-1); i++) {
- p64 = (uint64_t*) &vrregs[i * 2 * sizeof(uint64_t)];
+ p64 = (uint64_t*) &vrregs[i];
vse->vrregs[i*2] = p64[0];
vse->vrregs[i*2 + 1] = p64[1];
}
- p32 = (uint32_t*) &vrregs[(NVRREG-1) * 2 * sizeof(uint64_t)];
+ p32 = (uint32_t*) &vrregs[NVRREG-1];
vse->vrsave = *p32;
return vse;
@@ -227,7 +227,7 @@ static UserPpc64VrstateEntry *get_altivec_regs(pid_t pid)
* "Userland shall check AT_HWCAP to know whether it can rely on the
* v_regs pointer or not"
*/
- unsigned char vrregs[(NVRREG-1) * 16 + 4];
+ __vector128 vrregs[NVRREG];
if (ptrace(PTRACE_GETVRREGS, pid, 0, (void*)&vrregs) < 0) {
/* PTRACE_GETVRREGS returns EIO if Altivec is not supported.
@@ -440,7 +440,8 @@ static int get_tm_regs(pid_t pid, CoreEntry *core)
uint64_t tfhar, texasr, tfiar;
} tm_spr_regs;
user_regs_struct_t regs;
- uint64_t fpregs[NFPREG], vmxregs[34][2], vsxregs[32];
+ uint64_t fpregs[NFPREG], vsxregs[32];
+ __vector128 vmxregs[NVRREG];
struct iovec iov;
UserPpc64TmRegsEntry *tme;
UserPpc64RegsEntry *gpregs = core->ti_ppc64->gpregs;
@@ -497,7 +498,7 @@ static int get_tm_regs(pid_t pid, CoreEntry *core)
/* Get checkpointed VMX (Altivec) registers */
PTRACE_GET_TM(vmxregs, "VMX", NT_PPC_TM_CVMX, TM_OPTIONAL);
if (iov.iov_base) {
- core->ti_ppc64->vrstate = copy_altivec_regs((unsigned char *)vmxregs);
+ core->ti_ppc64->vrstate = copy_altivec_regs(vmxregs);
if (!core->ti_ppc64->vrstate)
goto out_free;
}
--
2.7.4
More information about the CRIU
mailing list