about summary refs log tree commit diff
path: root/sysdeps/sparc/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/sparc/setjmp.S')
-rw-r--r--sysdeps/sparc/setjmp.S9
1 files changed, 6 insertions, 3 deletions
diff --git a/sysdeps/sparc/setjmp.S b/sysdeps/sparc/setjmp.S
index d9599079c2..f07a348fe3 100644
--- a/sysdeps/sparc/setjmp.S
+++ b/sysdeps/sparc/setjmp.S
@@ -26,16 +26,19 @@ ENTRY (__sigsetjmp)
 	   return PC.  Save the signal mask if requested with a tail-call
 	   for simplicity; it always returns zero.  */
 #ifdef PIC
+	mov  %o7,%g1
 2:
-	jmpl 1f,%g2
+	call 1f
 	nop
 1:
 	sethi %hi(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l7
-	sethi %hi(C_SYMBOL_NAME (__sigjmp_save)), %g3
-	st    %sp, [%o0 + (JB_SP * 4)]
 	or    %l7,%lo(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l7
+	add   %l7,%o7,%l7
+	sethi %hi(C_SYMBOL_NAME (__sigjmp_save)), %g3
 	or    %g3,%lo(C_SYMBOL_NAME (__sigjmp_save)), %g3
+	st    %sp, [%o0 + (JB_SP * 4)]
 	st    %fp, [%o0 + (JB_FP * 4)]
+	mov   %g1,%o7
 	ld    [%l7+%g3],%g1
 	jmp   %g1
 	st   %o7, [%o0+(JB_PC*4)]