Skip to content

Commit 6d8deac

Browse files
wearyzennashif
authored andcommitted
arch: arm: cortex_a_r: Fix usage of stmdb while entering an exception
This commit fixes the unpredictable behavior, caused by using the ^ form of stmdb instruction, while entering an exception in SMP mode on Cortex-A/R. Change: Use "push" instead of "stmdb" to store user mode registers on stack while entering an exception in SYStem mode. Reason for change: As reported in discussion/#75339, processor is already in SYS mode after entering `z_arm_cortex_ar_enter_exc()` in an exception and using stmdb is UNPREDICTABLE in system mode. Also, the user mode register can be accessed directly without the ^ form of the instruction. The solution suggested to fix this is to use `stmdb sp!, {r0-r3, r12, lr}` which can save the user registers, update the SP and avoid an extra instruction. We use "push {}" instruction instead since it is the preferred mnemonic over `stmdb`. Signed-off-by: Sudan Landge <[email protected]>
1 parent 2f64e7c commit 6d8deac

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

arch/arm/core/cortex_a_r/macro_priv.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@
5454
*/
5555
srsdb sp!, #MODE_SYS
5656
cps #MODE_SYS
57-
stmdb sp, {r0-r3, r12, lr}^
58-
sub sp, #24
57+
push {r0-r3, r12, lr}
5958

6059
/* TODO: EXTRA_EXCEPTION_INFO */
6160
mov r0, sp

0 commit comments

Comments
 (0)