diff --git a/src/arch/x86_64/interrupt/exception.rs b/src/arch/x86_64/interrupt/exception.rs
index 0aba0049be056c82aa4caa23f28bda6302fcfaf1..e76f39359e4e6186220516e9c7332c1d25353ad5 100644
--- a/src/arch/x86_64/interrupt/exception.rs
+++ b/src/arch/x86_64/interrupt/exception.rs
@@ -49,8 +49,15 @@ interrupt_stack!(non_maskable, stack, {
 
 interrupt_stack!(breakpoint, stack, {
     println!("Breakpoint trap");
-    stack.dump();
-    ksignal(SIGTRAP);
+
+    let guard = ptrace::set_process_regs(stack);
+
+    if ptrace::breakpoint_callback(PTRACE_STOP_BREAKPOINT, None).is_none() {
+        drop(guard);
+
+        stack.dump();
+        ksignal(SIGTRAP);
+    }
 });
 
 interrupt_stack!(overflow, stack, {
diff --git a/syscall b/syscall
index 75a1e6f970bad42c7460b8164e59028c61eaf645..bf5e138def0f8ad9c4ce87b8eca2d96b57aef8ea 160000
--- a/syscall
+++ b/syscall
@@ -1 +1 @@
-Subproject commit 75a1e6f970bad42c7460b8164e59028c61eaf645
+Subproject commit bf5e138def0f8ad9c4ce87b8eca2d96b57aef8ea