]> Zhao Yanbai Git Server - minix.git/commitdiff
kernel, libc: signals fixes 93/293/2
authorBen Gras <ben@minix3.org>
Mon, 4 Feb 2013 03:08:12 +0000 (04:08 +0100)
committerBen Gras <ben@minix3.org>
Mon, 4 Feb 2013 11:03:46 +0000 (12:03 +0100)
. 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

kernel/system/do_sigsend.c
lib/libc/arch/arm/gen/setjmp.S

index ddb8db93ca3936c5a107031061f6e8a3e989380f..eeb13f6c77d420c7a482c9926e02d5de6940a925 100644 (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. */
index 3f3750c9c329ec97fb288dfab2e0cbcef232ad40..56b8202e054f645d33c66a2236900b2914cef6c8 100644 (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}