diff options
Diffstat (limited to 'boot/idt.zig')
| -rw-r--r-- | boot/idt.zig | 7 |
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"); } |
