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.c17
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();