diff options
Diffstat (limited to 'arch/x86/kernel/ptrace.c')
| -rw-r--r-- | arch/x86/kernel/ptrace.c | 7 |
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 | ||
| 1455 | void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code) | 1455 | void 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 | } |
