More panic/kerneltrap tweaks

上级 fcaef13d
...@@ -95,6 +95,16 @@ snprintf(char *buf, u32 n, char *fmt, ...) ...@@ -95,6 +95,16 @@ snprintf(char *buf, u32 n, char *fmt, ...)
} }
void void
__cprintf(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vprintfmt(writecons, 0, fmt, ap);
va_end(ap);
}
void
cprintf(const char *fmt, ...) cprintf(const char *fmt, ...)
{ {
va_list ap; va_list ap;
...@@ -131,7 +141,7 @@ stacktrace(void) ...@@ -131,7 +141,7 @@ stacktrace(void)
do { \ do { \
uptr addr = (uptr) __builtin_return_address(i); \ uptr addr = (uptr) __builtin_return_address(i); \
if ((addr & KBASE) == KBASE) \ if ((addr & KBASE) == KBASE) \
cprintf(" %lx\n", addr); \ __cprintf(" %lx\n", addr); \
else \ else \
return; \ return; \
} while (0) } while (0)
...@@ -152,27 +162,31 @@ kerneltrap(struct trapframe *tf) ...@@ -152,27 +162,31 @@ kerneltrap(struct trapframe *tf)
{ {
extern void sys_halt(); extern void sys_halt();
const char *name = "(no name)"; const char *name = "(no name)";
void *kstack = NULL;
int pid = 0;
uptr pc[10]; uptr pc[10];
int i; int i;
cli(); cli();
cons.locking = 0; acquire(&cons.lock);
if (myproc()->name && myproc()->name[0] != 0)
name = myproc()->name;
cprintf("kernel trap %u cpu %u\n" if (myproc() != NULL) {
if (myproc()->name && myproc()->name[0] != 0)
name = myproc()->name;
pid = myproc()->pid;
kstack = myproc()->kstack;
}
__cprintf("kernel trap %u cpu %u\n"
" tf: rip %p rsp %p cr2 %p\n" " tf: rip %p rsp %p cr2 %p\n"
" proc: name %s pid %u kstack %p\n", " proc: name %s pid %u kstack %p\n",
tf->trapno, mycpu()->id, tf->trapno, mycpu()->id,
tf->rip, tf->rsp, rcr2(), tf->rip, tf->rsp, rcr2(),
name, myproc()->pid, myproc()->kstack); name, pid, kstack);
getcallerpcs((void*)tf->rbp, pc); getcallerpcs((void*)tf->rbp, pc);
for (i = 0; i < NELEM(pc) && pc[i] != 0; i++) for (i = 0; i < NELEM(pc) && pc[i] != 0; i++)
cprintf(" %p\n", pc[i]); __cprintf(" %p\n", pc[i]);
panicked = 1; panicked = 1;
acquire(&cons.lock);
sys_halt(); sys_halt();
for(;;) for(;;)
; ;
...@@ -184,15 +198,14 @@ panic(const char *s) ...@@ -184,15 +198,14 @@ panic(const char *s)
extern void sys_halt(); extern void sys_halt();
cli(); cli();
cons.locking = 0; acquire(&cons.lock);
cprintf("cpu%d: panic: ", mycpu()->id); __cprintf("cpu%d: panic: ", mycpu()->id);
cprintf(s); __cprintf(s);
cprintf("\n"); __cprintf("\n");
stacktrace(); stacktrace();
panicked = 1; panicked = 1;
acquire(&cons.lock);
sys_halt(); sys_halt();
for(;;) for(;;)
; ;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论