]> Git Repo - qemu.git/commit
target-arm: Correct handling of writes to CPSR mode bits from gdb in usermode
authorPeter Maydell <[email protected]>
Fri, 4 Mar 2016 11:30:16 +0000 (11:30 +0000)
committerPeter Maydell <[email protected]>
Fri, 4 Mar 2016 11:30:16 +0000 (11:30 +0000)
commit8c4f0eb94cc65ee32a12feba88d0b32e3665d5ea
tree81d58dad781a1e87f2e41094dd721178083b0fb3
parent2d3b7c0164e1b9287304bc70dd6ed071ba3e8dfc
target-arm: Correct handling of writes to CPSR mode bits from gdb in usermode

In helper.c the expression
  (env->uncached_cpsr & CPSR_M) != CPSR_USER
is always true; the right hand side was supposed to be ARM_CPU_MODE_USR
(an error in commit cb01d391).

Since the incorrect expression was always true, this just meant that
commit cb01d391 had no effect.

However simply changing the RHS here would reveal a logic error: if
the mode is USR we wish to completely ignore the attempt to set the
mode bits, which means that we must clear the CPSR_M bits from mask
to avoid the uncached_cpsr bits being updated at the end of the
function.

Move the condition into the correct place in the code, fix its RHS
constant, and add a comment about the fact that we must be doing a
gdbstub write if we're in user mode.

Fixes: https://bugs.launchpad.net/qemu/+bug/1550503
Signed-off-by: Peter Maydell <[email protected]>
Reviewed-by: Sergey Fedorov <[email protected]>
Message-id: 1456764438[email protected]
target-arm/helper.c
This page took 0.025773 seconds and 4 git commands to generate.