hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/boot/idt.zig
diff options
context:
space:
mode:
Diffstat (limited to 'boot/idt.zig')
-rw-r--r--boot/idt.zig7
1 files changed, 7 insertions, 0 deletions
diff --git a/boot/idt.zig b/boot/idt.zig
index adff4b3..127fd8e 100644
--- a/boot/idt.zig
+++ b/boot/idt.zig
@@ -140,6 +140,13 @@ export fn exceptionHandler(frame: *Frame) callconv(.c) noreturn {
serial.write(" cs="); writeHex(frame.cs);
serial.write("\r\n rflags="); writeHex(frame.rflags);
serial.write(" rsp="); writeHex(frame.rsp);
+ // page faults stash the offending address in CR2
+ if (frame.vector == 14) {
+ const cr2 = asm volatile ("mov %%cr2, %[out]"
+ : [out] "=r" (-> u64),
+ );
+ serial.write("\r\n cr2="); writeHex(cr2);
+ }
serial.write("\r\n");
while (true) asm volatile ("hlt");
}