r6220 - in glibc-package/trunk/debian: . patches patches/s390
Author: aurel32
Date: 2014-08-14 10:49:17 +0000 (Thu, 14 Aug 2014)
New Revision: 6220
Added:
glibc-package/trunk/debian/patches/s390/cvs-s390-abi-reversal.diff
Modified:
glibc-package/trunk/debian/changelog
glibc-package/trunk/debian/patches/series
Log:
debian/patches/s390/cvs-s390-abi-reversal.diff: new patch backported from
upstream to revert the S/390 jmp_buf/ucontext_t ABI change.
Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog 2014-08-08 15:34:20 UTC (rev 6219)
+++ glibc-package/trunk/debian/changelog 2014-08-14 10:49:17 UTC (rev 6220)
@@ -6,6 +6,8 @@
[ Aurelien Jarno ]
* debian/patches/arm64/cvs-includes-cleanup.diff: new patch from upstream to
clean sys/user.h and sys/procfs.h. Closes: #755169.
+ * debian/patches/s390/cvs-s390-abi-reversal.diff: new patch backported from
+ upstream to revert the S/390 jmp_buf/ucontext_t ABI change.
-- Adam Conrad <adconrad@0c3.net> Sat, 12 Jul 2014 20:53:51 -0600
Added: glibc-package/trunk/debian/patches/s390/cvs-s390-abi-reversal.diff
===================================================================
--- glibc-package/trunk/debian/patches/s390/cvs-s390-abi-reversal.diff (rev 0)
+++ glibc-package/trunk/debian/patches/s390/cvs-s390-abi-reversal.diff 2014-08-14 10:49:17 UTC (rev 6220)
@@ -0,0 +1,2226 @@
+2014-07-31 Stefan Liebler <stli@linux.vnet.ibm.com>
+
+ * sysdeps/s390/Makefile: Delete file.
+ * sysdeps/s390/Versions (GLIBC_2.19): Remove __setjmp.
+ * sysdeps/s390/__longjmp.c: Delete file.
+ * sysdeps/s390/bits/setjmp.h (__s390_jmp_buf):
+ Remove fields __flags and __reserved.
+ * sysdeps/s390/longjmp.c: Include setjmp/longjmp.c
+ and add versioning.
+ * sysdeps/s390/rtld-__longjmp.c: Delete file.
+ * sysdeps/s390/rtld-global-offsets.sym: Likewise.
+ * sysdeps/s390/rtld-setjmp.S: Likewise.
+ * sysdeps/s390/s390-32/__longjmp-common.c: Move to ...
+ * sysdeps/s390/s390-32/__longjmp.c: ... here.
+ * sysdeps/s390/s390-32/setjmp-common.S: Move to ...
+ * sysdeps/s390/s390-32/setjmp.S: ... here.
+ Add versioning.
+ (__sigsetjmp): Remove setting __flags field.
+ * sysdeps/s390/s390-64/__longjmp-common.c:Move to ...
+ * sysdeps/s390/s390-64/__longjmp.c: ... here.
+ * sysdeps/s390/s390-64/setjmp-common.S: Move to ...
+ * sysdeps/s390/s390-64/setjmp.S: ... here.
+ Add versioning.
+ (__sigsetjmp): Remove setting __flags field.
+ * sysdeps/s390/setjmp.S: Delete file.
+ * sysdeps/s390/sigjmp.c: Likewise.
+ * sysdeps/s390/v1-longjmp.c: Likewise.
+ * sysdeps/s390/v1-setjmp.h: Likewise.
+ * sysdeps/s390/v1-sigjmp.c: Likewise.
+ * sysdeps/unix/sysv/linux/s390/Makefile (sysdep_routines):
+ Remove v1-longjmp_chk.
+ * sysdeps/unix/sysv/linux/s390/getcontext.S: Delete file.
+ * sysdeps/unix/sysv/linux/s390/longjmp_chk.c:
+ Include debug/longjmp_chk.c and add versioning.
+ * nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c:
+ Include nptl/sysdeps/pthread/pt-longjmp.c and add versioning.
+ * sysdeps/unix/sysv/linux/s390/rtld-getcontext.S: Delete file.
+ * sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c:
+ Include __longjmp.c.
+ * sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S:
+ Move to ...
+ * sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S: ... here.
+ (__getcontext): Remove setting __flags field.
+ Add versioning.
+ * sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S:
+ Don't restore upper high grps.
+ * sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S:
+ Likewise.
+ (__swapcontext): Remove setting uc_flags field.
+ * sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym:
+ Delete file.
+ * sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c:
+ Include __longjmp.c.
+ * sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S:
+ Move to ...
+ * sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S: ... here.
+ (__getcontext): Remove setting __flags field.
+ Add versioning.
+ * sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S:
+ (__swapcontext): Remove setting uc_flags field.
+ * unix/sysv/linux/s390/s390-64/ucontext_i.sym: Delete file.
+ * sysdeps/unix/sysv/linux/s390/sys/ucontext.h (ucontext):
+ Remove fields uc_high_gprs and __reserved.
+ * sysdeps/unix/sysv/linux/s390/ucontext_i.sym:
+ New file with reverted content.
+ * sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c: Delete file.
+ * sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist:
+ Regenerated.
+ * sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist:
+ Regenerated.
+
+--- a/sysdeps/s390/Makefile
++++ /dev/null
+@@ -1,9 +0,0 @@
+-ifeq ($(subdir),setjmp)
+-ifeq (yes,$(build-shared))
+-sysdep_routines += v1-longjmp v1-sigjmp
+-endif
+-endif
+-
+-ifeq ($(subdir),csu)
+-gen-as-const-headers += rtld-global-offsets.sym
+-endif
+--- a/sysdeps/s390/Versions
++++ b/sysdeps/s390/Versions
+@@ -1,12 +1,8 @@
+ libc {
+ GLIBC_2.19 {
+- setjmp; _setjmp; __setjmp; __sigsetjmp;
++ setjmp; _setjmp; __sigsetjmp;
+ longjmp; _longjmp; siglongjmp;
+ }
+- GLIBC_PRIVATE {
+- __v1__libc_longjmp; __v1__libc_siglongjmp;
+- __v2__libc_longjmp; __v2__libc_siglongjmp;
+- }
+ }
+
+ ld {
+--- a/sysdeps/s390/__longjmp.c
++++ /dev/null
+@@ -1,31 +0,0 @@
+-/* Copyright (C) 2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <libc-symbols.h>
+-#include <shlib-compat.h>
+-
+-#define __longjmp __v2__longjmp
+-#include "__longjmp-common.c"
+-#undef __longjmp
+-strong_alias (__v2__longjmp, __longjmp)
+-
+-#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
+-# undef __longjmp
+-# define __V1_JMPBUF
+-# define __longjmp __v1__longjmp
+-# include "__longjmp-common.c"
+-#endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
+--- a/sysdeps/s390/bits/setjmp.h
++++ b/sysdeps/s390/bits/setjmp.h
+@@ -40,10 +40,6 @@
+ /* We save fpu registers 4 and 6. */
+ long __fpregs[4];
+ # endif
+-#ifndef __V1_JMPBUF
+- unsigned long __flags;
+- char __reserved[128];
+-#endif
+ } __jmp_buf[1];
+
+ #endif
+--- a/sysdeps/s390/longjmp.c
++++ b/sysdeps/s390/longjmp.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2013 Free Software Foundation, Inc.
++/* Copyright (C) 2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -15,50 +15,28 @@
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>.
+
+- Versioned copy of sysdeps/generic/longjmp.c modified for extended
+- jmpbuf. */
++ Versioned copy of setjmp/longjmp.c modified for versioning
++ the reverted jmpbuf extension. */
+
+ #include <shlib-compat.h>
+-#include <stddef.h>
+-#include <setjmp.h>
+-#include <signal.h>
+-
+-extern void __v2__longjmp (__jmp_buf __env, int __val)
+- __attribute__ ((__noreturn__));
+-extern void __v2__libc_longjmp (sigjmp_buf env, int val)
+- __attribute__ ((__noreturn__));
+-libc_hidden_proto (__v2__libc_longjmp)
+-
+-/* Set the signal mask to the one specified in ENV, and jump
+- to the position specified in ENV, causing the setjmp
+- call there to return VAL, or 1 if VAL is 0. */
+-void
+-__v2__libc_siglongjmp (sigjmp_buf env, int val)
+-{
+- /* Perform any cleanups needed by the frames being unwound. */
+- _longjmp_unwind (env, val);
+-
+- if (env[0].__mask_was_saved)
+- /* Restore the saved signal mask. */
+- (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask,
+- (sigset_t *) NULL);
+-
+- /* Call the machine-dependent function to restore machine state. */
+- __v2__longjmp (env[0].__jmpbuf, val ?: 1);
+-}
+-
+-#ifndef __v2__longjmp
+-strong_alias (__v2__libc_siglongjmp, __v2__libc_longjmp)
+-libc_hidden_def (__v2__libc_longjmp)
+-weak_alias (__v2__libc_siglongjmp, __v2_longjmp)
+-weak_alias (__v2__libc_siglongjmp, __v2longjmp)
+-weak_alias (__v2__libc_siglongjmp, __v2siglongjmp)
+-
+-/* These will be used by libpthread only. */
+-versioned_symbol (libc, __v2__libc_longjmp, __libc_longjmp, GLIBC_PRIVATE);
+-versioned_symbol (libc, __v2__libc_siglongjmp, __libc_siglongjmp, GLIBC_PRIVATE);
+-
+-versioned_symbol (libc, __v2_longjmp, _longjmp, GLIBC_2_19);
+-versioned_symbol (libc, __v2longjmp, longjmp, GLIBC_2_19);
+-versioned_symbol (libc, __v2siglongjmp, siglongjmp, GLIBC_2_19);
+-#endif /* ifndef __v2__longjmp */
++
++#include <setjmp/longjmp.c>
++
++#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
++/* In glibc release 2.19 new versions of longjmp-functions were introduced,
++ but were reverted before 2.20. Thus both versions are the same function. */
++weak_alias (__libc_siglongjmp, __v1_longjmp)
++weak_alias (__libc_siglongjmp, __v2_longjmp)
++versioned_symbol (libc, __v1_longjmp, _longjmp, GLIBC_2_0);
++compat_symbol (libc, __v2_longjmp, _longjmp, GLIBC_2_19);
++
++weak_alias (__libc_siglongjmp, __v1longjmp)
++weak_alias (__libc_siglongjmp, __v2longjmp)
++versioned_symbol (libc, __v1longjmp, longjmp, GLIBC_2_0);
++compat_symbol (libc, __v2longjmp, longjmp, GLIBC_2_19);
++
++weak_alias (__libc_siglongjmp, __v1siglongjmp)
++weak_alias (__libc_siglongjmp, __v2siglongjmp)
++versioned_symbol (libc, __v1siglongjmp, siglongjmp, GLIBC_2_0);
++compat_symbol (libc, __v2siglongjmp, siglongjmp, GLIBC_2_19);
++#endif /* SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
+--- a/sysdeps/s390/rtld-__longjmp.c
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-/* Build a non-versioned object for rtld-*. */
+-# include "__longjmp-common.c"
+--- a/sysdeps/s390/rtld-global-offsets.sym
++++ /dev/null
+@@ -1,7 +0,0 @@
+-#define SHARED 1
+-
+-#include <ldsodefs.h>
+-
+-#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem)
+-
+-RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap)
+--- a/sysdeps/s390/rtld-setjmp.S
++++ /dev/null
+@@ -1,20 +0,0 @@
+-/* Extendible version of setjmp for System z
+- Copyright (C) 2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-/* Build a non-versioned object for rtld-*. */
+-# include "setjmp-common.S"
+--- a/sysdeps/s390/s390-32/__longjmp-common.c
++++ /dev/null
+@@ -1,68 +0,0 @@
+-/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <errno.h>
+-#include <sysdep.h>
+-#include <setjmp.h>
+-#include <bits/setjmp.h>
+-#include <stdlib.h>
+-#include <unistd.h>
+-
+-/* Jump to the position specified by ENV, causing the
+- setjmp call there to return VAL, or 1 if VAL is 0. */
+-attribute_hidden void
+-__longjmp (__jmp_buf env, int val)
+-{
+-#ifdef PTR_DEMANGLE
+- uintptr_t guard = THREAD_GET_POINTER_GUARD ();
+-# ifdef CHECK_SP
+- CHECK_SP (env, guard);
+-# endif
+-#elif defined CHECK_SP
+- CHECK_SP (env, 0);
+-#endif
+- register int r2 __asm ("%r2") = val == 0 ? 1 : val;
+-#ifdef PTR_DEMANGLE
+- register uintptr_t r3 __asm ("%r3") = guard;
+- register void *r1 __asm ("%r1") = (void *) env;
+-#endif
+- /* Restore registers and jump back. */
+- asm volatile ("ld %%f6,48(%1)\n\t"
+- "ld %%f4,40(%1)\n\t"
+-#ifdef PTR_DEMANGLE
+- "lm %%r6,%%r13,0(%1)\n\t"
+- "lm %%r4,%%r5,32(%1)\n\t"
+- "xr %%r4,%2\n\t"
+- "xr %%r5,%2\n\t"
+- "lr %%r15,%%r5\n\t"
+- "br %%r4"
+-#else
+- "lm %%r6,%%r15,0(%1)\n\t"
+- "br %%r14"
+-#endif
+- : : "r" (r2),
+-#ifdef PTR_DEMANGLE
+- "r" (r1), "r" (r3)
+-#else
+- "a" (env)
+-#endif
+- );
+-
+- /* Avoid `volatile function does return' warnings. */
+- for (;;);
+-}
+--- /dev/null
++++ b/sysdeps/s390/s390-32/__longjmp.c
+@@ -0,0 +1,68 @@
++/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <sysdep.h>
++#include <setjmp.h>
++#include <bits/setjmp.h>
++#include <stdlib.h>
++#include <unistd.h>
++
++/* Jump to the position specified by ENV, causing the
++ setjmp call there to return VAL, or 1 if VAL is 0. */
++void
++__longjmp (__jmp_buf env, int val)
++{
++#ifdef PTR_DEMANGLE
++ uintptr_t guard = THREAD_GET_POINTER_GUARD ();
++# ifdef CHECK_SP
++ CHECK_SP (env, guard);
++# endif
++#elif defined CHECK_SP
++ CHECK_SP (env, 0);
++#endif
++ register int r2 __asm ("%r2") = val == 0 ? 1 : val;
++#ifdef PTR_DEMANGLE
++ register uintptr_t r3 __asm ("%r3") = guard;
++ register void *r1 __asm ("%r1") = (void *) env;
++#endif
++ /* Restore registers and jump back. */
++ asm volatile ("ld %%f6,48(%1)\n\t"
++ "ld %%f4,40(%1)\n\t"
++#ifdef PTR_DEMANGLE
++ "lm %%r6,%%r13,0(%1)\n\t"
++ "lm %%r4,%%r5,32(%1)\n\t"
++ "xr %%r4,%2\n\t"
++ "xr %%r5,%2\n\t"
++ "lr %%r15,%%r5\n\t"
++ "br %%r4"
++#else
++ "lm %%r6,%%r15,0(%1)\n\t"
++ "br %%r14"
++#endif
++ : : "r" (r2),
++#ifdef PTR_DEMANGLE
++ "r" (r1), "r" (r3)
++#else
++ "a" (env)
++#endif
++ );
++
++ /* Avoid `volatile function does return' warnings. */
++ for (;;);
++}
+--- a/sysdeps/s390/s390-32/setjmp-common.S
++++ /dev/null
+@@ -1,84 +0,0 @@
+-/* setjmp for s390, ELF version.
+- Copyright (C) 2000-2014 Free Software Foundation, Inc.
+- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <sysdep.h>
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
+-
+- /* We include the BSD entry points here as well but we make
+- them weak. */
+-ENTRY (setjmp)
+- .weak C_SYMBOL_NAME (setjmp)
+- lhi %r3,1 /* second argument of one */
+- j 0f /* branch relativ to __sigsetjmp */
+-END (setjmp)
+-
+- /* Binary compatibility entry point. */
+-ENTRY(_setjmp)
+- .weak C_SYMBOL_NAME (_setjmp)
+- lhi %r3,0 /* second argument of zero */
+- j 0f /* branch relativ to __sigsetjmp */
+-END (_setjmp)
+-libc_hidden_def (_setjmp)
+-
+-ENTRY(__setjmp)
+- lhi %r3,0 /* second argument of zero */
+- j 0f /* branch relativ to __sigsetjmp */
+-END (__setjmp)
+-
+-ENTRY(__sigsetjmp)
+-0:
+-#ifdef PTR_MANGLE
+- stm %r6,%r13,0(%r2) /* store registers in jmp_buf */
+- lr %r4,%r14
+- lr %r5,%r15
+- PTR_MANGLE (%r4, %r1)
+- PTR_MANGLE2 (%r5, %r1)
+- stm %r4,%r5,32(%r2)
+-#else
+- stm %r6,%r15,0(%r2) /* store registers in jmp_buf */
+-#endif
+-#ifndef __V1_JMPBUF
+- lhi %r4,0
+- st %r4,56(%r2) /* Set __flags to 0. */
+-#endif
+- std %f4,40(%r2)
+- std %f6,48(%r2)
+-#if defined NOT_IN_libc && defined IS_IN_rtld
+- /* In ld.so we never save the signal mask. */
+- lhi %r2,0
+- br %r14
+-#elif defined PIC
+- /* We cannot use the PLT, because it requires that %r12 be set, but
+- we can't save and restore our caller's value. Instead, we do an
+- indirect jump through the GOT. */
+- basr %r1,0
+-0: al %r1,1f-0b(0,%r1) /* get address of global offset table */
+- /* get address of __sigjmp_save from got */
+- l %r1,__sigjmp_save@GOT12(0,%r1)
+- br %r1
+-1: .long _GLOBAL_OFFSET_TABLE_ - 0b
+-#else
+- basr %r1,0
+-0: l %r1,1f-0b(0,%r1) /* load address of __sigjmp_save */
+- br %r1 /* tail-call __sigjmp_save */
+-1: .long __sigjmp_save
+-#endif
+-END (__sigsetjmp)
+--- /dev/null
++++ b/sysdeps/s390/s390-32/setjmp.S
+@@ -0,0 +1,111 @@
++/* setjmp for s390, ELF version.
++ Copyright (C) 2000-2014 Free Software Foundation, Inc.
++ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#define _ASM
++#define _SETJMP_H
++#include <bits/setjmp.h>
++#include <shlib-compat.h>
++
++#if !defined IS_IN_rtld
++# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
++ /* we need a unique name in case of symbol versioning. */
++# define __sigsetjmp __v1__sigsetjmp
++# endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
++#endif /* !defined IS_IN_rtld */
++
++ /* We include the BSD entry points here as well but we make
++ them weak. */
++ENTRY (setjmp)
++ .weak C_SYMBOL_NAME (setjmp)
++ lhi %r3,1 /* second argument of one */
++ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
++END (setjmp)
++
++ /* Binary compatibility entry point. */
++ENTRY(_setjmp)
++ .weak C_SYMBOL_NAME (_setjmp)
++ lhi %r3,0 /* second argument of zero */
++ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
++END (_setjmp)
++libc_hidden_def (_setjmp)
++
++ENTRY(__setjmp)
++ lhi %r3,0 /* second argument of zero */
++ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
++END (__setjmp)
++
++ENTRY(__sigsetjmp)
++.Linternal_sigsetjmp:
++#ifdef PTR_MANGLE
++ stm %r6,%r13,0(%r2) /* store registers in jmp_buf */
++ lr %r4,%r14
++ lr %r5,%r15
++ PTR_MANGLE (%r4, %r1)
++ PTR_MANGLE2 (%r5, %r1)
++ stm %r4,%r5,32(%r2)
++#else
++ stm %r6,%r15,0(%r2) /* store registers in jmp_buf */
++#endif
++ std %f4,40(%r2)
++ std %f6,48(%r2)
++#if defined NOT_IN_libc && defined IS_IN_rtld
++ /* In ld.so we never save the signal mask. */
++ lhi %r2,0
++ br %r14
++#elif defined PIC
++ /* We cannot use the PLT, because it requires that %r12 be set, but
++ we can't save and restore our caller's value. Instead, we do an
++ indirect jump through the GOT. */
++ basr %r1,0
++.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */
++ /* get address of __sigjmp_save from got */
++ l %r1,__sigjmp_save@GOT12(0,%r1)
++ br %r1
++.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0
++#else
++ basr %r1,0
++.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */
++ br %r1 /* tail-call __sigjmp_save */
++.L1: .long __sigjmp_save
++#endif
++END (__sigsetjmp)
++
++#if !defined IS_IN_rtld
++# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
++/* In glibc release 2.19 new versions of setjmp-functions were introduced,
++ but were reverted before 2.20. Thus both versions are the same function. */
++
++# undef __sigsetjmp
++
++weak_alias (setjmp, __v1setjmp);
++weak_alias (setjmp, __v2setjmp);
++versioned_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0);
++compat_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19);
++
++weak_alias (_setjmp, __v1_setjmp);
++weak_alias (_setjmp, __v2_setjmp);
++versioned_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0);
++compat_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19);
++
++strong_alias (__v1__sigsetjmp, __v2__sigsetjmp);
++versioned_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0);
++compat_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19);
++# endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
++#endif /* if !defined IS_IN_rtld */
+--- a/sysdeps/s390/s390-64/__longjmp-common.c
++++ /dev/null
+@@ -1,74 +0,0 @@
+-/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <errno.h>
+-#include <sysdep.h>
+-#include <setjmp.h>
+-#include <bits/setjmp.h>
+-#include <stdlib.h>
+-#include <unistd.h>
+-
+-/* Jump to the position specified by ENV, causing the
+- setjmp call there to return VAL, or 1 if VAL is 0. */
+-attribute_hidden void
+-__longjmp (__jmp_buf env, int val)
+-{
+-#ifdef PTR_DEMANGLE
+- uintptr_t guard = THREAD_GET_POINTER_GUARD ();
+-# ifdef CHECK_SP
+- CHECK_SP (env, guard);
+-# endif
+-#elif defined CHECK_SP
+- CHECK_SP (env, 0);
+-#endif
+- register long int r2 __asm ("%r2") = val == 0 ? 1 : val;
+-#ifdef PTR_DEMANGLE
+- register uintptr_t r3 __asm ("%r3") = guard;
+- register void *r1 __asm ("%r1") = (void *) env;
+-#endif
+- /* Restore registers and jump back. */
+- asm volatile ("ld %%f8,80(%1)\n\t"
+- "ld %%f9,88(%1)\n\t"
+- "ld %%f10,96(%1)\n\t"
+- "ld %%f11,104(%1)\n\t"
+- "ld %%f12,112(%1)\n\t"
+- "ld %%f13,120(%1)\n\t"
+- "ld %%f14,128(%1)\n\t"
+- "ld %%f15,136(%1)\n\t"
+-#ifdef PTR_DEMANGLE
+- "lmg %%r6,%%r13,0(%1)\n\t"
+- "lmg %%r4,%%r5,64(%1)\n\t"
+- "xgr %%r4,%2\n\t"
+- "xgr %%r5,%2\n\t"
+- "lgr %%r15,%%r5\n\t"
+- "br %%r4"
+-#else
+- "lmg %%r6,%%r15,0(%1)\n\t"
+- "br %%r14"
+-#endif
+- : : "r" (r2),
+-#ifdef PTR_DEMANGLE
+- "r" (r1), "r" (r3)
+-#else
+- "a" (env)
+-#endif
+- );
+-
+- /* Avoid `volatile function does return' warnings. */
+- for (;;);
+-}
+--- /dev/null
++++ b/sysdeps/s390/s390-64/__longjmp.c
+@@ -0,0 +1,74 @@
++/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <sysdep.h>
++#include <setjmp.h>
++#include <bits/setjmp.h>
++#include <stdlib.h>
++#include <unistd.h>
++
++/* Jump to the position specified by ENV, causing the
++ setjmp call there to return VAL, or 1 if VAL is 0. */
++void
++__longjmp (__jmp_buf env, int val)
++{
++#ifdef PTR_DEMANGLE
++ uintptr_t guard = THREAD_GET_POINTER_GUARD ();
++# ifdef CHECK_SP
++ CHECK_SP (env, guard);
++# endif
++#elif defined CHECK_SP
++ CHECK_SP (env, 0);
++#endif
++ register long int r2 __asm ("%r2") = val == 0 ? 1 : val;
++#ifdef PTR_DEMANGLE
++ register uintptr_t r3 __asm ("%r3") = guard;
++ register void *r1 __asm ("%r1") = (void *) env;
++#endif
++ /* Restore registers and jump back. */
++ asm volatile ("ld %%f8,80(%1)\n\t"
++ "ld %%f9,88(%1)\n\t"
++ "ld %%f10,96(%1)\n\t"
++ "ld %%f11,104(%1)\n\t"
++ "ld %%f12,112(%1)\n\t"
++ "ld %%f13,120(%1)\n\t"
++ "ld %%f14,128(%1)\n\t"
++ "ld %%f15,136(%1)\n\t"
++#ifdef PTR_DEMANGLE
++ "lmg %%r6,%%r13,0(%1)\n\t"
++ "lmg %%r4,%%r5,64(%1)\n\t"
++ "xgr %%r4,%2\n\t"
++ "xgr %%r5,%2\n\t"
++ "lgr %%r15,%%r5\n\t"
++ "br %%r4"
++#else
++ "lmg %%r6,%%r15,0(%1)\n\t"
++ "br %%r14"
++#endif
++ : : "r" (r2),
++#ifdef PTR_DEMANGLE
++ "r" (r1), "r" (r3)
++#else
++ "a" (env)
++#endif
++ );
++
++ /* Avoid `volatile function does return' warnings. */
++ for (;;);
++}
+--- a/sysdeps/s390/s390-64/setjmp-common.S
++++ /dev/null
+@@ -1,79 +0,0 @@
+-/* setjmp for 64 bit S/390, ELF version.
+- Copyright (C) 2001-2014 Free Software Foundation, Inc.
+- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <sysdep.h>
+-#define _ASM
+-#define _SETJMP_H
+-#include <bits/setjmp.h>
+-
+- /* We include the BSD entry points here as well but we make
+- them weak. */
+-ENTRY (setjmp)
+- .weak C_SYMBOL_NAME (setjmp)
+- lghi %r3,1 /* Second argument of one. */
+- j 0f /* Branch relativ to __sigsetjmp. */
+-END (setjmp)
+-
+- /* Binary compatibility entry point. */
+-ENTRY(_setjmp)
+- .weak C_SYMBOL_NAME (_setjmp)
+- slgr %r3,%r3 /* Second argument of zero. */
+- j 0f /* Branch relativ to __sigsetjmp. */
+-END (_setjmp)
+-libc_hidden_def (_setjmp)
+-
+-ENTRY(__setjmp)
+- slgr %r3,%r3 /* Second argument of zero. */
+- j 0f /* Branch relativ to __sigsetjmp. */
+-END (__setjmp)
+-
+-ENTRY(__sigsetjmp)
+-0:
+-#ifdef PTR_MANGLE
+- stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */
+- lgr %r4,%r14
+- lgr %r5,%r15
+- PTR_MANGLE (%r4, %r1)
+- PTR_MANGLE2 (%r5, %r1)
+- stmg %r4,%r5,64(%r2)
+-#else
+- stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */
+-#endif
+-#ifndef __V1_JMPBUF
+- lghi %r4,0
+- stg %r4,144(%r2) /* Set __flags to 0. */
+-#endif
+- std %f8,80(%r2)
+- std %f9,88(%r2)
+- std %f10,96(%r2)
+- std %f11,104(%r2)
+- std %f12,112(%r2)
+- std %f13,120(%r2)
+- std %f14,128(%r2)
+- std %f15,136(%r2)
+-#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 /* Branch to PLT of __sigsetjmp. */
+-#else
+- jg __sigjmp_save
+-#endif
+-END (__sigsetjmp)
+--- /dev/null
++++ b/sysdeps/s390/s390-64/setjmp.S
+@@ -0,0 +1,106 @@
++/* setjmp for 64 bit S/390, ELF version.
++ Copyright (C) 2001-2014 Free Software Foundation, Inc.
++ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#define _ASM
++#define _SETJMP_H
++#include <bits/setjmp.h>
++#include <shlib-compat.h>
++
++#if !defined IS_IN_rtld
++# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
++ /* we need a unique name in case of symbol versioning. */
++# define __sigsetjmp __v1__sigsetjmp
++# endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
++#endif /* !defined IS_IN_rtld */
++
++ /* We include the BSD entry points here as well but we make
++ them weak. */
++ENTRY (setjmp)
++ .weak C_SYMBOL_NAME (setjmp)
++ lghi %r3,1 /* Second argument of one. */
++ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
++END (setjmp)
++
++ /* Binary compatibility entry point. */
++ENTRY(_setjmp)
++ .weak C_SYMBOL_NAME (_setjmp)
++ slgr %r3,%r3 /* Second argument of zero. */
++ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
++END (_setjmp)
++libc_hidden_def (_setjmp)
++
++ENTRY(__setjmp)
++ slgr %r3,%r3 /* Second argument of zero. */
++ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
++END (__setjmp)
++
++ENTRY(__sigsetjmp)
++.Linternal_sigsetjmp:
++#ifdef PTR_MANGLE
++ stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */
++ lgr %r4,%r14
++ lgr %r5,%r15
++ PTR_MANGLE (%r4, %r1)
++ PTR_MANGLE2 (%r5, %r1)
++ stmg %r4,%r5,64(%r2)
++#else
++ stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */
++#endif
++ std %f8,80(%r2)
++ std %f9,88(%r2)
++ std %f10,96(%r2)
++ std %f11,104(%r2)
++ std %f12,112(%r2)
++ std %f13,120(%r2)
++ std %f14,128(%r2)
++ std %f15,136(%r2)
++#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 /* Branch to PLT of __sigsetjmp. */
++#else
++ jg __sigjmp_save
++#endif
++END (__sigsetjmp)
++
++#if !defined IS_IN_rtld
++# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
++/* In glibc release 2.19 new versions of setjmp-functions were introduced,
++ but were reverted before 2.20. Thus both versions are the same function. */
++
++# undef __sigsetjmp
++
++weak_alias (setjmp, __v1setjmp);
++weak_alias (setjmp, __v2setjmp);
++versioned_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0);
++compat_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19);
++
++weak_alias (_setjmp, __v1_setjmp);
++weak_alias (_setjmp, __v2_setjmp);
++versioned_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0);
++compat_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19);
++
++strong_alias (__v1__sigsetjmp, __v2__sigsetjmp);
++versioned_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0);
++compat_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19);
++# endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
++#endif /* if !defined IS_IN_rtld */
+--- a/sysdeps/s390/setjmp.S
++++ /dev/null
+@@ -1,64 +0,0 @@
+-/* Extendible version of setjmp for System z
+- Copyright (C) 2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <libc-symbols.h>
+-#include <shlib-compat.h>
+-
+-versioned_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19)
+-versioned_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19)
+-versioned_symbol (libc, __v2__setjmp, __setjmp, GLIBC_2_19)
+-versioned_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19)
+-#define setjmp __v2setjmp
+-#define _setjmp __v2_setjmp
+-#define __setjmp __v2__setjmp
+-#define __sigsetjmp __v2__sigsetjmp
+-#define __sigjmp_save __v2__sigjmp_save
+-
+-#include "setjmp-common.S"
+-
+-#undef setjmp
+-#undef _setjmp
+-#undef __setjmp
+-#undef __sigsetjmp
+-#undef __sigjmp_save
+-libc_hidden_ver (__v2setjmp, setjmp)
+-libc_hidden_ver (__v2_setjmp, _setjmp)
+-libc_hidden_ver (__v2__setjmp, __setjmp)
+-libc_hidden_ver (__v2__sigsetjmp, __sigsetjmp)
+-
+-#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
+-compat_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0)
+-compat_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0)
+-compat_symbol (libc, __v1__setjmp, __setjmp, GLIBC_2_0)
+-compat_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0)
+-# define setjmp __v1setjmp
+-# define _setjmp __v1_setjmp
+-# define __setjmp __v1__setjmp
+-# define __sigsetjmp __v1__sigsetjmp
+-# define __sigjmp_save __v1__sigjmp_save
+-# define __V1_JMPBUF
+-
+-# include "setjmp-common.S"
+-
+-# undef setjmp
+-# undef _setjmp
+-# undef __setjmp
+-# undef __sigsetjmp
+-# undef __sigjmp_save
+-
+-#endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
+--- a/sysdeps/s390/sigjmp.c
++++ /dev/null
+@@ -1,34 +0,0 @@
+-/* Copyright (C) 1992-2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <stddef.h>
+-#include <setjmp.h>
+-#include <signal.h>
+-
+-/* This function is called by the `sigsetjmp' macro
+- before doing a `__setjmp' on ENV[0].__jmpbuf.
+- Always return zero. */
+-
+-int
+-__v2__sigjmp_save (sigjmp_buf env, int savemask)
+-{
+- env[0].__mask_was_saved = (savemask &&
+- __sigprocmask (SIG_BLOCK, (sigset_t *) NULL,
+- &env[0].__saved_mask) == 0);
+-
+- return 0;
+-}
+--- a/sysdeps/s390/v1-longjmp.c
++++ /dev/null
+@@ -1,57 +0,0 @@
+-/* Copyright (C) 2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>.
+-
+- Versioned copy of sysdeps/generic/longjmp.c modified for extended
+- jmpbuf. */
+-
+-#include <shlib-compat.h>
+-#include <stddef.h>
+-#include <signal.h>
+-#include "v1-setjmp.h"
+-
+-#if !defined NOT_INT_libc && defined SHARED
+-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
+-
+-void
+-__v1__libc_siglongjmp (__v1__sigjmp_buf env, int val)
+-{
+- /* Perform any cleanups needed by the frames being unwound. */
+- _longjmp_unwind (env, val);
+-
+- if (env[0].__mask_was_saved)
+- /* Restore the saved signal mask. */
+- (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask,
+- (sigset_t *) NULL);
+-
+- /* Call the machine-dependent function to restore machine state. */
+- __v1__longjmp (env[0].__jmpbuf, val ?: 1);
+-}
+-
+-# ifndef __v1__longjmp
+-strong_alias (__v1__libc_siglongjmp, __v1__libc_longjmp)
+-libc_hidden_def (__v1__libc_longjmp)
+-weak_alias (__v1__libc_siglongjmp, __v1_longjmp)
+-weak_alias (__v1__libc_siglongjmp, __v1longjmp)
+-weak_alias (__v1__libc_siglongjmp, __v1siglongjmp)
+-
+-compat_symbol (libc, __v1_longjmp, _longjmp, GLIBC_2_0);
+-compat_symbol (libc, __v1longjmp, longjmp, GLIBC_2_0);
+-compat_symbol (libc, __v1siglongjmp, siglongjmp, GLIBC_2_0);
+-
+-# endif /* ifndef __v1__longjmp */
+-# endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
+-#endif /* if !defined NOT_INT_libc && defined SHARED */
+--- a/sysdeps/s390/v1-setjmp.h
++++ /dev/null
+@@ -1,111 +0,0 @@
+-/* Copyright (C) 1991-2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-/*
+- * ISO C99 Standard: 7.13 Nonlocal jumps <setjmp.h>
+- */
+-
+-#ifndef _V1_SETJMP_H
+-#define _V1_SETJMP_H 1
+-
+-#include <features.h>
+-
+-__BEGIN_DECLS
+-
+-#define __V1_JMPBUF
+-#define _SETJMP_H
+-#include <bits/setjmp.h> /* Get `__jmp_buf'. */
+-
+-#ifndef _ASM
+-
+-#include <bits/sigset.h> /* Get `__sigset_t'. */
+-
+-
+-/* Calling environment, plus possibly a saved signal mask. */
+-typedef struct __v1__jmp_buf_tag
+- {
+- /* NOTE: The machine-dependent definitions of `__sigsetjmp'
+- assume that a `jmp_buf' begins with a `__jmp_buf' and that
+- `__mask_was_saved' follows it. Do not move these members
+- or add others before it. */
+- __jmp_buf __jmpbuf; /* Calling environment. */
+- int __mask_was_saved; /* Saved the signal mask? */
+- __sigset_t __saved_mask; /* Saved signal mask. */
+- } __v1__jmp_buf[1];
+-
+-
+-/* Store the calling environment in ENV, also saving the signal mask.
+- Return 0. */
+-extern int __v1setjmp (__v1__jmp_buf __env);
+-
+-/* Store the calling environment in ENV, also saving the
+- signal mask if SAVEMASK is nonzero. Return 0.
+- This is the internal name for `sigsetjmp'. */
+-extern int __v1__sigsetjmp (struct __v1__jmp_buf_tag __env[1],
+- int __savemask);
+-
+-/* Store the calling environment in ENV, not saving the signal mask.
+- Return 0. */
+-extern int __v1_setjmp (struct __v1__jmp_buf_tag __env[1]);
+-
+-/* Jump to the environment saved in ENV, making the
+- `setjmp' call there return VAL, or 1 if VAL is 0. */
+-extern void __v1longjmp (struct __v1__jmp_buf_tag __env[1], int __val)
+- __attribute__ ((__noreturn__));
+-
+-/* Same. Usually `_longjmp' is used with `_setjmp', which does not save
+- the signal mask. But it is how ENV was saved that determines whether
+- `longjmp' restores the mask; `_longjmp' is just an alias. */
+-extern void __v1_longjmp (struct __v1__jmp_buf_tag __env[1], int __val)
+- __attribute__ ((__noreturn__));
+-
+-/* Use the same type for `jmp_buf' and `sigjmp_buf'.
+- The `__mask_was_saved' flag determines whether
+- or not `longjmp' will restore the signal mask. */
+-typedef struct __v1__jmp_buf_tag __v1__sigjmp_buf[1];
+-
+-/* Jump to the environment saved in ENV, making the
+- sigsetjmp call there return VAL, or 1 if VAL is 0.
+- Restore the signal mask if that sigsetjmp call saved it.
+- This is just an alias `longjmp'. */
+-extern void __v1siglongjmp (__v1__sigjmp_buf __env, int __val)
+- __attribute__ ((__noreturn__));
+-
+-/* Internal machine-dependent function to restore context sans signal mask. */
+-extern void __v1__longjmp (__jmp_buf __env, int __val)
+- __attribute__ ((__noreturn__));
+-
+-/* Internal function to possibly save the current mask of blocked signals
+- in ENV, and always set the flag saying whether or not it was saved.
+- This is used by the machine-dependent definition of `__sigsetjmp'.
+- Always returns zero, for convenience. */
+-extern int __v1__sigjmp_save (__v1__jmp_buf __env, int __savemask);
+-
+-extern void _longjmp_unwind (__v1__jmp_buf env, int val);
+-
+-extern void __v1__libc_siglongjmp (__v1__sigjmp_buf env, int val)
+- __attribute__ ((noreturn));
+-
+-extern void __v1__libc_longjmp (__v1__sigjmp_buf env, int val)
+- __attribute__ ((noreturn));
+-
+-libc_hidden_proto (__v1__libc_longjmp)
+-libc_hidden_proto (__v1_setjmp)
+-libc_hidden_proto (__v1__sigsetjmp)
+-#endif /* !_ASM */
+-
+-#endif /* ifndef _V1_SETJMP_H */
+--- a/sysdeps/s390/v1-sigjmp.c
++++ /dev/null
+@@ -1,44 +0,0 @@
+-/* Copyright (C) 1992-2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>.
+-
+- Copied from setjmp/sigjmp.c for extending jmp_buf. */
+-
+-#include <bits/wordsize.h>
+-#include <shlib-compat.h>
+-
+-#if !defined NOT_IN_libc && defined SHARED
+-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
+-# include <stddef.h>
+-# include <v1-setjmp.h>
+-# include <signal.h>
+-
+-/* This function is called by the `sigsetjmp' macro
+- before doing a `__setjmp' on ENV[0].__jmpbuf.
+- Always return zero. */
+-
+-int
+-__v1__sigjmp_save (__v1__sigjmp_buf env, int savemask)
+-{
+- env[0].__mask_was_saved = (savemask &&
+- __sigprocmask (SIG_BLOCK, (sigset_t *) NULL,
+- &env[0].__saved_mask) == 0);
+-
+- return 0;
+-}
+-
+-# endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
+-#endif /* !NOT_IN_libc && SHARED */
+--- a/sysdeps/unix/sysv/linux/s390/Makefile
++++ b/sysdeps/unix/sysv/linux/s390/Makefile
+@@ -16,9 +16,3 @@
+ ifeq ($(subdir),elf)
+ sysdep_routines += dl-vdso
+ endif
+-
+-ifeq ($(subdir),debug)
+-ifeq (yes,$(build-shared))
+-sysdep_routines += v1-longjmp_chk
+-endif
+-endif
+--- a/sysdeps/unix/sysv/linux/s390/getcontext.S
++++ /dev/null
+@@ -1,38 +0,0 @@
+-/* Extendible version of getcontext for System z
+- Copyright (C) 2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <libc-symbols.h>
+-#include <shlib-compat.h>
+-
+-versioned_symbol (libc, __v2getcontext, getcontext, GLIBC_2_19)
+-#define __getcontext __v2getcontext
+-
+-#include "getcontext-common.S"
+-
+-#undef __getcontext
+-
+-libc_hidden_ver (__v2getcontext, getcontext)
+-
+-#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_19)
+-# define __V1_UCONTEXT
+-compat_symbol (libc, __v1getcontext, getcontext, GLIBC_2_1)
+-# define __getcontext __v1getcontext
+-# include "getcontext-common.S"
+-# undef __getcontext
+-
+-#endif
+--- a/sysdeps/unix/sysv/linux/s390/longjmp_chk.c
++++ b/sysdeps/unix/sysv/linux/s390/longjmp_chk.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2013 Free Software Foundation, Inc.
++/* Copyright (C) 2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -15,30 +15,34 @@
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>.
+
+- This is a copy of debug/longjmp_chk.c extended for symbol
+- versioning. */
++ Versioned copy of debug/longjmp_chk.c modified for versioning
++ the reverted jmpbuf extension. */
+
+ #include <shlib-compat.h>
+-#include <setjmp.h>
+
+-/* This place is the only user of these functions. */
+-extern void ____v2__longjmp_chk (__jmp_buf __env, int __val)
++#if !defined NOT_IN_libc && defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
++/* this is a copy from debug/longjmp_chk.c because we need an unique name
++ for __longjmp_chk, but it is already named via a define
++ for __libc_siglongjmp in debug/longjmp_chk.c. */
++# include <setjmp.h>
++
++// XXX Should move to include/setjmp.h
++extern void ____longjmp_chk (__jmp_buf __env, int __val)
+ __attribute__ ((__noreturn__));
+
+-#if defined NOT_IN_libc
++# define __longjmp ____longjmp_chk
++# define __libc_siglongjmp __v1__longjmp_chk
+
+-# define __v2__longjmp ____longjmp_chk
+-# define __v2__libc_siglongjmp __longjmp_chk
++# include <setjmp/longjmp.c>
+
+-# include <longjmp.c>
++/* In glibc release 2.19 a new versions of __longjmp_chk was introduced,
++ but was reverted before 2.20. Thus both versions are the same function. */
++strong_alias (__v1__longjmp_chk, __v2__longjmp_chk);
++versioned_symbol (libc, __v1__longjmp_chk, __longjmp_chk, GLIBC_2_11);
++compat_symbol (libc, __v2__longjmp_chk, __longjmp_chk, GLIBC_2_19);
+
+ #else
+
+-# define __v2__longjmp ____v2__longjmp_chk
+-# define __v2__libc_siglongjmp __v2__libc_siglongjmp_chk
+-
+-# include <longjmp.c>
+-
+-versioned_symbol (libc, __v2__libc_siglongjmp_chk, __longjmp_chk, GLIBC_2_19);
++# include <debug/longjmp_chk.c>
+
+ #endif
+--- a/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
++++ b/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2013 Free Software Foundation, Inc.
++/* Copyright (C) 2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -15,49 +15,30 @@
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>.
+
+- This is a copy of pthread/pt-longjmp.c made for extending the
+- jmpbuf structure on System z. */
++ Versioned copy of nptl/pt-longjmp.c modified for versioning
++ the reverted jmpbuf extension. */
+
+-#include <setjmp.h>
+-#include <stdlib.h>
+-#include <bits/wordsize.h>
+-#include "pthreadP.h"
+ #include <shlib-compat.h>
+-#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19)
+
+-/* The __v1 version prototypes are declared in v1-setjmp.h which
+- cannot be included together with setjmp.h. So we put the
+- prototypes here manually. */
+-extern void __v1__libc_siglongjmp (sigjmp_buf env, int val)
+- __attribute__ ((noreturn));
+-extern void __v1__libc_longjmp (sigjmp_buf env, int val)
+- __attribute__ ((noreturn));
+-
+-void __v1_siglongjmp (sigjmp_buf env, int val)
+-{
+- __v1__libc_siglongjmp (env, val);
+-}
+-
+-void __v1_longjmp (jmp_buf env, int val)
+-{
+- __v1__libc_longjmp (env, val);
+-}
+-
+-compat_symbol (libpthread, __v1_longjmp, longjmp, GLIBC_2_0);
+-compat_symbol (libpthread, __v1_siglongjmp, siglongjmp, GLIBC_2_0);
+-#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19)) */
+-
+-void
+-__v2_longjmp (jmp_buf env, int val)
+-{
+- __libc_longjmp (env, val);
+-}
+-
+-void
+-__v2_siglongjmp (jmp_buf env, int val)
+-{
+- __libc_siglongjmp (env, val);
+-}
+-
+-versioned_symbol (libpthread, __v2_longjmp, longjmp, GLIBC_2_19);
+-versioned_symbol (libpthread, __v2_siglongjmp, siglongjmp, GLIBC_2_19);
++#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
++ /* we need a unique name in case of symbol versioning. */
++# define longjmp __v1longjmp
++#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)) */
++
++#include <nptl/sysdeps/pthread/pt-longjmp.c>
++
++#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
++/* In glibc release 2.19 new versions of longjmp-functions were introduced,
++ but were reverted before 2.20. Thus both versions are the same function. */
++
++# undef longjmp
++
++strong_alias (__v1longjmp, __v2longjmp)
++versioned_symbol (libpthread, __v1longjmp, longjmp, GLIBC_2_0);
++compat_symbol (libpthread, __v2longjmp, longjmp, GLIBC_2_19);
++
++weak_alias (siglongjmp, __v1siglongjmp)
++weak_alias (siglongjmp, __v2siglongjmp)
++versioned_symbol (libpthread, __v1siglongjmp, siglongjmp, GLIBC_2_0);
++compat_symbol (libpthread, __v2siglongjmp, siglongjmp, GLIBC_2_19);
++#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)) */
+--- a/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-/* Build a non-versioned object for rtld-*. */
+-#include "getcontext-common.S"
+--- a/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
++++ b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
+@@ -26,8 +26,8 @@
+ #include <stdint.h>
+ #include <signal.h>
+ #include <sys/syscall.h>
+-#include <libc-symbols.h>
+-#include <shlib-compat.h>
++
++#define __longjmp ____longjmp_chk
+
+ #define CHECK_SP(env, guard) \
+ do \
+@@ -51,22 +51,4 @@
+ } \
+ } while (0)
+
+-
+-#if defined NOT_IN_libc
+-/* Build a non-versioned object for rtld-*. */
+-# define __longjmp ____longjmp_chk
+-# include "__longjmp-common.c"
+-
+-#else /* !NOT_IN_libc */
+-# define __longjmp ____v2__longjmp_chk
+-# include "__longjmp-common.c"
+-
+-# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_11, GLIBC_2_19)
+-# undef __longjmp
+-# define __V1_JMPBUF
+-# define __longjmp ____v1__longjmp_chk
+-# include "__longjmp-common.c"
+-# undef __longjmp
+-
+-# endif
+-#endif /* !NOT_IN_libc */
++#include "__longjmp.c"
+--- a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S
++++ /dev/null
+@@ -1,112 +0,0 @@
+-/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <sysdep.h>
+-#include <features.h>
+-
+-#include "rtld-global-offsets.h"
+-#include "ucontext_i.h"
+-
+-/* __getcontext (const ucontext_t *ucp)
+-
+- Saves the machine context in UCP such that when it is activated,
+- it appears as if __getcontext() returned again.
+-
+- This implementation is intended to be used for *synchronous* context
+- switches only. Therefore, it does not have to save anything
+- other than the PRESERVED state. */
+-
+-ENTRY(__getcontext)
+- lr %r1,%r2
+-
+- /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
+- la %r2,SIG_BLOCK
+- slr %r3,%r3
+- la %r4,SC_MASK(%r1)
+- lhi %r5,_NSIG8
+- svc SYS_ify(rt_sigprocmask)
+-
+- /* Store fpu context. */
+- stfpc SC_FPC(%r1)
+- std %f0,SC_FPRS(%r1)
+- std %f1,SC_FPRS+8(%r1)
+- std %f2,SC_FPRS+16(%r1)
+- std %f3,SC_FPRS+24(%r1)
+- std %f4,SC_FPRS+32(%r1)
+- std %f5,SC_FPRS+40(%r1)
+- std %f6,SC_FPRS+48(%r1)
+- std %f7,SC_FPRS+56(%r1)
+- std %f8,SC_FPRS+64(%r1)
+- std %f9,SC_FPRS+72(%r1)
+- std %f10,SC_FPRS+80(%r1)
+- std %f11,SC_FPRS+88(%r1)
+- std %f12,SC_FPRS+96(%r1)
+- std %f13,SC_FPRS+104(%r1)
+- std %f14,SC_FPRS+112(%r1)
+- std %f15,SC_FPRS+120(%r1)
+-
+- lhi %r2,0
+-#ifndef __V1_UCONTEXT
+- bras %r3,0f
+-# ifdef IS_IN_rtld
+- /* Within ld.so we can do slightly better by addressing dl_hwap
+- relative to GOT start. */
+-1: .long _GLOBAL_OFFSET_TABLE_ - 1b
+- .long C_SYMBOL_NAME(_rtld_global_ro)@GOTOFF
+-0: l %r4,0(%r3)
+- la %r4,0(%r3,%r4)
+- l %r5,4(%r3)
+- /* _dl_hwcap is 64 bit and we need the lower 32. */
+- l %r3,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(%r4,%r5)
+-# elif PIC
+-1: .long _GLOBAL_OFFSET_TABLE_ - 1b
+- .long C_SYMBOL_NAME(_rtld_global_ro)@GOT
+-0: l %r4,0(%r3)
+- la %r4,0(%r3,%r4) /* GOT pointer -> r4 */
+- l %r5,4(%r3) /* GOT offset -> r5 */
+- l %r5,0(%r4,%r5) /* GOT slot -> r5 */
+- l %r3,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(%r5)
+-# else
+- .long C_SYMBOL_NAME(_dl_hwcap)
+-0: l %r3,0(%r3)
+- l %r3,0(%r3)
+-# endif
+- tml %r3,512 /* HWCAP_S390_HIGH_GPRS */
+- jz 2f
+- /* highgprs implies zarch so stmh/oill is ok here. */
+- .machine "z900"
+- .machinemode "zarch_nohighgprs"
+- stmh %r0,%r15,SC_HIGHGPRS(%r1)
+- oill %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */
+-#endif
+-2: st %r2,SC_FLGS(%r1)
+-
+- /* Set __getcontext return value to 0. */
+- slr %r2,%r2
+-
+- /* Store access registers. */
+- stam %a0,%a15,SC_ACRS(%r1)
+-
+- /* Store general purpose registers. */
+- stm %r0,%r15,SC_GPRS(%r1)
+-
+- /* Return. */
+- br %r14
+-END(__getcontext)
+-
+-weak_alias (__getcontext, getcontext)
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
+@@ -0,0 +1,86 @@
++/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#include <features.h>
++
++#include "ucontext_i.h"
++
++#include <shlib-compat.h>
++
++/* __getcontext (const ucontext_t *ucp)
++
++ Saves the machine context in UCP such that when it is activated,
++ it appears as if __getcontext() returned again.
++
++ This implementation is intended to be used for *synchronous* context
++ switches only. Therefore, it does not have to save anything
++ other than the PRESERVED state. */
++
++ENTRY(__getcontext)
++ lr %r1,%r2
++
++ /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
++ la %r2,SIG_BLOCK
++ slr %r3,%r3
++ la %r4,SC_MASK(%r1)
++ lhi %r5,_NSIG8
++ svc SYS_ify(rt_sigprocmask)
++
++ /* Store fpu context. */
++ stfpc SC_FPC(%r1)
++ std %f0,SC_FPRS(%r1)
++ std %f1,SC_FPRS+8(%r1)
++ std %f2,SC_FPRS+16(%r1)
++ std %f3,SC_FPRS+24(%r1)
++ std %f4,SC_FPRS+32(%r1)
++ std %f5,SC_FPRS+40(%r1)
++ std %f6,SC_FPRS+48(%r1)
++ std %f7,SC_FPRS+56(%r1)
++ std %f8,SC_FPRS+64(%r1)
++ std %f9,SC_FPRS+72(%r1)
++ std %f10,SC_FPRS+80(%r1)
++ std %f11,SC_FPRS+88(%r1)
++ std %f12,SC_FPRS+96(%r1)
++ std %f13,SC_FPRS+104(%r1)
++ std %f14,SC_FPRS+112(%r1)
++ std %f15,SC_FPRS+120(%r1)
++
++ /* Set __getcontext return value to 0. */
++ slr %r2,%r2
++
++ /* Store access registers. */
++ stam %a0,%a15,SC_ACRS(%r1)
++
++ /* Store general purpose registers. */
++ stm %r0,%r15,SC_GPRS(%r1)
++
++ /* Return. */
++ br %r14
++END(__getcontext)
++
++weak_alias (__getcontext, getcontext)
++
++#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
++/* In glibc release 2.19 a new version of getcontext was introduced,
++ but was reverted before 2.20. Thus both versions are the same function. */
++weak_alias (__getcontext, __v1__getcontext)
++weak_alias (__getcontext, __v2__getcontext)
++versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1)
++compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19)
++#endif
+--- a/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist
++++ b/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist
+@@ -1777,7 +1777,6 @@
+ GLIBC_2.19
+ GLIBC_2.19 A
+ __longjmp_chk F
+- __setjmp F
+ __sigsetjmp F
+ _longjmp F
+ _setjmp F
+--- a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
++++ b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
+@@ -62,16 +62,8 @@
+ /* Don't touch %a0, used for thread purposes. */
+ lam %a1,%a15,SC_ACRS+4(%r1)
+
+- /* Restore the upper halfs if available. */
+- l %r2,SC_FLGS(%r1)
+- tml %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */
+- jz 0f
+- .machine "z900"
+- .machinemode "zarch_nohighgprs"
+- lmh %r0,%r15,SC_HIGHGPRS(%r1)
+-
+ /* Load general purpose registers. */
+-0: lm %r0,%r15,SC_GPRS(%r1)
++ lm %r0,%r15,SC_GPRS(%r1)
+
+ /* Return. */
+ br %r14
+--- a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
++++ b/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
+@@ -65,31 +65,19 @@
+ std %f14,SC_FPRS+112(%r1)
+ std %f15,SC_FPRS+120(%r1)
+
+- /* Store access registers. */
+- stam %a0,%a15,SC_ACRS(%r1)
+-
+ /* Set __swapcontext return value to 0. */
+ slr %r2,%r2
+
++ /* Store access registers. */
++ stam %a0,%a15,SC_ACRS(%r1)
++
+ /* Store general purpose registers. */
+ stm %r0,%r15,SC_GPRS(%r1)
+
+- /* Copy uc_flags into the new ucontext_t. */
++ /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */
++ la %r2,SIG_BLOCK
+ lr %r5,%r0
+- l %r2,SC_FLGS(%r5)
+- st %r2,SC_FLGS(%r1)
+-
+- /* Save/restore the upper halfs if necessary. */
+- tml %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */
+- jz 0f
+- .machine "z900"
+- .machinemode "zarch_nohighgprs"
+- stmh %r0,%r15,SC_HIGHGPRS(%r1)
+- lmh %r0,%r15,SC_HIGHGPRS(%r5)
+-
+- /* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize). */
+-0: la %r2,SIG_BLOCK
+- la %r3,SC_MASK(%r5)
++ la %r3,SC_MASK(%r5)
+ slr %r4,%r4
+ lhi %r5,_NSIG8
+ svc SYS_ify(rt_sigprocmask)
+--- a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
++++ /dev/null
+@@ -1,26 +0,0 @@
+-#include <stddef.h>
+-#include <signal.h>
+-#include <sys/ucontext.h>
+-
+---
+-
+-SIG_BLOCK
+-SIG_UNBLOCK
+-SIG_SETMASK
+-
+-_NSIG8 (_NSIG / 8)
+-
+-#define ucontext(member) offsetof (ucontext_t, member)
+-#define mcontext(member) ucontext (uc_mcontext.member)
+-
+-SC_FLGS ucontext (uc_flags)
+-SC_LINK ucontext (uc_link)
+-SC_STCK ucontext (uc_stack.ss_sp)
+-SC_STSZ ucontext (uc_stack.ss_size)
+-SC_PSW mcontext (psw)
+-SC_GPRS mcontext (gregs)
+-SC_ACRS mcontext (aregs)
+-SC_FPC mcontext (fpregs.fpc)
+-SC_FPRS mcontext (fpregs.fprs)
+-SC_MASK ucontext (uc_sigmask)
+-SC_HIGHGPRS ucontext (uc_high_gprs)
+--- a/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
++++ b/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
+@@ -26,8 +26,8 @@
+ #include <stdint.h>
+ #include <signal.h>
+ #include <sys/syscall.h>
+-#include <libc-symbols.h>
+-#include <shlib-compat.h>
++
++#define __longjmp ____longjmp_chk
+
+ #define CHECK_SP(env, guard) \
+ do \
+@@ -51,23 +51,4 @@
+ } \
+ } while (0)
+
+-
+-#if defined NOT_IN_libc
+-/* Build a non-versioned object for rtld-*. */
+-# define __longjmp ____longjmp_chk
+-# include "__longjmp-common.c"
+-
+-#else /* !NOT_IN_libc */
+-# define __longjmp ____v2__longjmp_chk
+-# include "__longjmp-common.c"
+-# undef __longjmp
+-
+-# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_11, GLIBC_2_19)
+-# undef __longjmp
+-# define __V1_JMPBUF
+-# define __longjmp ____v1__longjmp_chk
+-# include "__longjmp-common.c"
+-# undef __longjmp
+-
+-# endif
+-#endif /* !NOT_IN_libc */
++#include "__longjmp.c"
+--- a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S
++++ /dev/null
+@@ -1,79 +0,0 @@
+-/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>. */
+-
+-#include <sysdep.h>
+-#include <features.h>
+-
+-#include "ucontext_i.h"
+-
+-/* __getcontext (const ucontext_t *ucp)
+-
+- Saves the machine context in UCP such that when it is activated,
+- it appears as if __getcontext() returned again.
+-
+- This implementation is intended to be used for *synchronous* context
+- switches only. Therefore, it does not have to save anything
+- other than the PRESERVED state. */
+-
+-ENTRY(__getcontext)
+- lgr %r1,%r2
+-
+- /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
+- la %r2,SIG_BLOCK
+- slgr %r3,%r3
+- la %r4,SC_MASK(%r1)
+- lghi %r5,_NSIG8
+- svc SYS_ify(rt_sigprocmask)
+-
+- /* Store fpu context. */
+- stfpc SC_FPC(%r1)
+- std %f0,SC_FPRS(%r1)
+- std %f1,SC_FPRS+8(%r1)
+- std %f2,SC_FPRS+16(%r1)
+- std %f3,SC_FPRS+24(%r1)
+- std %f4,SC_FPRS+32(%r1)
+- std %f5,SC_FPRS+40(%r1)
+- std %f6,SC_FPRS+48(%r1)
+- std %f7,SC_FPRS+56(%r1)
+- std %f8,SC_FPRS+64(%r1)
+- std %f9,SC_FPRS+72(%r1)
+- std %f10,SC_FPRS+80(%r1)
+- std %f11,SC_FPRS+88(%r1)
+- std %f12,SC_FPRS+96(%r1)
+- std %f13,SC_FPRS+104(%r1)
+- std %f14,SC_FPRS+112(%r1)
+- std %f15,SC_FPRS+120(%r1)
+-
+- /* Set __getcontext return value to 0. */
+- slgr %r2,%r2
+-
+- /* Store the version number into the uc_flags field. So far
+- we do not make use of the reserved bytes so we store a zero. */
+- stg %r2,SC_FLGS(%r1)
+-
+- /* Store access registers. */
+- stam %a0,%a15,SC_ACRS(%r1)
+-
+- /* Store general purpose registers. */
+- stmg %r0,%r15,SC_GPRS(%r1)
+-
+- /* Return. */
+- br %r14
+-END(__getcontext)
+-
+-weak_alias (__getcontext, getcontext)
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
+@@ -0,0 +1,86 @@
++/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <sysdep.h>
++#include <features.h>
++
++#include "ucontext_i.h"
++
++#include <shlib-compat.h>
++
++/* __getcontext (const ucontext_t *ucp)
++
++ Saves the machine context in UCP such that when it is activated,
++ it appears as if __getcontext() returned again.
++
++ This implementation is intended to be used for *synchronous* context
++ switches only. Therefore, it does not have to save anything
++ other than the PRESERVED state. */
++
++ENTRY(__getcontext)
++ lgr %r1,%r2
++
++ /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
++ la %r2,SIG_BLOCK
++ slgr %r3,%r3
++ la %r4,SC_MASK(%r1)
++ lghi %r5,_NSIG8
++ svc SYS_ify(rt_sigprocmask)
++
++ /* Store fpu context. */
++ stfpc SC_FPC(%r1)
++ std %f0,SC_FPRS(%r1)
++ std %f1,SC_FPRS+8(%r1)
++ std %f2,SC_FPRS+16(%r1)
++ std %f3,SC_FPRS+24(%r1)
++ std %f4,SC_FPRS+32(%r1)
++ std %f5,SC_FPRS+40(%r1)
++ std %f6,SC_FPRS+48(%r1)
++ std %f7,SC_FPRS+56(%r1)
++ std %f8,SC_FPRS+64(%r1)
++ std %f9,SC_FPRS+72(%r1)
++ std %f10,SC_FPRS+80(%r1)
++ std %f11,SC_FPRS+88(%r1)
++ std %f12,SC_FPRS+96(%r1)
++ std %f13,SC_FPRS+104(%r1)
++ std %f14,SC_FPRS+112(%r1)
++ std %f15,SC_FPRS+120(%r1)
++
++ /* Set __getcontext return value to 0. */
++ slgr %r2,%r2
++
++ /* Store access registers. */
++ stam %a0,%a15,SC_ACRS(%r1)
++
++ /* Store general purpose registers. */
++ stmg %r0,%r15,SC_GPRS(%r1)
++
++ /* Return. */
++ br %r14
++END(__getcontext)
++
++weak_alias (__getcontext, getcontext)
++
++#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
++/* In glibc release 2.19 a new version of getcontext was introduced,
++ but was reverted before 2.20. Thus both versions are the same function. */
++weak_alias (__getcontext, __v1__getcontext)
++weak_alias (__getcontext, __v2__getcontext)
++versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1)
++compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19)
++#endif
+--- a/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist
++++ b/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist
+@@ -98,7 +98,6 @@
+ GLIBC_2.19
+ GLIBC_2.19 A
+ __longjmp_chk F
+- __setjmp F
+ __sigsetjmp F
+ _longjmp F
+ _setjmp F
+--- a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
++++ b/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
+@@ -65,25 +65,21 @@
+ std %f14,SC_FPRS+112(%r1)
+ std %f15,SC_FPRS+120(%r1)
+
++ /* Set __swapcontext return value to 0. */
++ slgr %r2,%r2
++
+ /* Store access registers. */
+ stam %a0,%a15,SC_ACRS(%r1)
+
+- /* Set __swapcontext return value to 0. */
+- slgr %r2,%r2
+-
+ /* Store general purpose registers. */
+ stmg %r0,%r15,SC_GPRS(%r1)
+
+- /* Copy uc_flags into the new ucontext_t. */
+- lgr %r5,%r0
+- lg %r2,SC_FLGS(%r5)
+- stg %r2,SC_FLGS(%r1)
+-
+ /* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize). */
+ la %r2,SIG_BLOCK
++ lgr %r5,%r0
+ la %r3,SC_MASK(%r5)
+- slgr %r4,%r4
+ lghi %r5,_NSIG8
++ slgr %r4,%r4
+ svc SYS_ify(rt_sigprocmask)
+
+ /* Load fpu context. */
+--- a/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.sym
++++ /dev/null
+@@ -1,25 +0,0 @@
+-#include <stddef.h>
+-#include <signal.h>
+-#include <sys/ucontext.h>
+-
+---
+-
+-SIG_BLOCK
+-SIG_UNBLOCK
+-SIG_SETMASK
+-
+-_NSIG8 (_NSIG / 8)
+-
+-#define ucontext(member) offsetof (ucontext_t, member)
+-#define mcontext(member) ucontext (uc_mcontext.member)
+-
+-SC_FLGS ucontext (uc_flags)
+-SC_LINK ucontext (uc_link)
+-SC_STCK ucontext (uc_stack.ss_sp)
+-SC_STSZ ucontext (uc_stack.ss_size)
+-SC_PSW mcontext (psw)
+-SC_GPRS mcontext (gregs)
+-SC_ACRS mcontext (aregs)
+-SC_FPC mcontext (fpregs.fpc)
+-SC_FPRS mcontext (fpregs.fprs)
+-SC_MASK ucontext (uc_sigmask)
+--- a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
++++ b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
+@@ -64,15 +64,6 @@
+ fpreg_t fprs[16];
+ } fpregset_t;
+
+-/* Bit is set if the uc_high_gprs field contains the upper halfs of
+- the 64 bit general purpose registers. Since the uc_high_gprs field
+- is only available in the 32 bit version of ucontext_t it will never
+- be set for 64 bit. */
+-#define UCONTEXT_UC_FLAGS_HIGH_GPRS (1UL << 0)
+-
+-/* A new uc_flags constant will be defined when actually making use of
+- the reserved space: UCONTEXT_UCFLAGS_RESERVED (1UL << 1). */
+-
+ /* Context to describe whole processor state. */
+ typedef struct
+ {
+@@ -90,10 +81,6 @@
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ __sigset_t uc_sigmask;
+-#ifndef __s390x__
+- unsigned long uc_high_gprs[16];
+-#endif
+- char __reserved[512];
+ };
+
+
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/s390/ucontext_i.sym
+@@ -0,0 +1,25 @@
++#include <stddef.h>
++#include <signal.h>
++#include <sys/ucontext.h>
++
++--
++
++SIG_BLOCK
++SIG_UNBLOCK
++SIG_SETMASK
++
++_NSIG8 (_NSIG / 8)
++
++#define ucontext(member) offsetof (ucontext_t, member)
++#define mcontext(member) ucontext (uc_mcontext.member)
++
++SC_FLGS ucontext (uc_flags)
++SC_LINK ucontext (uc_link)
++SC_STCK ucontext (uc_stack.ss_sp)
++SC_STSZ ucontext (uc_stack.ss_size)
++SC_PSW mcontext (psw)
++SC_GPRS mcontext (gregs)
++SC_ACRS mcontext (aregs)
++SC_FPC mcontext (fpregs.fpc)
++SC_FPRS mcontext (fpregs.fprs)
++SC_MASK ucontext (uc_sigmask)
+--- a/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c
++++ /dev/null
+@@ -1,35 +0,0 @@
+-/* Copyright (C) 2013 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
+- <http://www.gnu.org/licenses/>.
+-
+- This went into a separate source file since we would otherwise be
+- needed to include two different versions of setjmp.h into the same
+- file. */
+-
+-#include <shlib-compat.h>
+-
+-#if !defined NOT_IN_libc && defined SHARED
+-# if SHLIB_COMPAT (libc, GLIBC_2_11, GLIBC_2_19)
+-
+-# define __v1__longjmp ____v1__longjmp_chk
+-# define __v1__libc_siglongjmp __v1__libc_siglongjmp_chk
+-
+-# include <v1-longjmp.c>
+-
+-compat_symbol (libc, __v1__libc_siglongjmp_chk, __longjmp_chk, GLIBC_2_11);
+-
+-# endif
+-#endif
Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series 2014-08-08 15:34:20 UTC (rev 6219)
+++ glibc-package/trunk/debian/patches/series 2014-08-14 10:49:17 UTC (rev 6220)
@@ -183,6 +183,7 @@
powerpc/local-powerpc8xx-dcbz.diff
s390/submitted-nexttowardf.diff
+s390/cvs-s390-abi-reversal.diff
sh4/local-fpscr_values.diff
Reply to: