Add level argument to debug_backtrace()

This commit is contained in:
Mark
2020-07-24 14:35:47 +03:00
parent 014463db5a
commit dfe1531c56
4 changed files with 9 additions and 9 deletions
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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");