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