From: Richard Henderson Date: Fri, 8 Jul 2022 15:15:29 +0000 (+0530) Subject: linux-user/aarch64: Reset PSTATE.SM on syscalls X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=2a98579711cfba611fbf2afdba6783c35c7d9850;p=qemu.git linux-user/aarch64: Reset PSTATE.SM on syscalls Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20220708151540.18136-35-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index f7ef36cd9f..9875d609a9 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -89,6 +89,15 @@ void cpu_loop(CPUARMState *env) switch (trapnr) { case EXCP_SWI: + /* + * On syscall, PSTATE.ZA is preserved, along with the ZA matrix. + * PSTATE.SM is cleared, per SMSTOP, which does ResetSVEState. + */ + if (FIELD_EX64(env->svcr, SVCR, SM)) { + env->svcr = FIELD_DP64(env->svcr, SVCR, SM, 0); + arm_rebuild_hflags(env); + arm_reset_sve_state(env); + } ret = do_syscall(env, env->xregs[8], env->xregs[0],