summaryrefslogtreecommitdiff
path: root/sysdeps/s390/s390-64/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/s390/s390-64/setjmp.S')
-rw-r--r--sysdeps/s390/s390-64/setjmp.S18
1 files changed, 14 insertions, 4 deletions
diff --git a/sysdeps/s390/s390-64/setjmp.S b/sysdeps/s390/s390-64/setjmp.S
index 7f245c2a1d..25d97b6a6a 100644
--- a/sysdeps/s390/s390-64/setjmp.S
+++ b/sysdeps/s390/s390-64/setjmp.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2005 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of the GNU C Library.
@@ -28,16 +28,26 @@
/* R2 = pointer to jmp_buf, R3 = savemask. */
ENTRY(__sigsetjmp)
+#ifdef PTR_MANGLE
+ stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */
+ lgr %r4,%r14
+ PTR_MANGLE (%r4, %r5)
+ stg %r4,64(%r2)
+ stg %r15,72(%r2)
+#else
stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */
+#endif
std %f1,80(%r2)
std %f3,88(%r2)
std %f5,96(%r2)
std %f7,104(%r2)
-#ifdef PIC
+#if defined NOT_IN_libc && defined IS_IN_rtld
+ /* In ld.so we never save the signal mask. */
+ lghi %r2,0
+ br %r14
+#elif defined PIC
jg __sigjmp_save@PLT /* Tail-call __sigjmp_save. */
#else
jg __sigjmp_save /* Tail-call __sigjmp_save. */
#endif
END (__sigsetjmp)
-
-