mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-31 19:24:33 +02:00
riscv: Fixes GDB backtrace of interrupted threads
Save missed SP value on stack
This commit is contained in:
@@ -223,6 +223,17 @@ _interrupt_handler:
|
|||||||
save_regs
|
save_regs
|
||||||
save_mepc
|
save_mepc
|
||||||
|
|
||||||
|
/* Though it is not necessary we save GP and SP here.
|
||||||
|
* SP is necessary to help GDB to properly unwind
|
||||||
|
* the backtrace of threads preempted by interrupts (OS tick etc.).
|
||||||
|
* GP is saved just to have its proper value in GDB. */
|
||||||
|
/* As gp register is not saved by the macro, save it here */
|
||||||
|
sw gp, RV_STK_GP(sp)
|
||||||
|
/* Same goes for the SP value before trapping */
|
||||||
|
addi t0, sp, CONTEXT_SIZE /* restore sp with the value when interrupt happened */
|
||||||
|
/* Save SP */
|
||||||
|
sw t0, RV_STK_SP(sp)
|
||||||
|
|
||||||
/* Before doing anythig preserve the stack pointer */
|
/* Before doing anythig preserve the stack pointer */
|
||||||
/* It will be saved in current TCB, if needed */
|
/* It will be saved in current TCB, if needed */
|
||||||
mv a0, sp
|
mv a0, sp
|
||||||
|
Reference in New Issue
Block a user