提交 ec549a89 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

Some ugly stack trace code.

上级 2e4345d8
...@@ -200,6 +200,29 @@ puts(const char *s) ...@@ -200,6 +200,29 @@ puts(const char *s)
} }
static inline void
stacktrace(void)
{
#define PRINT_RET(i) \
do { \
uptr addr = (uptr) __builtin_return_address(i); \
if ((addr & KBASE) == KBASE) \
cprintf(" %lx\n", addr); \
else \
return; \
} while (0)
PRINT_RET(0);
PRINT_RET(1);
PRINT_RET(2);
PRINT_RET(3);
PRINT_RET(4);
PRINT_RET(5);
PRINT_RET(6);
#undef PRINT_RET
}
void __attribute__((noreturn)) void __attribute__((noreturn))
panic(const char *s) panic(const char *s)
{ {
...@@ -214,6 +237,7 @@ panic(const char *s) ...@@ -214,6 +237,7 @@ panic(const char *s)
cprintf("cpu%d: panic: ", mycpu()->id); cprintf("cpu%d: panic: ", mycpu()->id);
cprintf(s); cprintf(s);
cprintf("\n"); cprintf("\n");
stacktrace();
panicked = 1; panicked = 1;
// Never release cons.lock // Never release cons.lock
sys_halt(); sys_halt();
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论