diff options
Diffstat (limited to 'src/signal/powerpc/sigsetjmp.s')
-rw-r--r-- | src/signal/powerpc/sigsetjmp.s | 46 |
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 |