blob: 541a61abeef8e36e78de65ea7f852a081f0e16ff (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
.text
# On an exception, push a fake stack thread mode stack frame and redirect
# thread execution to a thread mode error handler
# From RM008:
# The SP is decremented by eight words by the completion of the stack push.
# Figure 5-1 shows the contents of the stack after an exception pre-empts the
# current program flow.
#
# Old SP--> <previous>
# xPSR
# PC
# LR
# r12
# r3
# r2
# r1
# SP--> r0
.globl HardFaultException
.thumb_func
HardFaultException:
ldr r0, CPSR_MASK @ Set default CPSR
push {r0}
ldr r0, TARGET_PC @ Set target pc
push {r0}
sub sp, sp, #24 @ its not like i even care
ldr r0, EXC_RETURN @ Return to thread mode
mov lr, r0
bx lr @ Exception exit
.align 4
CPSR_MASK: .word 0x61000000
EXC_RETURN: .word 0xFFFFFFF9
TARGET_PC: .word throb
|