
This is very useful for debugging. It differentiates between a stack overflow and other errors (because it's easy to see when a stack overflow occurs) and prints the old stack pointer and program counter if available.
21 строка
690 Б
ArmAsm
21 строка
690 Б
ArmAsm
.syntax unified
|
|
|
|
.section .text.HardFault_Handler
|
|
.global HardFault_Handler
|
|
.type HardFault_Handler, %function
|
|
HardFault_Handler:
|
|
// Put the old stack pointer in the first argument, for easy debugging. This
|
|
// is especially useful on Cortex-M0, which supports far fewer debug
|
|
// facilities.
|
|
mov r0, sp
|
|
|
|
// Load the default stack pointer from address 0 so that we can call normal
|
|
// functions again that expect a working stack. However, it will corrupt the
|
|
// old stack so the function below must not attempt to recover from this
|
|
// fault.
|
|
movs r3, #0
|
|
ldr r3, [r3]
|
|
mov sp, r3
|
|
|
|
// Continue handling this error in Go.
|
|
bl handleHardFault
|