diff options
author | cognet <cognet@FreeBSD.org> | 2004-09-23 23:13:46 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2004-09-23 23:13:46 +0000 |
commit | 8cecfaa3a47404a13496b061888c5c04d4fac4de (patch) | |
tree | 32703f8d39f7eea2d496a9e14a9d53c7c217cea9 /lib/libc/arm/gen | |
parent | ec211a255c53ae140704712fdc65a8ca272c3a2d (diff) | |
download | FreeBSD-src-8cecfaa3a47404a13496b061888c5c04d4fac4de.zip FreeBSD-src-8cecfaa3a47404a13496b061888c5c04d4fac4de.tar.gz |
Make setjmp()/longjmp() use sigprocmask.
Diffstat (limited to 'lib/libc/arm/gen')
-rw-r--r-- | lib/libc/arm/gen/setjmp.S | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/lib/libc/arm/gen/setjmp.S b/lib/libc/arm/gen/setjmp.S index be12412..79aee9f 100644 --- a/lib/libc/arm/gen/setjmp.S +++ b/lib/libc/arm/gen/setjmp.S @@ -48,16 +48,14 @@ __FBSDID("$FreeBSD$"); ENTRY(setjmp) /* Block all signals and retrieve the old signal mask */ stmfd sp!, {r0, r14} - mov r0, #0x00000000 + add r2, r0, #4 /* oset */ + mov r0, #0x00000001 /* SIG_BLOCK */ + mov r1, #0 /* set */ - bl PIC_SYM(_C_LABEL(sigblock), PLT) - mov r1, r0 + bl PIC_SYM(_C_LABEL(sigprocmask), PLT) ldmfd sp!, {r0, r14} - /* Store signal mask */ - str r1, [r0, #(25 * 4)] - ldr r1, .Lsetjmp_magic str r1, [r0], #4 @@ -88,14 +86,16 @@ ENTRY(__longjmp) bne botch /* Fetch signal mask */ - ldr r2, [r0, #(25 * 4)] + add r2, r0, #4 /* Set signal mask */ stmfd sp!, {r0, r1, r14} sub sp, sp, #4 /* align the stack */ - mov r0, r2 - bl PIC_SYM(_C_LABEL(sigsetmask), PLT) + mov r1, r2 + mov r0, #3 /* SIG_SETMASK */ + mov r2, #0 + bl PIC_SYM(_C_LABEL(sigprocmask), PLT) add sp, sp, #4 /* unalign the stack */ ldmfd sp!, {r0, r1, r14} |