]> git.proxmox.com Git - mirror_qemu.git/commit - target/arm/cpu.h
target/arm: Prepare for CONTROL.SPSEL being nonzero in Handler mode
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 6 Oct 2017 15:46:47 +0000 (16:46 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 6 Oct 2017 15:46:47 +0000 (16:46 +0100)
commitde2db7ec894f11931932ca78cd14a8d2b1389d5b
tree8f1e5195fb4bab772520ca7c71ef88281b283fa7
parent5b5223997c04b769bb362767cecb5f7ec382c5f0
target/arm: Prepare for CONTROL.SPSEL being nonzero in Handler mode

In the v7M architecture, there is an invariant that if the CPU is
in Handler mode then the CONTROL.SPSEL bit cannot be nonzero.
This in turn means that the current stack pointer is always
indicated by CONTROL.SPSEL, even though Handler mode always uses
the Main stack pointer.

In v8M, this invariant is removed, and CONTROL.SPSEL may now
be nonzero in Handler mode (though Handler mode still always
uses the Main stack pointer). In preparation for this change,
change how we handle this bit: rename switch_v7m_sp() to
the now more accurate write_v7m_control_spsel(), and make it
check both the handler mode state and the SPSEL bit.

Note that this implicitly changes the point at which we switch
active SP on exception exit from before we pop the exception
frame to after it.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 1506092407-26985-4-git-send-email-peter.maydell@linaro.org
hw/intc/armv7m_nvic.c
target/arm/cpu.h
target/arm/helper.c