diff options
author | Roland McGrath <roland@redhat.com> | 2008-03-14 17:46:38 -0700 |
---|---|---|
committer | Roland McGrath <roland@redhat.com> | 2008-07-26 14:37:59 -0700 |
commit | 36a033082b5243d45d508c5ccd47a754edbc6821 (patch) | |
tree | 5713fa16a1681092936409e3a372c27421778555 /arch/x86/kernel/signal_32.c | |
parent | a048d3aff8b828b6c0fa7ddd90a531248ab4e0f9 (diff) | |
download | kernel_samsung_smdk4412-36a033082b5243d45d508c5ccd47a754edbc6821.zip kernel_samsung_smdk4412-36a033082b5243d45d508c5ccd47a754edbc6821.tar.gz kernel_samsung_smdk4412-36a033082b5243d45d508c5ccd47a754edbc6821.tar.bz2 |
x86: tracehook_signal_handler
This makes the x86 signal handling code use tracehook_signal_handler() in
place of calling into ptrace guts. The call is moved after the sa_mask
processing, but there is no other change. This cleanup doesn't matter to
existing debuggers, but is the sensible thing: have all facets of the
handler setup complete before the debugger inspects the task again.
Signed-off-by: Roland McGrath <roland@redhat.com>
Diffstat (limited to 'arch/x86/kernel/signal_32.c')
-rw-r--r-- | arch/x86/kernel/signal_32.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c index 6fb5bcd..22aae16 100644 --- a/arch/x86/kernel/signal_32.c +++ b/arch/x86/kernel/signal_32.c @@ -17,6 +17,7 @@ #include <linux/errno.h> #include <linux/sched.h> #include <linux/wait.h> +#include <linux/tracehook.h> #include <linux/elf.h> #include <linux/smp.h> #include <linux/mm.h> @@ -558,8 +559,6 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, * handler too. */ regs->flags &= ~X86_EFLAGS_TF; - if (test_thread_flag(TIF_SINGLESTEP)) - ptrace_notify(SIGTRAP); spin_lock_irq(¤t->sighand->siglock); 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, recalc_sigpending(); spin_unlock_irq(¤t->sighand->siglock); + tracehook_signal_handler(sig, info, ka, regs, + test_thread_flag(TIF_SINGLESTEP)); + return 0; } |