#include <atmel_start.h>

extern uint32_t _sfixed;

#ifdef USE_CLANG
__attribute__((section(".emergency_recover"))) __attribute__((used)) __attribute__((aligned(4))) void emergency_recover(void)
#else
__attribute__((section(".emergency_recover"))) __attribute__((used)) __attribute__((aligned(4))) __attribute__((naked)) void emergency_recover(void)
#endif
{
        __set_MSP(*(uint32_t *)(&_sfixed));

        SCB->VTOR = ((uint32_t)(&_sfixed) & SCB_VTOR_TBLOFF_Msk);

        Reset_Handler();
}
