aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/ptrace.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/ptrace.c')
-rw-r--r--arch/x86/kernel/ptrace.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index e375b658efc3..42ec4421e10b 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1452,7 +1452,8 @@ const struct user_regset_view *task_user_regset_view(struct task_struct *task)
1452#endif 1452#endif
1453} 1453}
1454 1454
1455void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code) 1455void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
1456 int error_code, int si_code)
1456{ 1457{
1457 struct siginfo info; 1458 struct siginfo info;
1458 1459
@@ -1461,7 +1462,7 @@ void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code)
1461 1462
1462 memset(&info, 0, sizeof(info)); 1463 memset(&info, 0, sizeof(info));
1463 info.si_signo = SIGTRAP; 1464 info.si_signo = SIGTRAP;
1464 info.si_code = TRAP_BRKPT; 1465 info.si_code = si_code;
1465 1466
1466 /* User-mode ip? */ 1467 /* User-mode ip? */
1467 info.si_addr = user_mode_vm(regs) ? (void __user *) regs->ip : NULL; 1468 info.si_addr = user_mode_vm(regs) ? (void __user *) regs->ip : NULL;
@@ -1548,5 +1549,5 @@ asmregparm void syscall_trace_leave(struct pt_regs *regs)
1548 */ 1549 */
1549 if (test_thread_flag(TIF_SINGLESTEP) && 1550 if (test_thread_flag(TIF_SINGLESTEP) &&
1550 tracehook_consider_fatal_signal(current, SIGTRAP, SIG_DFL)) 1551 tracehook_consider_fatal_signal(current, SIGTRAP, SIG_DFL))
1551 send_sigtrap(current, regs, 0); 1552 send_sigtrap(current, regs, 0, TRAP_BRKPT);
1552} 1553}