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