Наговнякал скрипт для gdb для починки содержимого регистров чтобы можно было делать bt, up, смотреть локальные переменные и делать и прочие полезные вещи после hard fault в ARM Cortex M-микроконтроллерах:
define hfstack
set $frame_ptr = (unsigned *)$sp
if $lr & 0x10
set $sp = $frame_ptr + (8 * 4)
else
set $sp = $frame_ptr + (26 * 4)
end
set $lr = $frame_ptr[5]
set $pc = $frame_ptr[6]
bt
end
document hfstack
set the correct stack context after a hard fault on Cortex M
end