]> Zhao Yanbai Git Server - minix.git/commitdiff
kernel: fix case of EAX getting clobbered after sigreturn.
authorBen Gras <ben@minix3.org>
Tue, 20 Jul 2010 17:10:09 +0000 (17:10 +0000)
committerBen Gras <ben@minix3.org>
Tue, 20 Jul 2010 17:10:09 +0000 (17:10 +0000)
kernel/arch/i386/memory.c
kernel/proc.h
kernel/system/do_sigreturn.c

index 8305df8c025d768f10aa7ad12df608c930bdf2d9..88054dff9cbae4091a52852a84e3926b30df7184 100644 (file)
@@ -612,7 +612,9 @@ PUBLIC void delivermsg(struct proc *rp)
                r = OK;
        }
 
-       rp->p_reg.retreg = r;
+       if(!(rp->p_misc_flags & MF_CONTEXT_SET)) {
+               rp->p_reg.retreg = r;
+       }
 }
 
 PRIVATE char *flagstr(u32_t e, const int dir)
index 5ce97d37915f805b662f16e2d8c99b4e901f16e4..dc70a806c321b25e8bcc3ccc4245eabc6e6d57a5 100644 (file)
@@ -224,6 +224,7 @@ struct proc {
 #define MF_FPU_INITIALIZED     0x1000  /* process already used math, so fpu
                                         * regs are significant (initialized)*/
 #define MF_SENDING_FROM_KERNEL 0x2000 /* message of this process is from kernel */
+#define MF_CONTEXT_SET 0x4000 /* don't touch context */
 
 /* Magic process table addresses. */
 #define BEG_PROC_ADDR (&proc[0])
index 6e8e1abe1ad7f895ee1a24ceb42f5fabf15ffd79..7f91a0a3459159710983617e84dd4aac023bab5c 100644 (file)
@@ -65,6 +65,8 @@ PUBLIC int do_sigreturn(struct proc * caller, message * m_ptr)
   }
 #endif
 
+  rp->p_misc_flags |= MF_CONTEXT_SET;
+
   return(OK);
 }
 #endif /* USE_SIGRETURN */