]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/signal_32.c
Merge current mainline tree into linux-omap tree
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / signal_32.c
index 2bf5c9aed1066f5c86cdac7100966396a938ab2d..0157a6f0f41f501ee19c607aa3a5c593c7824d7f 100644 (file)
@@ -198,12 +198,15 @@ asmlinkage int sys_sigreturn(unsigned long __unused)
        return ax;
 
 badframe:
-       if (show_unhandled_signals && printk_ratelimit())
+       if (show_unhandled_signals && printk_ratelimit()) {
                printk("%s%s[%d] bad frame in sigreturn frame:%p ip:%lx"
-                      " sp:%lx oeax:%lx\n",
+                      " sp:%lx oeax:%lx",
                    task_pid_nr(current) > 1 ? KERN_INFO : KERN_EMERG,
                    current->comm, task_pid_nr(current), frame, regs->ip,
                    regs->sp, regs->orig_ax);
+               print_vma_addr(" in ", regs->ip);
+               printk("\n");
+       }
 
        force_sig(SIGSEGV, current);
        return 0;
@@ -365,7 +368,7 @@ static int setup_frame(int sig, struct k_sigaction *ka,
        if (current->binfmt->hasvdso)
                restorer = VDSO32_SYMBOL(current->mm->context.vdso, sigreturn);
        else
-               restorer = (void *)&frame->retcode;
+               restorer = &frame->retcode;
        if (ka->sa.sa_flags & SA_RESTORER)
                restorer = ka->sa.sa_restorer;
 
@@ -404,7 +407,7 @@ static int setup_frame(int sig, struct k_sigaction *ka,
         * The tracer may want to single-step inside the
         * handler too.
         */
-       regs->flags &= ~TF_MASK;
+       regs->flags &= ~(TF_MASK | X86_EFLAGS_DF);
        if (test_thread_flag(TIF_SINGLESTEP))
                ptrace_notify(SIGTRAP);
 
@@ -497,7 +500,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
         * The tracer may want to single-step inside the
         * handler too.
         */
-       regs->flags &= ~TF_MASK;
+       regs->flags &= ~(TF_MASK | X86_EFLAGS_DF);
        if (test_thread_flag(TIF_SINGLESTEP))
                ptrace_notify(SIGTRAP);
 
@@ -575,7 +578,7 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
  * want to handle. Thus you cannot kill init even with a SIGKILL even by
  * mistake.
  */
-static void fastcall do_signal(struct pt_regs *regs)
+static void do_signal(struct pt_regs *regs)
 {
        siginfo_t info;
        int signr;