7 #define CAL_DEX_VERSION "0.1" 8 #define CAL_DEX_DUMP_FORMAT "0.1" 54 #define L(x) (((unsigned int)(x)) & 0xFFFF) 57 #define USE_ETS_PRINTF 1 60 #define c_puts(a) cal_tprintf(a) 63 #define cal_tprintf printf 65 static char TINYBUF[120];
67 #define cal_tprintfOFF(fmt,...) do { \ 68 ets_vsprintf(TINYBUF, fmt, __VA_ARGS__); \ 71 #define P4X(s,n) c_puts(s); print4x(n); 72 #define P8X(s,n) c_puts(s); print8x((int)(n)); 78 void print8x(
unsigned int n)
81 for (i = 0; i < 8; i++)
84 TINYBUF[7-i] = (nib < 10) ?
'0' + nib :
'a' - 10 + nib;
93 void print4x(
unsigned int n)
96 for (i = 0; i < 4; i++)
99 TINYBUF[3-i] = (nib < 10) ?
'0' + nib :
'a' - 10 + nib;
108 void print2d(
unsigned int n)
111 for (i = 0; i < 2; i++)
114 TINYBUF[1-i] =
'0' + nib;
129 for (i = 0; i < cnt; i++)
134 printf(
"%08x ", (
int )(p + i));
140 print8x((
int )(p + i));
146 if ((i + 1) %
NUM == 0)
156 int i = (
unsigned int) sp;
157 return (i > 0x3fffc000) && (i < 0x40000000) && ((i & 3) == 0);
167 int n = (0x40000000 - (
unsigned int)p);
172 #if defined(cal_tprintf) 176 print8x((
unsigned int)sp);
183 #if defined(cal_tprintf) 184 cal_tprintf(
"Stack pointer may be corrupt: %08x\n", sp);
186 c_puts(
"Stack pointer may be corrupt: ");
187 print8x((
unsigned int)sp);
198 "rsr.excvaddr %0\n\t" 221 int* ex_sp = (sp + 256 / 4);
226 #if defined(cal_tprintf) 230 c_puts(
"Fatal Exception: ");
245 #if defined(cal_tprintf) 247 "Fingerprint: 1/xh=%08x,t=%04x-%04x,d=%04x-%04x,b=%04x-%04x,ro=%04x-%04x\n",
249 L(&_data_start),
L(&_data_end),
L(&_bss_start),
L(&_bss_end),
250 L(&_rodata_start),
L(&_rodata_end));
252 " epc1: %08x ps: %08x sar: %08x exccause: %08x unk1: %08x\n",
255 cal_tprintf(
" a0 : %08x a1 : %08x a2 : %08x a3 : %08x\n",
256 regs->
a0, (
int )ex_sp, regs->
a2, regs->
a3);
257 cal_tprintf(
" a4 : %08x a5 : %08x a6 : %08x a7 : %08x\n",
258 regs->
a4, regs->
a5, regs->
a6, regs->
a7);
259 cal_tprintf(
" a8 : %08x a9 : %08x a10: %08x a11: %08x\n",
261 cal_tprintf(
" a12: %08x a13: %08x a14: %08x a15: %08x\n",
264 c_puts(
"Fingerprint: 1/");
266 P4X(
",t=",
L(&_text_start)); P4X(
"-",
L(&_text_end));
267 P4X(
",d=",
L(&_data_start)); P4X(
"-",
L(&_data_end));
268 P4X(
",b=",
L(&_bss_start)); P4X(
"-",
L(&_bss_end));
269 P4X(
",ro=",
L(&_rodata_start)); P4X(
"-",
L(&_rodata_end));
271 P8X(
" epc1: ", regs->
epc1); P8X(
" exccause: ", regs->
exccause); P8X(
" excvaddr: ", excvaddr);
272 P8X(
" depc: ", depc);
274 P8X(
" ps : ", regs->
ps); P8X(
" sar : ", regs->
sar); P8X(
" unk1 : ", regs->
xx1);
277 P8X(
" a0 : ", regs->
a0);
278 P8X(
" a1 : ", (
int )ex_sp);
279 P8X(
" a2 : ", regs->
a2);
280 P8X(
" a3 : ", regs->
a3);
282 P8X(
" a4 : ", regs->
a4);
283 P8X(
" a5 : ", regs->
a5);
284 P8X(
" a6 : ", regs->
a6);
285 P8X(
" a7 : ", regs->
a7);
287 P8X(
" a8 : ", regs->
a8);
288 P8X(
" a9 : ", regs->
a9);
289 P8X(
" a10: ", regs->
a10);
290 P8X(
" a11: ", regs->
a11);
292 P8X(
" a12: ", regs->
a12);
293 P8X(
" a13: ", regs->
a13);
294 P8X(
" a14: ", regs->
a14);
295 P8X(
" a15: ", regs->
a15);
302 #if defined(cal_tprintf) 303 cal_tprintf(
"Stack pointer may be corrupted: %08x\n", sp);
305 c_puts(
"Stack pointer may be corrupted: ");
332 "addi a1, a1, -16\n\t" 333 "s32i.n a0, a1, 12\n\t" 336 "addi a2, a1, 16\n\t" 344 "l32i a0, a1, 12\n\t" 345 "addi a1, a1, 16\n\t" 375 "__wrap__xtos_set_exception_handler: unexpected handler!");
void cal_dex_dump_stack(int *sp)
void ets_uart_printf(char *fmt,...)
void * __real__xtos_set_exception_handler(int exno, void(*exhandler)())
static void(* orighandler)(int code)
static int get_excvaddr()
static void cal_dex_handler(int exccause, ex_regs regs)
char * system_get_sdk_version()
void * __wrap__xtos_set_exception_handler(int exno, void(*exhandler)())
MEMSPACE int printf(const char *format,...)
void cal_dex_dump(int *sp)
void cal_dex_dump_hex(int *p, int cnt)
#define CAL_DEX_DUMP_FORMAT