diff options
Diffstat (limited to 'src/arch/amd64/panic.c')
-rw-r--r-- | src/arch/amd64/panic.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/arch/amd64/panic.c b/src/arch/amd64/panic.c index fa750bc..6c35727 100644 --- a/src/arch/amd64/panic.c +++ b/src/arch/amd64/panic.c @@ -1,31 +1,34 @@ #include <panic.h> #include <backtrace.h> #include <stdarg.h> + #include <lib.h> #include "bindings.h" -void _panic_impl(char *line, char *file, char *format, ...) { +_Noreturn void _panic_impl(char *line, char *file, char *format, ...) { cli(); va_list list; - va_start(list, msg); + va_start(list, format); kprintf("\n\n!!! PANIC !!!\n"); kprintf("In file %s at line %s:\n", file, line); kvprintf(format, list); kprintf("\n\n"); + log_backtrace(); while (1) { halt(); } } -void _panic_interrupt(void *ip, void *bp, char *format, ...) { - cli(); +_Noreturn void panic_interrupt(void *ip, void *bp, char *msg, ...) { va_list list; va_start(list, msg); - kprintf("\n\n!!! PANIC !!!\n"); - kvprintf(format, list); - kprintf("\n\n"); + cli(); + kputs("\n\n!!! PANIC !!!\n"); + kvprintf(msg, list); + kputs("\n\n"); + log_backtrace_ex(ip, bp); while (1) { halt(); |