about summary refs log tree commit diff
path: root/src/signal/powerpc64/sigsetjmp.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/signal/powerpc64/sigsetjmp.s')
-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