aboutsummaryrefslogtreecommitdiff
path: root/cortex-m-rt/asm.s
diff options
context:
space:
mode:
authorGravatar Chip <bytex64@bytex64.net> 2019-01-20 13:07:01 -0600
committerGravatar Chip <bytex64@bytex64.net> 2019-01-20 13:07:01 -0600
commit0e61775813fd78d0e50b0a19692b1c41cc246046 (patch)
tree94623b68cd4ef16ae9ed9c1c2e0b30177e58b796 /cortex-m-rt/asm.s
parent28f74ed6d29df432334d29d2083e91a1a5d0fa6c (diff)
downloadcortex-m-0e61775813fd78d0e50b0a19692b1c41cc246046.tar.gz
cortex-m-0e61775813fd78d0e50b0a19692b1c41cc246046.tar.zst
cortex-m-0e61775813fd78d0e50b0a19692b1c41cc246046.zip
On HardFault entry use MSP/PSP depending on stack mode
Diffstat (limited to 'cortex-m-rt/asm.s')
-rw-r--r--cortex-m-rt/asm.s9
1 files changed, 9 insertions, 0 deletions
diff --git a/cortex-m-rt/asm.s b/cortex-m-rt/asm.s
index 1f0e74d..50a3fa5 100644
--- a/cortex-m-rt/asm.s
+++ b/cortex-m-rt/asm.s
@@ -6,5 +6,14 @@
.type HardFaultTrampoline,%function
.thumb_func
HardFaultTrampoline:
+ # depending on the stack mode in EXC_RETURN, fetch stack pointer from
+ # PSP or MSP
+ mov r0, lr
+ mov r1, #4
+ tst r0, r1
+ bne 0f
mrs r0, MSP
b HardFault
+0:
+ mrs r0, PSP
+ b HardFault