summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/isr.c3
-rw-r--r--kernel/main.c8
-rw-r--r--kernel/panic.h14
-rw-r--r--kernel/proc.c2
4 files changed, 21 insertions, 6 deletions
diff --git a/kernel/isr.c b/kernel/isr.c
index 331e9a5..e6a9871 100644
--- a/kernel/isr.c
+++ b/kernel/isr.c
@@ -1,4 +1,5 @@
#include <kernel/isr.h>
+#include <kernel/panic.h>
#include <kernel/tty.h>
#include <stdbool.h>
#include <stdint.h>
@@ -8,7 +9,7 @@ bool isr_test_interrupt_called = false;
__attribute__((interrupt))
void isr_double_fault(struct interrupt_frame *frame) {
tty_const("#DF");
- for(;;);
+ panic();
}
__attribute__((interrupt))
diff --git a/kernel/main.c b/kernel/main.c
index bc1e0d3..85a85d6 100644
--- a/kernel/main.c
+++ b/kernel/main.c
@@ -1,9 +1,10 @@
#include <kernel/gdt.h>
#include <kernel/idt.h>
#include <kernel/mem.h>
+#include <kernel/panic.h>
#include <kernel/proc.h>
#include <kernel/tty.h>
-#include <platform/sysenter.h>
+#include <platform/asm.h>
void r3_test();
@@ -23,7 +24,6 @@ void kmain()
void r3_test() {
tty_const("ok");
- asm("cli"); // privileged instruction, should cause a GP
- tty_const(" this shouldn't happen");
- for (;;) {}
+ asm("cli");
+ panic();
}
diff --git a/kernel/panic.h b/kernel/panic.h
new file mode 100644
index 0000000..7d2ea5f
--- /dev/null
+++ b/kernel/panic.h
@@ -0,0 +1,14 @@
+#pragma once
+#include <kernel/tty.h>
+#include <platform/asm.h>
+
+// dumb c shit
+#define panic_tostr2(x) #x
+#define panic_tostr(x) panic_tostr2(x)
+
+#define panic() do { \
+ tty_const(" PANIC! at the "); \
+ tty_const(__func__); \
+ tty_const(" (" __FILE__ ":" panic_tostr(__LINE__) ") "); \
+ halt_cpu(); \
+} while (0)
diff --git a/kernel/proc.c b/kernel/proc.c
index 959ef94..776238c 100644
--- a/kernel/proc.c
+++ b/kernel/proc.c
@@ -1,6 +1,6 @@
#include <kernel/mem.h>
#include <kernel/proc.h>
-#include <platform/sysenter.h>
+#include <platform/asm.h>
struct process *process_current;