summaryrefslogtreecommitdiffstats
path: root/lib/libc/arm
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2004-09-23 23:13:46 +0000
committercognet <cognet@FreeBSD.org>2004-09-23 23:13:46 +0000
commit8cecfaa3a47404a13496b061888c5c04d4fac4de (patch)
tree32703f8d39f7eea2d496a9e14a9d53c7c217cea9 /lib/libc/arm
parentec211a255c53ae140704712fdc65a8ca272c3a2d (diff)
downloadFreeBSD-src-8cecfaa3a47404a13496b061888c5c04d4fac4de.zip
FreeBSD-src-8cecfaa3a47404a13496b061888c5c04d4fac4de.tar.gz
Make setjmp()/longjmp() use sigprocmask.
Diffstat (limited to 'lib/libc/arm')
-rw-r--r--lib/libc/arm/gen/setjmp.S18
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}
OpenPOWER on IntegriCloud