|
@@ -353,7 +353,6 @@ ia32_setup_sigcontext(struct sigcontext_ia32 __user *sc, struct _fpstate_ia32 __
|
|
|
struct pt_regs *regs, unsigned int mask)
|
|
|
{
|
|
|
int tmp, err = 0;
|
|
|
- u32 eflags;
|
|
|
|
|
|
tmp = 0;
|
|
|
__asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp));
|
|
@@ -378,10 +377,7 @@ ia32_setup_sigcontext(struct sigcontext_ia32 __user *sc, struct _fpstate_ia32 __
|
|
|
err |= __put_user(current->thread.trap_no, &sc->trapno);
|
|
|
err |= __put_user(current->thread.error_code, &sc->err);
|
|
|
err |= __put_user((u32)regs->rip, &sc->eip);
|
|
|
- eflags = regs->eflags;
|
|
|
- if (current->ptrace & PT_PTRACED)
|
|
|
- eflags &= ~TF_MASK;
|
|
|
- err |= __put_user((u32)eflags, &sc->eflags);
|
|
|
+ err |= __put_user((u32)regs->eflags, &sc->eflags);
|
|
|
err |= __put_user((u32)regs->rsp, &sc->esp_at_signal);
|
|
|
|
|
|
tmp = save_i387_ia32(current, fpstate, regs, 0);
|
|
@@ -505,13 +501,9 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,
|
|
|
regs->ss = __USER32_DS;
|
|
|
|
|
|
set_fs(USER_DS);
|
|
|
- if (regs->eflags & TF_MASK) {
|
|
|
- if (current->ptrace & PT_PTRACED) {
|
|
|
- ptrace_notify(SIGTRAP);
|
|
|
- } else {
|
|
|
- regs->eflags &= ~TF_MASK;
|
|
|
- }
|
|
|
- }
|
|
|
+ regs->eflags &= ~TF_MASK;
|
|
|
+ if (test_thread_flag(TIF_SINGLESTEP))
|
|
|
+ ptrace_notify(SIGTRAP);
|
|
|
|
|
|
#if DEBUG_SIG
|
|
|
printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
|
|
@@ -605,13 +597,9 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
|
|
regs->ss = __USER32_DS;
|
|
|
|
|
|
set_fs(USER_DS);
|
|
|
- if (regs->eflags & TF_MASK) {
|
|
|
- if (current->ptrace & PT_PTRACED) {
|
|
|
- ptrace_notify(SIGTRAP);
|
|
|
- } else {
|
|
|
- regs->eflags &= ~TF_MASK;
|
|
|
- }
|
|
|
- }
|
|
|
+ regs->eflags &= ~TF_MASK;
|
|
|
+ if (test_thread_flag(TIF_SINGLESTEP))
|
|
|
+ ptrace_notify(SIGTRAP);
|
|
|
|
|
|
#if DEBUG_SIG
|
|
|
printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
|