kernel: fix case of EAX getting clobbered after sigreturn.
This commit is contained in:
		
							parent
							
								
									13be76efe5
								
							
						
					
					
						commit
						c0074d3aa9
					
				| @ -612,8 +612,10 @@ PUBLIC void delivermsg(struct proc *rp) | |||||||
| 		r = OK; | 		r = OK; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if(!(rp->p_misc_flags & MF_CONTEXT_SET)) { | ||||||
| 		rp->p_reg.retreg = r; | 		rp->p_reg.retreg = r; | ||||||
| 	} | 	} | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| PRIVATE char *flagstr(u32_t e, const int dir) | PRIVATE char *flagstr(u32_t e, const int dir) | ||||||
| { | { | ||||||
|  | |||||||
| @ -224,6 +224,7 @@ struct proc { | |||||||
| #define MF_FPU_INITIALIZED	0x1000  /* process already used math, so fpu | #define MF_FPU_INITIALIZED	0x1000  /* process already used math, so fpu | ||||||
| 					 * regs are significant (initialized)*/ | 					 * regs are significant (initialized)*/ | ||||||
| #define MF_SENDING_FROM_KERNEL	0x2000 /* message of this process is from kernel */ | #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. */ | /* Magic process table addresses. */ | ||||||
| #define BEG_PROC_ADDR (&proc[0]) | #define BEG_PROC_ADDR (&proc[0]) | ||||||
|  | |||||||
| @ -65,6 +65,8 @@ PUBLIC int do_sigreturn(struct proc * caller, message * m_ptr) | |||||||
|   } |   } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  |   rp->p_misc_flags |= MF_CONTEXT_SET; | ||||||
|  | 
 | ||||||
|   return(OK); |   return(OK); | ||||||
| } | } | ||||||
| #endif /* USE_SIGRETURN */ | #endif /* USE_SIGRETURN */ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Ben Gras
						Ben Gras