diff options
| -rw-r--r-- | arch/x86/kernel/signal_32.c | 6 | ||||
| -rw-r--r-- | arch/x86/kernel/signal_64.c | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c index 6fb5bcdd8933..22aae1683c14 100644 --- a/arch/x86/kernel/signal_32.c +++ b/arch/x86/kernel/signal_32.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
| 18 | #include <linux/sched.h> | 18 | #include <linux/sched.h> |
| 19 | #include <linux/wait.h> | 19 | #include <linux/wait.h> |
| 20 | #include <linux/tracehook.h> | ||
| 20 | #include <linux/elf.h> | 21 | #include <linux/elf.h> |
| 21 | #include <linux/smp.h> | 22 | #include <linux/smp.h> |
| 22 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
| @@ -558,8 +559,6 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, | |||
| 558 | * handler too. | 559 | * handler too. |
| 559 | */ | 560 | */ |
| 560 | regs->flags &= ~X86_EFLAGS_TF; | 561 | regs->flags &= ~X86_EFLAGS_TF; |
| 561 | if (test_thread_flag(TIF_SINGLESTEP)) | ||
| 562 | ptrace_notify(SIGTRAP); | ||
| 563 | 562 | ||
| 564 | spin_lock_irq(¤t->sighand->siglock); | 563 | spin_lock_irq(¤t->sighand->siglock); |
| 565 | sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask); | 564 | sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask); |
| @@ -568,6 +567,9 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, | |||
| 568 | recalc_sigpending(); | 567 | recalc_sigpending(); |
| 569 | spin_unlock_irq(¤t->sighand->siglock); | 568 | spin_unlock_irq(¤t->sighand->siglock); |
| 570 | 569 | ||
| 570 | tracehook_signal_handler(sig, info, ka, regs, | ||
| 571 | test_thread_flag(TIF_SINGLESTEP)); | ||
| 572 | |||
| 571 | return 0; | 573 | return 0; |
| 572 | } | 574 | } |
| 573 | 575 | ||
diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c index b45ef8ddd651..3beb2db88c5a 100644 --- a/arch/x86/kernel/signal_64.c +++ b/arch/x86/kernel/signal_64.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/errno.h> | 15 | #include <linux/errno.h> |
| 16 | #include <linux/wait.h> | 16 | #include <linux/wait.h> |
| 17 | #include <linux/ptrace.h> | 17 | #include <linux/ptrace.h> |
| 18 | #include <linux/tracehook.h> | ||
| 18 | #include <linux/unistd.h> | 19 | #include <linux/unistd.h> |
| 19 | #include <linux/stddef.h> | 20 | #include <linux/stddef.h> |
| 20 | #include <linux/personality.h> | 21 | #include <linux/personality.h> |
| @@ -444,8 +445,6 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, | |||
| 444 | * handler too. | 445 | * handler too. |
| 445 | */ | 446 | */ |
| 446 | regs->flags &= ~X86_EFLAGS_TF; | 447 | regs->flags &= ~X86_EFLAGS_TF; |
| 447 | if (test_thread_flag(TIF_SINGLESTEP)) | ||
| 448 | ptrace_notify(SIGTRAP); | ||
| 449 | 448 | ||
| 450 | spin_lock_irq(¤t->sighand->siglock); | 449 | spin_lock_irq(¤t->sighand->siglock); |
| 451 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); | 450 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); |
| @@ -453,6 +452,9 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, | |||
| 453 | sigaddset(¤t->blocked,sig); | 452 | sigaddset(¤t->blocked,sig); |
| 454 | recalc_sigpending(); | 453 | recalc_sigpending(); |
| 455 | spin_unlock_irq(¤t->sighand->siglock); | 454 | spin_unlock_irq(¤t->sighand->siglock); |
| 455 | |||
| 456 | tracehook_signal_handler(sig, info, ka, regs, | ||
| 457 | test_thread_flag(TIF_SINGLESTEP)); | ||
| 456 | } | 458 | } |
| 457 | 459 | ||
| 458 | return ret; | 460 | return ret; |
