#include "stm32l1xx.h" void **HARDFAULT_PSP; register void *stack_pointer asm("sp"); void __attribute__((naked)) HardFaultVector() { // Hijack the process stack pointer to make backtrace work asm("mrs %0, psp" : "=r"(HARDFAULT_PSP) : :); (void)SCB->HFSR; stack_pointer = HARDFAULT_PSP; while(1); } void NMIVector(void) __attribute__((alias("HardFaultVector"))); void MemManageVector(void) __attribute__((alias("HardFaultVector"))); void BusFaultVector(void) __attribute__((alias("HardFaultVector"))); void UsageFaultVector(void) __attribute__((alias("HardFaultVector")));