summaryrefslogtreecommitdiff
path: root/src/signal/powerpc64
diff options
context:
space:
mode:
Diffstat (limited to 'src/signal/powerpc64')
-rw-r--r--src/signal/powerpc64/sigsetjmp.s21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/signal/powerpc64/sigsetjmp.s b/src/signal/powerpc64/sigsetjmp.s
index 52ac1d03..410c2831 100644
--- a/src/signal/powerpc64/sigsetjmp.s
+++ b/src/signal/powerpc64/sigsetjmp.s
@@ -2,29 +2,36 @@
.global __sigsetjmp
.type sigsetjmp,%function
.type __sigsetjmp,%function
- .hidden ___setjmp
+ .hidden __setjmp_toc
sigsetjmp:
__sigsetjmp:
addis 2, 12, .TOC.-__sigsetjmp@ha
addi 2, 2, .TOC.-__sigsetjmp@l
+ ld 5, 24(1) # load from the TOC slot in the caller's stack frame
+ b 1f
+
.localentry sigsetjmp,.-sigsetjmp
.localentry __sigsetjmp,.-__sigsetjmp
+ mr 5, 2
+1:
cmpwi cr7, 4, 0
- beq- cr7, ___setjmp
+ beq- cr7, __setjmp_toc
- mflr 5
- std 5, 512(3)
- std 16, 512+8+8(3)
+ mflr 6
+ std 6, 512(3)
+ std 2, 512+16(3)
+ std 16, 512+24(3)
mr 16, 3
- bl ___setjmp
+ bl __setjmp_toc
mr 4, 3
mr 3, 16
ld 5, 512(3)
mtlr 5
- ld 16, 512+8+8(3)
+ ld 2, 512+16(3)
+ ld 16, 512+24(3)
.hidden __sigsetjmp_tail
b __sigsetjmp_tail