summaryrefslogtreecommitdiff
path: root/src/signal/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'src/signal/powerpc')
-rw-r--r--src/signal/powerpc/sigsetjmp.s46
1 files changed, 17 insertions, 29 deletions
diff --git a/src/signal/powerpc/sigsetjmp.s b/src/signal/powerpc/sigsetjmp.s
index 461b7372..78acf590 100644
--- a/src/signal/powerpc/sigsetjmp.s
+++ b/src/signal/powerpc/sigsetjmp.s
@@ -4,35 +4,23 @@
.type __sigsetjmp,%function
sigsetjmp:
__sigsetjmp:
- #int sigsetjmp(sigjmp_buf buf, int save)
- # r3 r4
- #0) store save into buf->__fl
- stw 4, 448(3)
- #1) compare save with 0
cmpwi cr7, 4, 0
- #2) if its 0, goto setjmp code
beq- cr7, 1f
- #3) else: we must call pthread_sigmask(SIG_SETMASK, 0, (sigset_t *)buf->__ss);
- # store non-volatile regs 30, 31 into the setjmp buf
- stw 30, 0(3)
- stw 31, 4(3)
- # use them to store the pointer to the jmpbuf and the link reg
- mr 30, 3
- mflr 31
-
- # put pointer to ss buf into r5 (3rd arg)
- addi 5, 3, 452
- # put "2" i.e. SIG_SETMASK in r3
- li 3, 2
- li 4, 0
- bl pthread_sigmask
-
- #restore jmpbuf pointer and link reg
- mr 3, 30
- mtlr 31
- #resore non-volatile regs
- lwz 30, 0(3)
- lwz 31, 4(3)
-1:
- b setjmp
+ mflr 5
+ stw 5, 448(3)
+ stw 16, 448+4+8(3)
+ mr 16, 3
+
+ bl setjmp
+
+ mr 4, 3
+ mr 3, 16
+ lwz 5, 448(3)
+ mtlr 5
+ lwz 16, 448+4+8(3)
+
+.hidden __sigsetjmp_tail
+ b __sigsetjmp_tail
+
+1: b setjmp