target/arm: Implement EXLOCK check during exception return

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20251008215613.300150-62-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Richard Henderson
2025-10-10 13:19:10 +01:00
committed by Peter Maydell
parent d77ed96016
commit 70440a5858
+11
View File
@@ -675,6 +675,17 @@ void HELPER(exception_return)(CPUARMState *env, uint64_t new_pc)
goto illegal_return;
}
/*
* If GetCurrentEXLOCKEN, the exception return path must use GCSPOPCX,
* which will set PSTATE.EXLOCK. We need not explicitly check FEAT_GCS,
* because GCSCR_ELx cannot be set without it.
*/
if (new_el == cur_el &&
(env->cp15.gcscr_el[cur_el] & GCSCR_EXLOCKEN) &&
!(env->pstate & PSTATE_EXLOCK)) {
goto illegal_return;
}
bql_lock();
arm_call_pre_el_change_hook(cpu);
bql_unlock();