summaryrefslogtreecommitdiff
path: root/kernel/src/panic.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/panic.c')
-rw-r--r--kernel/src/panic.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/src/panic.c b/kernel/src/panic.c
new file mode 100644
index 0000000..96ad3b9
--- /dev/null
+++ b/kernel/src/panic.c
@@ -0,0 +1,25 @@
+#include <sys.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <panic.h>
+#include <print.h>
+#include <term.h>
+
+__attribute__((noreturn))
+void _panic_impl(char* msg, int line, char* file, ...) {
+ arch_disable_int();
+ va_list args;
+ va_start(args, file);
+ term_clear();
+ term_setpos(0, 0);
+ term_setfg(VGA_LIGHT_RED);
+ puts("!!!PANIC!!!\n");
+ term_setfg(VGA_WHITE);
+ vprintk(msg, args);
+ if (!term_newline()) putchar('\n');
+ printk("\nin %s at line %d\n", file, line);
+ term_flush();
+ while(1) {
+ arch_halt();
+ }
+}