mirror of
https://github.com/qemu/qemu.git
synced 2024-11-30 15:23:34 +08:00
target-arm: In cpsr_write() ignore mode switches from User mode
The only case where we can attempt a cpsr_write() mode switch from User is from the gdbstub; all other cases are handled in the calling code (notably translate.c). Architecturally attempts to alter the mode bits from user mode are simply ignored (and not treated as a bad mode switch, which in v8 sets CPSR.IL). Make mode switches from User ignored in cpsr_write() as well, for consistency. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Sergey Fedorov <serge.fdrv@gmail.com> Message-id: 1455556977-3644-6-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
ae08792301
commit
cb01d3912c
@ -5316,6 +5316,7 @@ void cpsr_write(CPUARMState *env, uint32_t val, uint32_t mask,
|
||||
env->daif |= val & CPSR_AIF & mask;
|
||||
|
||||
if (write_type != CPSRWriteRaw &&
|
||||
(env->uncached_cpsr & CPSR_M) != CPSR_USER &&
|
||||
((env->uncached_cpsr ^ val) & mask & CPSR_M)) {
|
||||
if (bad_mode_switch(env, val & CPSR_M)) {
|
||||
/* Attempt to switch to an invalid mode: this is UNPREDICTABLE.
|
||||
|
Loading…
Reference in New Issue
Block a user