aboutsummaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/sh/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/sh/setjmp.S')
-rw-r--r--libc/sysdeps/linux/sh/setjmp.S12
1 files changed, 11 insertions, 1 deletions
diff --git a/libc/sysdeps/linux/sh/setjmp.S b/libc/sysdeps/linux/sh/setjmp.S
index 3296c2ba9..73a2a8b58 100644
--- a/libc/sysdeps/linux/sh/setjmp.S
+++ b/libc/sysdeps/linux/sh/setjmp.S
@@ -77,7 +77,17 @@ __sigsetjmp_intern:
mov.l r9, @-r4
mov.l r8, @-r4
-#ifdef __HAVE_SHARED__
+#ifdef __SH_FDPIC__
+ /* Make a tail call to __sigjmp_save; it takes the same args. */
+ mov.l .L1, r0
+ mov.l @(r0,r12), r0
+ mov.l @(0,r0), r2
+ mov.l @(4,r0), r12
+ jmp @r2
+ mov r1, r0
+ .align 2
+.L1: .long __sigjmp_save@GOTFUNCDESC
+#elif defined __HAVE_SHARED__
mov.l .LG, r2
mova .LG, r0
add r0, r2