summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S')
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S14
1 files changed, 14 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S
index 0c84d48d10..6e46abadb0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S
@@ -130,8 +130,15 @@ ENTRY(__swapcontext)
 	stfd	fp0,_UC_FREGS+(32*8)(r3)
 #ifdef PIC
 	mflr    r8
+# ifdef HAVE_ASM_PPC_REL16
+	bcl	20,31,1f
+1:	mflr	r7
+	addis	r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha
+	addi	r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l
+# else
 	bl      _GLOBAL_OFFSET_TABLE_@local-4
 	mflr    r7
+# endif
 # ifdef SHARED
 	lwz     r7,_rtld_global_ro@got(r7)
 	mtlr    r8
@@ -272,8 +279,15 @@ L(no_vec):
 
 #ifdef PIC
 	mflr    r8
+# ifdef HAVE_ASM_PPC_REL16
+	bcl	20,31,1f
+1:	mflr	r7
+	addis	r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha
+	addi	r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l
+# else
 	bl      _GLOBAL_OFFSET_TABLE_@local-4
 	mflr    r7
+# endif
 # ifdef SHARED
 	lwz     r7,_rtld_global_ro@got(r7)
 	mtlr    r8