]> err.no Git - linux-2.6/blobdiff - arch/um/os-Linux/skas/process.c
Merge branch 'linus' into x86/cleanups
[linux-2.6] / arch / um / os-Linux / skas / process.c
index b14829469faefdf99a2511beede3ea6515c21927..172ad8f72e12e71af5d2b1463a3ec3af272095ed 100644 (file)
@@ -55,7 +55,7 @@ static int ptrace_dump_regs(int pid)
  * Signals that are OK to receive in the stub - we'll just continue it.
  * SIGWINCH will happen when UML is inside a detached screen.
  */
-#define STUB_SIG_MASK (1 << SIGVTALRM)
+#define STUB_SIG_MASK ((1 << SIGVTALRM) | (1 << SIGWINCH))
 
 /* Signals that the stub will finish with - anything else is an error */
 #define STUB_DONE_MASK (1 << SIGTRAP)
@@ -115,6 +115,14 @@ void get_skas_faultinfo(int pid, struct faultinfo * fi)
                               sizeof(struct ptrace_faultinfo));
        }
        else {
+               unsigned long fpregs[FP_SIZE];
+
+               err = get_fp_registers(pid, fpregs);
+               if (err < 0) {
+                       printk(UM_KERN_ERR "save_fp_registers returned %d\n",
+                              err);
+                       fatal_sigsegv();
+               }
                err = ptrace(PTRACE_CONT, pid, 0, SIGSEGV);
                if (err) {
                        printk(UM_KERN_ERR "Failed to continue stub, pid = %d, "
@@ -128,6 +136,13 @@ void get_skas_faultinfo(int pid, struct faultinfo * fi)
                 * the stub stack page. We just have to copy it.
                 */
                memcpy(fi, (void *)current_stub_stack(), sizeof(*fi));
+
+               err = put_fp_registers(pid, fpregs);
+               if (err < 0) {
+                       printk(UM_KERN_ERR "put_fp_registers returned %d\n",
+                              err);
+                       fatal_sigsegv();
+               }
        }
 }
 
@@ -427,7 +442,7 @@ void userspace(struct uml_pt_regs *regs)
                                unblock_signals();
                                break;
                        default:
-                               printk(UM_KERN_ERR "userspace - child stopped "
+                               printk(UM_KERN_ERR "userspace - child stopped "
                                       "with signal %d\n", sig);
                                fatal_sigsegv();
                        }