summaryrefslogtreecommitdiff
path: root/src/arch/amd64/panic.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/amd64/panic.c')
-rw-r--r--src/arch/amd64/panic.c29
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();