diff options
author | cognet <cognet@FreeBSD.org> | 2004-11-09 16:49:14 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2004-11-09 16:49:14 +0000 |
commit | 98ebb25e56d0f452f1cfd5d33770eeaedca698fd (patch) | |
tree | 8ccabba1a460da5c135164486fcb8597cd0c3fc5 /lib/libc/arm/gen/setjmp.S | |
parent | 7e3e230230217c6f10e0156b63efa735c2f9baef (diff) | |
download | FreeBSD-src-98ebb25e56d0f452f1cfd5d33770eeaedca698fd.zip FreeBSD-src-98ebb25e56d0f452f1cfd5d33770eeaedca698fd.tar.gz |
Use the RET macro.
For setjmp() and longjmp(), put the signal mask where it's supposed to be,
instead of in the space reserved for fp regs.
Diffstat (limited to 'lib/libc/arm/gen/setjmp.S')
-rw-r--r-- | lib/libc/arm/gen/setjmp.S | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/lib/libc/arm/gen/setjmp.S b/lib/libc/arm/gen/setjmp.S index 53959e7..f0e9cfa 100644 --- a/lib/libc/arm/gen/setjmp.S +++ b/lib/libc/arm/gen/setjmp.S @@ -47,7 +47,7 @@ __FBSDID("$FreeBSD$"); ENTRY(setjmp) /* Block all signals and retrieve the old signal mask */ stmfd sp!, {r0, r14} - add r2, r0, #4 /* oset */ + add r2, r0, #(25 * 4) /* oset */ mov r0, #0x00000001 /* SIG_BLOCK */ mov r1, #0 /* set */ @@ -70,7 +70,7 @@ ENTRY(setjmp) /* Store integer registers */ stmia r0, {r4-r14} mov r0, #0x00000000 - mov r15, r14 + RET .Lsetjmp_magic: .word _JB_MAGIC_SETJMP @@ -84,14 +84,12 @@ ENTRY(__longjmp) teq r2, r3 bne botch - /* Fetch signal mask */ - add r2, r0, #4 /* Set signal mask */ stmfd sp!, {r0, r1, r14} sub sp, sp, #4 /* align the stack */ - mov r1, r2 + add r1, r0, #(25 * 4) /* Signal mask */ mov r0, #3 /* SIG_SETMASK */ mov r2, #0 bl PIC_SYM(_C_LABEL(sigprocmask), PLT) @@ -122,7 +120,7 @@ ENTRY(__longjmp) mov r0, r1 teq r0, #0x00000000 moveq r0, #0x00000001 - mov r15, r14 + RET /* validation failed, die die die. */ botch: |