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:
Ben Gras 2013-02-04 04:08:12 +01:00
parent ccdc3ff73f
commit 57bab02d57
2 changed files with 10 additions and 0 deletions

View File

@ -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. */

View File

@ -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}