1
0
Fork 0
forked from koniifer/ableos

interrupts: page fault handler

This commit is contained in:
TheOddGarlic 2022-08-20 09:26:59 +03:00
parent 346d3a9166
commit fe69e31b91

View file

@ -12,7 +12,7 @@ use pic8259::ChainedPics;
use qrcode::QrCode; use qrcode::QrCode;
use seq_macro::seq; use seq_macro::seq;
use spin::Lazy; use spin::Lazy;
use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame}; use x86_64::{structures::idt::{InterruptDescriptorTable, InterruptStackFrame, PageFaultErrorCode}, registers::control::Cr2};
use super::sloop; use super::sloop;
@ -56,6 +56,7 @@ static IDT: Lazy<InterruptDescriptorTable> = Lazy::new(|| {
}); });
idt.breakpoint.set_handler_fn(breakpoint_handler); idt.breakpoint.set_handler_fn(breakpoint_handler);
idt.page_fault.set_handler_fn(page_fault_handler);
unsafe { unsafe {
idt.double_fault idt.double_fault
.set_handler_fn(double_fault_handler) .set_handler_fn(double_fault_handler)
@ -93,13 +94,22 @@ extern "x86-interrupt" fn breakpoint_handler(stack_frame: InterruptStackFrame) {
trace!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame); trace!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame);
} }
extern "x86-interrupt" fn page_fault_handler(
stack_frame: InterruptStackFrame,
error_code: PageFaultErrorCode
) {
error!("EXCEPTION: PAGE FAULT {error_code:?}\n{:#?}", stack_frame);
trace!("CR2: {:x}", Cr2::read_raw());
loop {}
}
extern "x86-interrupt" fn double_fault_handler( extern "x86-interrupt" fn double_fault_handler(
stack_frame: InterruptStackFrame, stack_frame: InterruptStackFrame,
// NOTE(able): ignore this always is 0 // NOTE(able): ignore this always is 0
_error_code: u64, _error_code: u64,
) -> ! { ) -> ! {
bsod(BSODSource::DoubleFault(&stack_frame)); // bsod(BSODSource::DoubleFault(&stack_frame));
// panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame); panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame);
} }
/* SAFETY /* SAFETY