From 839ca6af79a729686feb1270bc49a5481480b2f6 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 9 Sep 2026 08:36:10 +0800 Subject: kernel: seperate idt --- kernel/src/init/int/idt.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 kernel/src/init/int/idt.rs (limited to 'kernel/src/init/int/idt.rs') diff --git a/kernel/src/init/int/idt.rs b/kernel/src/init/int/idt.rs new file mode 100644 index 0000000..89228cf --- /dev/null +++ b/kernel/src/init/int/idt.rs @@ -0,0 +1,20 @@ +pub static IDT: LazyLock = 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(); +} -- cgit v1.2.3