kernel, libc: signals fixes
. kernel: signal handler args for ARM . kernel: sanity check return address (LSB indicates thumb mode) . libc: properly retrieve signal mask for ARM together fix test37 on ARM. Change-Id: I4e00f754c50104ed85c7fdf8ec5ad54568f20a81
This commit is contained in:
		
							parent
							
								
									ccdc3ff73f
								
							
						
					
					
						commit
						57bab02d57
					
				@ -86,6 +86,12 @@ int do_sigsend(struct proc * caller, message * m_ptr)
 | 
			
		||||
   * handler
 | 
			
		||||
   */
 | 
			
		||||
  rp->p_reg.lr = (reg_t) fr.sf_retadr;
 | 
			
		||||
  if(rp->p_reg.lr & 1) { printf("sigsend: LSB LR makes no sense.\n"); }
 | 
			
		||||
 | 
			
		||||
  /* pass signal handler parameters in registers */
 | 
			
		||||
  rp->p_reg.retreg = (reg_t) fr.sf_signo;
 | 
			
		||||
  rp->p_reg.r1 = (reg_t) fr.sf_code;
 | 
			
		||||
  rp->p_reg.r2 = (reg_t) fr.sf_scp;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* Copy the sigframe structure to the user's stack. */
 | 
			
		||||
 | 
			
		||||
@ -87,7 +87,11 @@ ENTRY(__longjmp14)
 | 
			
		||||
	stmfd	sp!, {r0-r2, r14}
 | 
			
		||||
	mov	r2, #0x00000000
 | 
			
		||||
	add	r1, r0, #(_JB_SIGMASK * 4)
 | 
			
		||||
#ifdef __minix
 | 
			
		||||
	mov	r0, #2				/* SIG_SETMASK */
 | 
			
		||||
#else
 | 
			
		||||
	mov	r0, #3				/* SIG_SETMASK */
 | 
			
		||||
#endif
 | 
			
		||||
	bl	PIC_SYM(_C_LABEL(__sigprocmask14), PLT)
 | 
			
		||||
	ldmfd	sp!, {r0-r2, r14}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user