From: Edgar E. Iglesias Date: Mon, 4 Aug 2014 13:41:54 +0000 (+0100) Subject: target-arm: A64: Respect SPSEL when taking exceptions X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=f151b123a35ff36085fb765a7a16373644711df1;p=osstest%2Fqemu.git target-arm: A64: Respect SPSEL when taking exceptions Reviewed-by: Alex Bennée Signed-off-by: Edgar E. Iglesias Reviewed-by: Greg Bellows Message-id: 1402994746-8328-4-git-send-email-edgar.iglesias@gmail.com Signed-off-by: Peter Maydell --- diff --git a/target-arm/helper-a64.c b/target-arm/helper-a64.c index 2b4ce6ac6..027434a92 100644 --- a/target-arm/helper-a64.c +++ b/target-arm/helper-a64.c @@ -489,8 +489,7 @@ void aarch64_cpu_do_interrupt(CPUState *cs) if (is_a64(env)) { env->banked_spsr[aarch64_banked_spsr_index(1)] = pstate_read(env); - env->sp_el[arm_current_pl(env)] = env->xregs[31]; - env->xregs[31] = env->sp_el[1]; + aarch64_save_sp(env, arm_current_pl(env)); env->elr_el[1] = env->pc; } else { env->banked_spsr[0] = cpsr_read(env); @@ -508,6 +507,7 @@ void aarch64_cpu_do_interrupt(CPUState *cs) pstate_write(env, PSTATE_DAIF | PSTATE_MODE_EL1h); env->aarch64 = 1; + aarch64_restore_sp(env, 1); env->pc = addr; cs->interrupt_request |= CPU_INTERRUPT_EXITTB;