diff --git a/src/interrupts.rs b/src/interrupts.rs index f9b98fd9..0be9ec40 100644 --- a/src/interrupts.rs +++ b/src/interrupts.rs @@ -1,5 +1,11 @@ -use x86_64::structures::idt::InterruptDescriptorTable; +use crate::println; +use x86_64::structures::idt::{ExceptionStackFrame, InterruptDescriptorTable}; pub fn init_idt() { let mut idt = InterruptDescriptorTable::new(); + idt.breakpoint.set_handler_fn(breakpoint_handler); +} + +extern "x86-interrupt" fn breakpoint_handler(stack_frame: &mut ExceptionStackFrame) { + println!("EXCEPTION: BREAKPOINT\n{:#?}", stack_frame); } diff --git a/src/lib.rs b/src/lib.rs index 2bb61615..562de39e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,5 @@ #![cfg_attr(not(test), no_std)] +#![feature(abi_x86_interrupt)] pub mod interrupts; pub mod serial;