summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrimill <trimill@trimillxyz.org>2024-01-29 16:27:03 -0500
committertrimill <trimill@trimillxyz.org>2024-01-29 16:27:03 -0500
commite57c64c0e96228baf69b1c43a065c1170fabd18e (patch)
treef3f8f40f09086d197beefe9571e329f2785e918b
parentfix old testing code (diff)
downloadcorn-e57c64c0e96228baf69b1c43a065c1170fabd18e.tar.gz
corn-e57c64c0e96228baf69b1c43a065c1170fabd18e.tar.bz2
corn-e57c64c0e96228baf69b1c43a065c1170fabd18e.zip
panic
Diffstat (limited to '')
-rw-r--r--include/panic.h8
-rw-r--r--src/arch/amd64/panic.c18
2 files changed, 26 insertions, 0 deletions
diff --git a/include/panic.h b/include/panic.h
new file mode 100644
index 0000000..21715fd
--- /dev/null
+++ b/include/panic.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#define _PANIC_STR(x) _PANIC_STR2(x)
+#define _PANIC_STR2(x) #x
+
+#define panic(msg) _panic_impl(_PANIC_STR(__LINE__), __FILE__, msg)
+
+_Noreturn void _panic_impl(char *line, char *file, char *msg);
diff --git a/src/arch/amd64/panic.c b/src/arch/amd64/panic.c
new file mode 100644
index 0000000..227ecce
--- /dev/null
+++ b/src/arch/amd64/panic.c
@@ -0,0 +1,18 @@
+#include <panic.h>
+
+#include "serial.h"
+#include "bindings.h"
+
+_Noreturn void _panic_impl(char *line, char *file, char *msg) {
+ cli();
+ serial_out_str("\n\n!!! PANIC !!!\n");
+ serial_out_str(msg);
+ serial_out_str("\nin file ");
+ serial_out_str(file);
+ serial_out_str(" at line ");
+ serial_out_str(line);
+ serial_out('\n');
+ while (1) {
+ halt();
+ }
+}