Commit 4cf23480 authored by Peter Maydell's avatar Peter Maydell Committed by Riku Voipio
Browse files

linux-user/signal.c: Fix AArch64 big-endian FP register restore



Fix the loop restoring the FP registers from the signal frame to match
the one used when setting up the signal frame, so that it handles
TARGET_WORDS_BIGENDIAN being set.

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Signed-off-by: default avatarRiku Voipio <riku.voipio@linaro.org>
Reviewed-by: default avatarRichard Henderson <rth@twiddle.net>
parent d844a7b6
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -1233,8 +1233,14 @@ static int target_restore_sigframe(CPUARMState *env,
        return 1;
    }

    for (i = 0; i < 32 * 2; i++) {
        __get_user(env->vfp.regs[i], &aux->fpsimd.vregs[i]);
    for (i = 0; i < 32; i++) {
#ifdef TARGET_WORDS_BIGENDIAN
        __get_user(env->vfp.regs[i * 2], &aux->fpsimd.vregs[i * 2 + 1]);
        __get_user(env->vfp.regs[i * 2 + 1], &aux->fpsimd.vregs[i * 2]);
#else
        __get_user(env->vfp.regs[i * 2], &aux->fpsimd.vregs[i * 2]);
        __get_user(env->vfp.regs[i * 2 + 1], &aux->fpsimd.vregs[i * 2 + 1]);
#endif
    }
    __get_user(fpsr, &aux->fpsimd.fpsr);
    vfp_set_fpsr(env, fpsr);