From 3bbc2a0bdce5a4159251b485972f14ba89820e2d Mon Sep 17 00:00:00 2001
From: Philipp Oppermann <dev@phil-opp.com>
Date: Tue, 18 Apr 2017 15:14:27 +0200
Subject: [PATCH] Add a simple handler function for the breakpoint exception

---
 src/interrupts.rs | 9 ++++++++-
 src/lib.rs        | 1 +
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/interrupts.rs b/src/interrupts.rs
index 7a3beeb..e94bec1 100644
--- a/src/interrupts.rs
+++ b/src/interrupts.rs
@@ -1,5 +1,12 @@
-use x86_64::structures::idt::Idt;
+use x86_64::structures::idt::{Idt, ExceptionStackFrame};
 
 pub fn init() {
     let mut idt = Idt::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 efdff65..2496def 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -5,6 +5,7 @@
 #![feature(unique)]
 #![feature(allocator_api)]
 #![feature(global_allocator)]
+#![feature(abi_x86_interrupt)]
 #![no_std]