summaryrefslogtreecommitdiff
path: root/src/arch/amd64/panic.c
diff options
context:
space:
mode:
authortrimill <trimill@trimillxyz.org>2024-01-30 10:19:33 -0500
committertrimill <trimill@trimillxyz.org>2024-01-30 10:19:33 -0500
commit6b8f33c22d41488b88fcd35331867858d8f67763 (patch)
tree4a62ac9c6136a9e9b94cab0b6838add70accfe31 /src/arch/amd64/panic.c
parentrefactor, improve exception message (diff)
downloadcorn-6b8f33c22d41488b88fcd35331867858d8f67763.tar.gz
corn-6b8f33c22d41488b88fcd35331867858d8f67763.tar.bz2
corn-6b8f33c22d41488b88fcd35331867858d8f67763.zip
added backtraces
Diffstat (limited to 'src/arch/amd64/panic.c')
-rw-r--r--src/arch/amd64/panic.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/arch/amd64/panic.c b/src/arch/amd64/panic.c
index c034b90..7f54f98 100644
--- a/src/arch/amd64/panic.c
+++ b/src/arch/amd64/panic.c
@@ -1,4 +1,5 @@
#include <panic.h>
+#include <backtrace.h>
#include "serial.h"
#include "bindings.h"
@@ -12,7 +13,19 @@ _Noreturn void _panic_impl(char *line, char *file, char *msg) {
serial_out_str(line);
serial_out_str(":\n");
serial_out_str(msg);
- serial_out('\n');
+ serial_out_str("\n\n");
+ log_backtrace();
+ while (1) {
+ halt();
+ }
+}
+
+_Noreturn void panic_interrupt(void *ip, void *bp, char *msg) {
+ cli();
+ serial_out_str("\n\n!!! PANIC !!!\n");
+ serial_out_str(msg);
+ serial_out_str("\n\n");
+ log_backtrace_ex(ip, bp);
while (1) {
halt();
}