blob: 25124340b4e022e1232097df7c2bc97d3d3af59f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
use spin::LazyLock;
use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};
use crate::printlnk;
pub static IDT: LazyLock<InterruptDescriptorTable> = LazyLock::new(
|| {
let mut idt = InterruptDescriptorTable::new();
idt.breakpoint.set_handler_fn(breakpoint_handler);
idt.double_fault.set_handler_fn(double_fault_handler);
idt
},
);
extern "x86-interrupt" fn double_fault_handler(stack_frame: InterruptStackFrame, error_code: u64) -> ! {
panic!("EXCEPTION: DOUBLE FAULT\n{stack_frame:#?}\nERROR CODE:{error_code}");
}
extern "x86-interrupt" fn breakpoint_handler(stack_frame: InterruptStackFrame) {
_ = printlnk!("EXCEPTION: BREAKPOINT\n{stack_frame:#?}");
}
pub fn init() {
IDT.load();
}
|