2021-04-15 03:52:09 -04:00
|
|
|
#include "freertos/xtensa_rtos.h"
|
|
|
|
|
|
|
|
// ------------------------------------------------
|
|
|
|
.section .iram1,"ax"
|
|
|
|
|
|
|
|
.global gdbstub_handle_uart_int
|
|
|
|
.global _xt_gdbstub_int
|
|
|
|
.align 4
|
|
|
|
|
|
|
|
_xt_gdbstub_int:
|
|
|
|
|
|
|
|
/* Allocate exception frame and save minimal context. */
|
|
|
|
mov a0, sp
|
|
|
|
addi sp, sp, -XT_STK_FRMSZ
|
|
|
|
s32i a0, sp, XT_STK_A1
|
|
|
|
#if XCHAL_HAVE_WINDOWED
|
|
|
|
s32e a0, sp, -12 /* for debug backtrace */
|
|
|
|
#endif
|
|
|
|
rsr a0, PS /* save interruptee's PS */
|
|
|
|
s32i a0, sp, XT_STK_PS
|
|
|
|
rsr a0, EPC_1 /* save interruptee's PC */
|
|
|
|
s32i a0, sp, XT_STK_PC
|
|
|
|
#if XCHAL_HAVE_WINDOWED
|
|
|
|
s32e a0, sp, -16 /* for debug backtrace */
|
|
|
|
#endif
|
|
|
|
s32i a12, sp, XT_STK_A12 /* _xt_context_save requires A12- */
|
|
|
|
s32i a13, sp, XT_STK_A13 /* A13 to have already been saved */
|
|
|
|
|
|
|
|
/* Save exc cause and vaddr into exception frame */
|
|
|
|
rsr a0, EXCCAUSE
|
|
|
|
s32i a0, sp, XT_STK_EXCCAUSE
|
|
|
|
rsr a0, EXCVADDR
|
|
|
|
s32i a0, sp, XT_STK_EXCVADDR
|
|
|
|
|
|
|
|
|
|
|
|
/* _xt_context_save seems to save the current a0, but we need the interuptees a0. Fix this. */
|
|
|
|
rsr a0, EXCSAVE_1 /* save interruptee's a0 */
|
|
|
|
|
|
|
|
s32i a0, sp, XT_STK_A0
|
|
|
|
|
|
|
|
mov a6,sp
|
2021-06-24 06:24:40 -04:00
|
|
|
movi a3, gdbstub_handle_uart_int
|
|
|
|
callx0 a3
|
2021-04-15 03:52:09 -04:00
|
|
|
ret
|