|
@@ -4,35 +4,23 @@
|
|
.type __sigsetjmp,%function
|
|
.type __sigsetjmp,%function
|
|
sigsetjmp:
|
|
sigsetjmp:
|
|
__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
|
|
cmpwi cr7, 4, 0
|
|
- #2) if its 0, goto setjmp code
|
|
|
|
beq- cr7, 1f
|
|
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
|