Add level argument to debug_backtrace()
This commit is contained in:
+1
-1
@@ -181,7 +181,7 @@ void amd64_exception(struct amd64_exception_frame *frame) {
|
||||
if (debug_symbol_find(frame->rip, &sym_name, &sym_base) == 0) {
|
||||
kfatal(" Backtrace:\n");
|
||||
kfatal("0: %p <%s + %04x>\n", frame->rip, sym_name, frame->rip - sym_base);
|
||||
debug_backtrace(frame->rbp, 1, 10);
|
||||
debug_backtrace(DEBUG_FATAL, frame->rbp, 1, 10);
|
||||
} else {
|
||||
kfatal("%rip is in unknown location\n");
|
||||
}
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ void debug_symbol_table_set(uintptr_t symtab, uintptr_t strtab, size_t symtab_si
|
||||
void debug_symbol_table_multiboot2(struct multiboot_tag_elf_sections *tag);
|
||||
int debug_symbol_find(uintptr_t addr, const char **name, uintptr_t *base);
|
||||
int debug_symbol_find_by_name(const char *name, uintptr_t *value);
|
||||
void debug_backtrace(uintptr_t rbp, int depth, int limit);
|
||||
void debug_backtrace(int level, uintptr_t rbp, int depth, int limit);
|
||||
|
||||
void fmtsiz(char *buf, size_t sz);
|
||||
|
||||
|
||||
+6
-6
@@ -122,7 +122,7 @@ int debug_symbol_find(uintptr_t addr, const char **name, uintptr_t *base) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
void debug_backtrace(uintptr_t rbp, int depth, int limit) {
|
||||
void debug_backtrace(int level, uintptr_t rbp, int depth, int limit) {
|
||||
// Typical layout:
|
||||
// rbp + 08 == rip
|
||||
// rbp + 00 == rbp_1
|
||||
@@ -132,7 +132,7 @@ void debug_backtrace(uintptr_t rbp, int depth, int limit) {
|
||||
}
|
||||
|
||||
if ((rbp & 0xFFFFFF0000000000) != 0xFFFFFF0000000000) {
|
||||
debugs(DEBUG_FATAL, "-- %rbp is not from kernel space\n");
|
||||
debugs(level, "-- %rbp is not from kernel space\n");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -143,17 +143,17 @@ void debug_backtrace(uintptr_t rbp, int depth, int limit) {
|
||||
const char *name;
|
||||
|
||||
if (debug_symbol_find(rip, &name, &base) == 0) {
|
||||
debugf(DEBUG_FATAL, "%d: %p <%s + %04x>\n", depth, rip, name, rip - base);
|
||||
debugf(level, "%d: %p <%s + %04x>\n", depth, rip, name, rip - base);
|
||||
} else {
|
||||
debugf(DEBUG_FATAL, "%d: %p (unknown)\n", depth, rip);
|
||||
debugf(level, "%d: %p (unknown)\n", depth, rip);
|
||||
}
|
||||
|
||||
if (rbp_next == 0) {
|
||||
debugs(DEBUG_FATAL, "-- End of frame chain\n");
|
||||
debugs(level, "-- End of frame chain\n");
|
||||
return;
|
||||
}
|
||||
|
||||
debug_backtrace(rbp_next, depth + 1, limit - 1);
|
||||
debug_backtrace(level, rbp_next, depth + 1, limit - 1);
|
||||
}
|
||||
|
||||
////
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ void panicf(const char *fmt, ...) {
|
||||
va_end(args);
|
||||
|
||||
debugs(DEBUG_FATAL, "Call trace:\n");
|
||||
debug_backtrace(rbp, 0, 10);
|
||||
debug_backtrace(DEBUG_FATAL, rbp, 0, 10);
|
||||
debugs(DEBUG_FATAL, "\033[0,");
|
||||
|
||||
kfatal("--- Panic ---\n");
|
||||
|
||||
Reference in New Issue
Block a user