From 826ad7dd9fc47a69c61e56ddfbb066c25218601517aa86c77c4c5db577bc11ea Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Mon, 4 Aug 2014 07:48:30 +0000 Subject: [PATCH] Accepting request 243561 from home:Andreas_Schwab:Factory - ppc64le-profiling.patch: fix profiling for ppc64le (bnc#889601, BZ #17213) - s390-revert-abi-change.patch: replace with upstream patch, switches default symbol version back to old version (bnc#887228) OBS-URL: https://build.opensuse.org/request/show/243561 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=378 --- glibc-testsuite.changes | 8 + glibc-testsuite.spec | 9 +- glibc-utils.changes | 8 + glibc-utils.spec | 9 +- glibc.changes | 8 + glibc.spec | 9 +- ppc64le-profiling.patch | 23 + s390-revert-abi-change.patch | 2075 ++++++++++++++++++++++++++++------ 8 files changed, 1800 insertions(+), 349 deletions(-) create mode 100644 ppc64le-profiling.patch diff --git a/glibc-testsuite.changes b/glibc-testsuite.changes index 390a386..6a664e4 100644 --- a/glibc-testsuite.changes +++ b/glibc-testsuite.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Thu Jul 31 08:06:50 UTC 2014 - schwab@suse.de + +- ppc64le-profiling.patch: fix profiling for ppc64le (bnc#889601, BZ + #17213) +- s390-revert-abi-change.patch: replace with upstream patch, switches + default symbol version back to old version (bnc#887228) + ------------------------------------------------------------------- Mon Jul 28 10:18:46 UTC 2014 - schwab@suse.de diff --git a/glibc-testsuite.spec b/glibc-testsuite.spec index 188a94d..1709f22 100644 --- a/glibc-testsuite.spec +++ b/glibc-testsuite.spec @@ -205,8 +205,6 @@ Patch15: glibc-2.3.90-langpackdir.diff Patch18: glibc-cpusetsize.diff # PATCH-FEATURE-SLE Use nscd user for nscd Patch19: nscd-server-user.patch -# PATCH-FIX-OPENSUSE Revert "S/390: Make jmp_buf extendible" and "S/390: Make ucontext_t extendible" (bnc#887228) -Patch20: s390-revert-abi-change.patch ### Locale related patches # PATCH-FIX-OPENSUSE Add additional locales @@ -268,6 +266,10 @@ Patch1014: nss-files-long-lines.patch Patch1015: setlocale-directory-traversal.patch # PATCH-FIX-UPSTREAM Correct DT_PPC64_NUM (BZ #17153) Patch1016: dt-ppc64-num.patch +# PATCH-FIX-UPSTREAM PowerPC: Fix gprof entry point for LE (BZ #17213) +Patch1017: ppc64le-profiling.patch +# PATCH-FIX-UPSTREAM S/390 Reverting the jmp_buf/ucontext_t ABI change (bnc#887228) +Patch1018: s390-revert-abi-change.patch ### # Patches awaiting upstream approval @@ -475,7 +477,6 @@ rm nscd/s-stamp %patch15 -p1 %patch18 -p1 %patch19 -p1 -%patch20 -p1 %patch100 -p1 %patch102 -p1 @@ -504,6 +505,8 @@ rm nscd/s-stamp %patch1014 -p1 %patch1015 -p1 %patch1016 -p1 +%patch1017 -p1 +%patch1018 -p1 %patch2000 -p1 %patch2001 -p1 diff --git a/glibc-utils.changes b/glibc-utils.changes index 390a386..6a664e4 100644 --- a/glibc-utils.changes +++ b/glibc-utils.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Thu Jul 31 08:06:50 UTC 2014 - schwab@suse.de + +- ppc64le-profiling.patch: fix profiling for ppc64le (bnc#889601, BZ + #17213) +- s390-revert-abi-change.patch: replace with upstream patch, switches + default symbol version back to old version (bnc#887228) + ------------------------------------------------------------------- Mon Jul 28 10:18:46 UTC 2014 - schwab@suse.de diff --git a/glibc-utils.spec b/glibc-utils.spec index 5d3bd54..fb74bc9 100644 --- a/glibc-utils.spec +++ b/glibc-utils.spec @@ -204,8 +204,6 @@ Patch15: glibc-2.3.90-langpackdir.diff Patch18: glibc-cpusetsize.diff # PATCH-FEATURE-SLE Use nscd user for nscd Patch19: nscd-server-user.patch -# PATCH-FIX-OPENSUSE Revert "S/390: Make jmp_buf extendible" and "S/390: Make ucontext_t extendible" (bnc#887228) -Patch20: s390-revert-abi-change.patch ### Locale related patches # PATCH-FIX-OPENSUSE Add additional locales @@ -267,6 +265,10 @@ Patch1014: nss-files-long-lines.patch Patch1015: setlocale-directory-traversal.patch # PATCH-FIX-UPSTREAM Correct DT_PPC64_NUM (BZ #17153) Patch1016: dt-ppc64-num.patch +# PATCH-FIX-UPSTREAM PowerPC: Fix gprof entry point for LE (BZ #17213) +Patch1017: ppc64le-profiling.patch +# PATCH-FIX-UPSTREAM S/390 Reverting the jmp_buf/ucontext_t ABI change (bnc#887228) +Patch1018: s390-revert-abi-change.patch ### # Patches awaiting upstream approval @@ -475,7 +477,6 @@ rm nscd/s-stamp %patch15 -p1 %patch18 -p1 %patch19 -p1 -%patch20 -p1 %patch100 -p1 %patch102 -p1 @@ -504,6 +505,8 @@ rm nscd/s-stamp %patch1014 -p1 %patch1015 -p1 %patch1016 -p1 +%patch1017 -p1 +%patch1018 -p1 %patch2000 -p1 %patch2001 -p1 diff --git a/glibc.changes b/glibc.changes index 390a386..6a664e4 100644 --- a/glibc.changes +++ b/glibc.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Thu Jul 31 08:06:50 UTC 2014 - schwab@suse.de + +- ppc64le-profiling.patch: fix profiling for ppc64le (bnc#889601, BZ + #17213) +- s390-revert-abi-change.patch: replace with upstream patch, switches + default symbol version back to old version (bnc#887228) + ------------------------------------------------------------------- Mon Jul 28 10:18:46 UTC 2014 - schwab@suse.de diff --git a/glibc.spec b/glibc.spec index 2e8993d..683fdb7 100644 --- a/glibc.spec +++ b/glibc.spec @@ -205,8 +205,6 @@ Patch15: glibc-2.3.90-langpackdir.diff Patch18: glibc-cpusetsize.diff # PATCH-FEATURE-SLE Use nscd user for nscd Patch19: nscd-server-user.patch -# PATCH-FIX-OPENSUSE Revert "S/390: Make jmp_buf extendible" and "S/390: Make ucontext_t extendible" (bnc#887228) -Patch20: s390-revert-abi-change.patch ### Locale related patches # PATCH-FIX-OPENSUSE Add additional locales @@ -268,6 +266,10 @@ Patch1014: nss-files-long-lines.patch Patch1015: setlocale-directory-traversal.patch # PATCH-FIX-UPSTREAM Correct DT_PPC64_NUM (BZ #17153) Patch1016: dt-ppc64-num.patch +# PATCH-FIX-UPSTREAM PowerPC: Fix gprof entry point for LE (BZ #17213) +Patch1017: ppc64le-profiling.patch +# PATCH-FIX-UPSTREAM S/390 Reverting the jmp_buf/ucontext_t ABI change (bnc#887228) +Patch1018: s390-revert-abi-change.patch ### # Patches awaiting upstream approval @@ -475,7 +477,6 @@ rm nscd/s-stamp %patch15 -p1 %patch18 -p1 %patch19 -p1 -%patch20 -p1 %patch100 -p1 %patch102 -p1 @@ -504,6 +505,8 @@ rm nscd/s-stamp %patch1014 -p1 %patch1015 -p1 %patch1016 -p1 +%patch1017 -p1 +%patch1018 -p1 %patch2000 -p1 %patch2001 -p1 diff --git a/ppc64le-profiling.patch b/ppc64le-profiling.patch new file mode 100644 index 0000000..f495711 --- /dev/null +++ b/ppc64le-profiling.patch @@ -0,0 +1,23 @@ +2013-07-29 Adhemerval Zanella + + [BZ #17213] + * sysdeps/powerpc/powerpc64/entry.h: Fix TEXT_START definition for + powerpc64le. + +Index: glibc-2.19/sysdeps/powerpc/powerpc64/entry.h +=================================================================== +--- glibc-2.19.orig/sysdeps/powerpc/powerpc64/entry.h ++++ glibc-2.19/sysdeps/powerpc/powerpc64/entry.h +@@ -23,6 +23,7 @@ extern void _start (void); + + #define ENTRY_POINT _start + ++#if _CALL_ELF != 2 + /* We have to provide a special declaration. */ + #define ENTRY_POINT_DECL(class) class void _start (void); + +@@ -33,3 +34,4 @@ extern void _start (void); + #define TEXT_START \ + ({ extern unsigned long int _start_as_data[] asm ("_start"); \ + _start_as_data[0]; }) ++#endif diff --git a/s390-revert-abi-change.patch b/s390-revert-abi-change.patch index a87bb50..59c55f7 100644 --- a/s390-revert-abi-change.patch +++ b/s390-revert-abi-change.patch @@ -1,55 +1,94 @@ -From a779f6e6d899cd601afc19ce19415659bbf646c9 Mon Sep 17 00:00:00 2001 -From: Andreas Schwab -Date: Thu, 24 Jul 2014 11:30:20 +0200 -Subject: [PATCH] Revert "S/390: Make jmp_buf extendible" and "S/390: Make - ucontext_t extendible" +2014-07-30 Stefan Liebler ---- - nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c | 30 ++---- - sysdeps/s390/Makefile | 9 -- - sysdeps/s390/Versions | 4 - - sysdeps/s390/__longjmp.c | 10 -- - sysdeps/s390/bits/setjmp.h | 4 - - sysdeps/s390/longjmp.c | 38 +++---- - sysdeps/s390/s390-32/__longjmp-common.c | 2 +- - sysdeps/s390/s390-32/setjmp-common.S | 4 - - sysdeps/s390/s390-64/__longjmp-common.c | 2 +- - sysdeps/s390/s390-64/setjmp-common.S | 4 - - sysdeps/s390/setjmp.S | 20 +--- - sysdeps/s390/sigjmp.c | 2 +- - sysdeps/s390/v1-longjmp.c | 57 ----------- - sysdeps/s390/v1-setjmp.h | 111 --------------------- - sysdeps/s390/v1-sigjmp.c | 44 -------- - sysdeps/unix/sysv/linux/s390/Makefile | 6 -- - sysdeps/unix/sysv/linux/s390/getcontext.S | 6 +- - sysdeps/unix/sysv/linux/s390/longjmp_chk.c | 19 ++-- - .../unix/sysv/linux/s390/s390-32/____longjmp_chk.c | 16 --- - .../sysv/linux/s390/s390-32/getcontext-common.S | 37 ------- - sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S | 10 +- - sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S | 13 +-- - .../unix/sysv/linux/s390/s390-32/ucontext_i.sym | 1 - - .../unix/sysv/linux/s390/s390-64/____longjmp_chk.c | 17 ---- - .../sysv/linux/s390/s390-64/getcontext-common.S | 4 - - sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S | 3 - - sysdeps/unix/sysv/linux/s390/sys/ucontext.h | 13 --- - sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c | 35 ------- - 28 files changed, 46 insertions(+), 475 deletions(-) - delete mode 100644 sysdeps/s390/Makefile - delete mode 100644 sysdeps/s390/v1-longjmp.c - delete mode 100644 sysdeps/s390/v1-setjmp.h - delete mode 100644 sysdeps/s390/v1-sigjmp.c - delete mode 100644 sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c + * 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/libc.abilist: + Regenerated. + * sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist: + Regenerated. -diff --git a/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c b/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c -index 801432c..6622752 100644 ---- a/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c -+++ b/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c -@@ -23,29 +23,6 @@ - #include - #include "pthreadP.h" +Index: glibc-2.19/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c +=================================================================== +--- glibc-2.19.orig/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c ++++ glibc-2.19/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c +@@ -15,49 +15,30 @@ + License along with the GNU C Library; if not, see + . + +- 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 +-#include +-#include +-#include "pthreadP.h" #include -#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. */ @@ -71,24 +110,46 @@ index 801432c..6622752 100644 -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) -@@ -61,3 +38,10 @@ __v2_siglongjmp (jmp_buf env, int val) - - versioned_symbol (libpthread, __v2_longjmp, longjmp, GLIBC_2_19); - versioned_symbol (libpthread, __v2_siglongjmp, siglongjmp, 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)) */ + -+#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19) -+strong_alias (__v2_longjmp, __v1_longjmp); -+strong_alias (__v2_siglongjmp, __v1_siglongjmp); -+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)) */ -diff --git a/sysdeps/s390/Makefile b/sysdeps/s390/Makefile -deleted file mode 100644 -index 42978dc..0000000 ---- a/sysdeps/s390/Makefile ++#include ++ ++#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)) */ +Index: glibc-2.19/sysdeps/s390/Makefile +=================================================================== +--- glibc-2.19.orig/sysdeps/s390/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -ifeq ($(subdir),setjmp) @@ -100,12 +161,15 @@ index 42978dc..0000000 -ifeq ($(subdir),csu) -gen-as-const-headers += rtld-global-offsets.sym -endif -diff --git a/sysdeps/s390/Versions b/sysdeps/s390/Versions -index 156abc7..e3cdaa4 100644 ---- a/sysdeps/s390/Versions -+++ b/sysdeps/s390/Versions -@@ -3,10 +3,6 @@ libc { - setjmp; _setjmp; __setjmp; __sigsetjmp; +Index: glibc-2.19/sysdeps/s390/Versions +=================================================================== +--- glibc-2.19.orig/sysdeps/s390/Versions ++++ glibc-2.19/sysdeps/s390/Versions +@@ -1,12 +1,8 @@ + libc { + GLIBC_2.19 { +- setjmp; _setjmp; __setjmp; __sigsetjmp; ++ setjmp; _setjmp; __sigsetjmp; longjmp; _longjmp; siglongjmp; } - GLIBC_PRIVATE { @@ -115,16 +179,33 @@ index 156abc7..e3cdaa4 100644 } ld { -diff --git a/sysdeps/s390/__longjmp.c b/sysdeps/s390/__longjmp.c -index e4acd31..fd14abb 100644 ---- a/sysdeps/s390/__longjmp.c -+++ b/sysdeps/s390/__longjmp.c -@@ -18,14 +18,4 @@ - #include - #include - +Index: glibc-2.19/sysdeps/s390/__longjmp.c +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#include +- -#define __longjmp __v2__longjmp - #include "__longjmp-common.c" +-#include "__longjmp-common.c" -#undef __longjmp -strong_alias (__v2__longjmp, __longjmp) - @@ -134,10 +215,10 @@ index e4acd31..fd14abb 100644 -# define __longjmp __v1__longjmp -# include "__longjmp-common.c" -#endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */ -diff --git a/sysdeps/s390/bits/setjmp.h b/sysdeps/s390/bits/setjmp.h -index 25eaf10..0071a9d 100644 ---- a/sysdeps/s390/bits/setjmp.h -+++ b/sysdeps/s390/bits/setjmp.h +Index: glibc-2.19/sysdeps/s390/bits/setjmp.h +=================================================================== +--- glibc-2.19.orig/sysdeps/s390/bits/setjmp.h ++++ glibc-2.19/sysdeps/s390/bits/setjmp.h @@ -40,10 +40,6 @@ typedef struct __s390_jmp_buf /* We save fpu registers 4 and 6. */ long __fpregs[4]; @@ -149,37 +230,48 @@ index 25eaf10..0071a9d 100644 } __jmp_buf[1]; #endif -diff --git a/sysdeps/s390/longjmp.c b/sysdeps/s390/longjmp.c -index c758d14..dda9ae6 100644 ---- a/sysdeps/s390/longjmp.c -+++ b/sysdeps/s390/longjmp.c -@@ -23,17 +23,11 @@ - #include - #include +Index: glibc-2.19/sysdeps/s390/longjmp.c +=================================================================== +--- glibc-2.19.orig/sysdeps/s390/longjmp.c ++++ glibc-2.19/sysdeps/s390/longjmp.c +@@ -15,50 +15,28 @@ + License along with the GNU C Library; if not, see + . +- 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 +-#include +-#include +-#include +- -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 +-/* 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) -+__libc_siglongjmp (sigjmp_buf env, int val) - { - /* Perform any cleanups needed by the frames being unwound. */ - _longjmp_unwind (env, val); -@@ -44,21 +38,27 @@ __v2__libc_siglongjmp (sigjmp_buf env, int val) - (sigset_t *) NULL); - - /* Call the machine-dependent function to restore machine state. */ +-{ +- /* 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); -+ __longjmp (env[0].__jmpbuf, val ?: 1); - } - +-} +- -#ifndef __v2__longjmp -strong_alias (__v2__libc_siglongjmp, __v2__libc_longjmp) -libc_hidden_def (__v2__libc_longjmp) @@ -190,108 +282,850 @@ index c758d14..dda9ae6 100644 -/* 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); -+#ifndef __longjmp -+strong_alias (__libc_siglongjmp, __libc_longjmp) -+libc_hidden_def (__libc_longjmp) -+weak_alias (__libc_siglongjmp, __v2_longjmp) -+weak_alias (__libc_siglongjmp, __v2longjmp) -+weak_alias (__libc_siglongjmp, __v2siglongjmp) - - 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); +- +-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 */ + -+# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) -+weak_alias (__libc_siglongjmp, __v1_longjmp) -+weak_alias (__libc_siglongjmp, __v1longjmp) -+weak_alias (__libc_siglongjmp, __v1siglongjmp) ++#include + -+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 /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */ -+#endif /* ifndef __longjmp */ -diff --git a/sysdeps/s390/s390-32/__longjmp-common.c b/sysdeps/s390/s390-32/__longjmp-common.c -index f78ef65..5d46e21 100644 ---- a/sysdeps/s390/s390-32/__longjmp-common.c -+++ b/sysdeps/s390/s390-32/__longjmp-common.c -@@ -25,7 +25,7 @@ - - /* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ ++#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) */ +Index: glibc-2.19/sysdeps/s390/rtld-__longjmp.c +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-/* Build a non-versioned object for rtld-*. */ +-# include "__longjmp-common.c" +Index: glibc-2.19/sysdeps/s390/rtld-global-offsets.sym +=================================================================== +--- glibc-2.19.orig/sysdeps/s390/rtld-global-offsets.sym ++++ /dev/null +@@ -1,7 +0,0 @@ +-#define SHARED 1 +- +-#include +- +-#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem) +- +-RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap) +Index: glibc-2.19/sysdeps/s390/rtld-setjmp.S +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-/* Build a non-versioned object for rtld-*. */ +-# include "setjmp-common.S" +Index: glibc-2.19/sysdeps/s390/s390-32/__longjmp-common.c +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-/* 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 (;;); +-} +Index: glibc-2.19/sysdeps/s390/s390-32/__longjmp.c +=================================================================== +--- /dev/null ++++ glibc-2.19/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 ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* 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 -diff --git a/sysdeps/s390/s390-32/setjmp-common.S b/sysdeps/s390/s390-32/setjmp-common.S -index d7bb720..cee8181 100644 ---- a/sysdeps/s390/s390-32/setjmp-common.S -+++ b/sysdeps/s390/s390-32/setjmp-common.S -@@ -55,10 +55,6 @@ ENTRY(__sigsetjmp) - #else - stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ - #endif ++__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 (;;); ++} +Index: glibc-2.19/sysdeps/s390/s390-32/setjmp-common.S +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#define _ASM +-#define _SETJMP_H +-#include +- +- /* 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 -diff --git a/sysdeps/s390/s390-64/__longjmp-common.c b/sysdeps/s390/s390-64/__longjmp-common.c -index 46cabb6..168ebf5 100644 ---- a/sysdeps/s390/s390-64/__longjmp-common.c -+++ b/sysdeps/s390/s390-64/__longjmp-common.c -@@ -25,7 +25,7 @@ - - /* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ +- 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) +Index: glibc-2.19/sysdeps/s390/s390-32/setjmp.S +=================================================================== +--- /dev/null ++++ glibc-2.19/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 ++ . */ ++ ++#include ++#define _ASM ++#define _SETJMP_H ++#include ++#include ++ ++#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 */ +Index: glibc-2.19/sysdeps/s390/s390-64/__longjmp-common.c +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-/* 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 (;;); +-} +Index: glibc-2.19/sysdeps/s390/s390-64/__longjmp.c +=================================================================== +--- /dev/null ++++ glibc-2.19/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 ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* 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 -diff --git a/sysdeps/s390/s390-64/setjmp-common.S b/sysdeps/s390/s390-64/setjmp-common.S -index 9cdcae4..7b9dc42 100644 ---- a/sysdeps/s390/s390-64/setjmp-common.S -+++ b/sysdeps/s390/s390-64/setjmp-common.S -@@ -55,10 +55,6 @@ ENTRY(__sigsetjmp) - #else - stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ - #endif ++__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 (;;); ++} +Index: glibc-2.19/sysdeps/s390/s390-64/setjmp-common.S +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#define _ASM +-#define _SETJMP_H +-#include +- +- /* 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) -diff --git a/sysdeps/s390/setjmp.S b/sysdeps/s390/setjmp.S -index 2ec621a..3e50e89 100644 ---- a/sysdeps/s390/setjmp.S -+++ b/sysdeps/s390/setjmp.S -@@ -27,7 +27,6 @@ versioned_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19) - #define _setjmp __v2_setjmp - #define __setjmp __v2__setjmp - #define __sigsetjmp __v2__sigsetjmp +- 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) +Index: glibc-2.19/sysdeps/s390/s390-64/setjmp.S +=================================================================== +--- /dev/null ++++ glibc-2.19/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 ++ . */ ++ ++#include ++#define _ASM ++#define _SETJMP_H ++#include ++#include ++ ++#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 */ +Index: glibc-2.19/sysdeps/s390/setjmp.S +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#include +- +-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" - -@@ -35,7 +34,6 @@ versioned_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19) - #undef _setjmp - #undef __setjmp - #undef __sigsetjmp +- +-#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) -@@ -46,19 +44,9 @@ 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) +-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 @@ -306,29 +1140,50 @@ index 2ec621a..3e50e89 100644 -# undef __setjmp -# undef __sigsetjmp -# undef __sigjmp_save -+strong_alias (__v2setjmp, __v1setjmp) -+strong_alias (__v2_setjmp, __v1_setjmp) -+strong_alias (__v2__setjmp, __v1__setjmp) -+strong_alias (__v2__sigsetjmp, __v1__sigsetjmp) - - #endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */ -diff --git a/sysdeps/s390/sigjmp.c b/sysdeps/s390/sigjmp.c -index f7b5a6f..73dd356 100644 ---- a/sysdeps/s390/sigjmp.c -+++ b/sysdeps/s390/sigjmp.c -@@ -24,7 +24,7 @@ - Always return zero. */ - - int +- +-#endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */ +Index: glibc-2.19/sysdeps/s390/sigjmp.c +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#include +-#include +- +-/* 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) -+__sigjmp_save (sigjmp_buf env, int savemask) - { - env[0].__mask_was_saved = (savemask && - __sigprocmask (SIG_BLOCK, (sigset_t *) NULL, -diff --git a/sysdeps/s390/v1-longjmp.c b/sysdeps/s390/v1-longjmp.c -deleted file mode 100644 -index 82252c9..0000000 ---- a/sysdeps/s390/v1-longjmp.c +-{ +- env[0].__mask_was_saved = (savemask && +- __sigprocmask (SIG_BLOCK, (sigset_t *) NULL, +- &env[0].__saved_mask) == 0); +- +- return 0; +-} +Index: glibc-2.19/sysdeps/s390/v1-longjmp.c +=================================================================== +--- glibc-2.19.orig/sysdeps/s390/v1-longjmp.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2013 Free Software Foundation, Inc. @@ -388,10 +1243,9 @@ index 82252c9..0000000 -# endif /* ifndef __v1__longjmp */ -# endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */ -#endif /* if !defined NOT_INT_libc && defined SHARED */ -diff --git a/sysdeps/s390/v1-setjmp.h b/sysdeps/s390/v1-setjmp.h -deleted file mode 100644 -index a4a6b76..0000000 ---- a/sysdeps/s390/v1-setjmp.h +Index: glibc-2.19/sysdeps/s390/v1-setjmp.h +=================================================================== +--- glibc-2.19.orig/sysdeps/s390/v1-setjmp.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 1991-2013 Free Software Foundation, Inc. @@ -505,10 +1359,9 @@ index a4a6b76..0000000 -#endif /* !_ASM */ - -#endif /* ifndef _V1_SETJMP_H */ -diff --git a/sysdeps/s390/v1-sigjmp.c b/sysdeps/s390/v1-sigjmp.c -deleted file mode 100644 -index b624d16..0000000 ---- a/sysdeps/s390/v1-sigjmp.c +Index: glibc-2.19/sysdeps/s390/v1-sigjmp.c +=================================================================== +--- glibc-2.19.orig/sysdeps/s390/v1-sigjmp.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1992-2013 Free Software Foundation, Inc. @@ -555,10 +1408,10 @@ index b624d16..0000000 - -# endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */ -#endif /* !NOT_IN_libc && SHARED */ -diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile -index f91179d..45b1922 100644 ---- a/sysdeps/unix/sysv/linux/s390/Makefile -+++ b/sysdeps/unix/sysv/linux/s390/Makefile +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/Makefile +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/Makefile ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/Makefile @@ -16,9 +16,3 @@ endif ifeq ($(subdir),elf) sysdep_routines += dl-vdso @@ -569,73 +1422,151 @@ index f91179d..45b1922 100644 -sysdep_routines += v1-longjmp_chk -endif -endif -diff --git a/sysdeps/unix/sysv/linux/s390/getcontext.S b/sysdeps/unix/sysv/linux/s390/getcontext.S -index 5edbf95..4b2c2c6 100644 ---- a/sysdeps/unix/sysv/linux/s390/getcontext.S -+++ b/sysdeps/unix/sysv/linux/s390/getcontext.S -@@ -29,10 +29,6 @@ versioned_symbol (libc, __v2getcontext, getcontext, GLIBC_2_19) - libc_hidden_ver (__v2getcontext, getcontext) - - #if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_19) +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/getcontext.S +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#include +- +-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) +-compat_symbol (libc, __v1getcontext, getcontext, GLIBC_2_1) -# define __getcontext __v1getcontext -# include "getcontext-common.S" -# undef __getcontext - -+strong_alias (__v2getcontext, __v1getcontext) - #endif -diff --git a/sysdeps/unix/sysv/linux/s390/longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/longjmp_chk.c -index 10f542d..84c28b7 100644 ---- a/sysdeps/unix/sysv/linux/s390/longjmp_chk.c -+++ b/sysdeps/unix/sysv/linux/s390/longjmp_chk.c -@@ -21,24 +21,25 @@ +-#endif +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/longjmp_chk.c +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/longjmp_chk.c ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/longjmp_chk.c +@@ -15,30 +15,34 @@ + License along with the GNU C Library; if not, see + . + +- 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 - #include +-#include -/* This place is the only user of these functions. */ -extern void ____v2__longjmp_chk (__jmp_buf __env, int __val) -- __attribute__ ((__noreturn__)); -- - #if defined NOT_IN_libc ++#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 ++ ++// 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 -+# define __longjmp ____longjmp_chk -+# define __libc_siglongjmp __longjmp_chk ++# include - # include +-# include ++/* 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 -+# define __longjmp ____longjmp_chk -+# define __libc_siglongjmp __libc_siglongjmp_chk - - # include - +- +-# include +- -versioned_symbol (libc, __v2__libc_siglongjmp_chk, __longjmp_chk, GLIBC_2_19); -+versioned_symbol (libc, __libc_siglongjmp_chk, __longjmp_chk, GLIBC_2_19); -+ -+# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_11, GLIBC_2_19) -+strong_alias (__libc_siglongjmp_chk, __v1__libc_siglongjmp_chk); -+compat_symbol (libc, __v1__libc_siglongjmp_chk, __longjmp_chk, GLIBC_2_11); -+# endif ++# include #endif -diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c -index a1b7a6a..3cf4e35 100644 ---- a/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c -+++ b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c -@@ -52,21 +52,5 @@ +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-/* Build a non-versioned object for rtld-*. */ +-#include "getcontext-common.S" +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c +@@ -26,8 +26,8 @@ + #include + #include + #include +-#include +-#include ++ ++#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" +-# define __longjmp ____longjmp_chk +-# include "__longjmp-common.c" - -#else /* !NOT_IN_libc */ -# define __longjmp ____v2__longjmp_chk @@ -650,22 +1581,74 @@ index a1b7a6a..3cf4e35 100644 - -# endif -#endif /* !NOT_IN_libc */ -diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S -index 4992030..42fc376 100644 ---- a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S -+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S -@@ -19,7 +19,6 @@ - #include - #include - ++#include "__longjmp.c" +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#include +- -#include "rtld-global-offsets.h" - #include "ucontext_i.h" - - /* __getcontext (const ucontext_t *ucp) -@@ -60,42 +59,6 @@ ENTRY(__getcontext) - std %f14,SC_FPRS+112(%r1) - std %f15,SC_FPRS+120(%r1) - +-#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 @@ -702,13 +1685,127 @@ index 4992030..42fc376 100644 -#endif -2: st %r2,SC_FLGS(%r1) - - /* Set __getcontext return value to 0. */ - slr %r2,%r2 - -diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S -index fbe8b77..42839e2 100644 ---- a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S -+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S +- /* 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) +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S +=================================================================== +--- /dev/null ++++ glibc-2.19/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 ++ . */ ++ ++#include ++#include ++ ++#include "ucontext_i.h" ++ ++#include ++ ++/* __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 +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist +@@ -1777,7 +1777,6 @@ GLIBC_2.18 + GLIBC_2.19 + GLIBC_2.19 A + __longjmp_chk F +- __setjmp F + __sigsetjmp F + _longjmp F + _setjmp F +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S @@ -62,16 +62,8 @@ ENTRY(__setcontext) /* Don't touch %a0, used for thread purposes. */ lam %a1,%a15,SC_ACRS+4(%r1) @@ -727,15 +1824,29 @@ index fbe8b77..42839e2 100644 /* Return. */ br %r14 -diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S -index 41ede4b..5c1d7ac 100644 ---- a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S -+++ b/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S -@@ -74,21 +74,10 @@ ENTRY(__swapcontext) +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S +@@ -65,31 +65,19 @@ ENTRY(__swapcontext) + 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) @@ -747,34 +1858,69 @@ index 41ede4b..5c1d7ac 100644 - .machinemode "zarch_nohighgprs" - stmh %r0,%r15,SC_HIGHGPRS(%r1) - lmh %r0,%r15,SC_HIGHGPRS(%r5) - - /* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize). */ +- +- /* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize). */ -0: la %r2,SIG_BLOCK -+ la %r2,SIG_BLOCK - la %r3,SC_MASK(%r5) +- la %r3,SC_MASK(%r5) ++ la %r3,SC_MASK(%r5) slr %r4,%r4 lhi %r5,_NSIG8 -diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym -index 705c7ab..6cc9f19 100644 ---- a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym -+++ b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym -@@ -23,4 +23,3 @@ SC_ACRS mcontext (aregs) - SC_FPC mcontext (fpregs.fpc) - SC_FPRS mcontext (fpregs.fprs) - SC_MASK ucontext (uc_sigmask) + svc SYS_ify(rt_sigprocmask) +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym ++++ /dev/null +@@ -1,26 +0,0 @@ +-#include +-#include +-#include +- +--- +- +-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) -diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c -index bc27b08..a8c2b8d 100644 ---- a/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c -+++ b/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c -@@ -52,22 +52,5 @@ +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c +@@ -26,8 +26,8 @@ + #include + #include + #include +-#include +-#include ++ ++#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" +-# define __longjmp ____longjmp_chk +-# include "__longjmp-common.c" - -#else /* !NOT_IN_libc */ -# define __longjmp ____v2__longjmp_chk @@ -790,40 +1936,263 @@ index bc27b08..a8c2b8d 100644 - -# endif -#endif /* !NOT_IN_libc */ -diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S -index 3e61e30..3538ee7 100644 ---- a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S -+++ b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S -@@ -62,10 +62,6 @@ ENTRY(__getcontext) - /* Set __getcontext return value to 0. */ - slgr %r2,%r2 - ++#include "__longjmp.c" +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S +=================================================================== +--- glibc-2.19.orig/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 +- . */ +- +-#include +-#include +- +-#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) +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S +=================================================================== +--- /dev/null ++++ glibc-2.19/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 ++ . */ ++ ++#include ++#include ++ ++#include "ucontext_i.h" ++ ++#include ++ ++/* __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 +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist +@@ -98,7 +98,6 @@ GLIBC_2.18 + GLIBC_2.19 + GLIBC_2.19 A + __longjmp_chk F +- __setjmp F + __sigsetjmp F + _longjmp F + _setjmp F +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S +@@ -65,25 +65,21 @@ ENTRY(__swapcontext) + 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) -diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S -index ac74b6b..eda5d33 100644 ---- a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S -+++ b/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S -@@ -74,10 +74,7 @@ ENTRY(__swapcontext) +- /* 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 +- 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 -diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h -index f04bf84..d528cb1 100644 ---- a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h -+++ b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h ++ 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. */ +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.sym +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.sym ++++ /dev/null +@@ -1,25 +0,0 @@ +-#include +-#include +-#include +- +--- +- +-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) +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/sys/ucontext.h +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/sys/ucontext.h ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/sys/ucontext.h @@ -64,15 +64,6 @@ typedef struct fpreg_t fprs[16]; } fpregset_t; @@ -851,10 +2220,39 @@ index f04bf84..d528cb1 100644 }; -diff --git a/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c -deleted file mode 100644 -index bd80acf..0000000 ---- a/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/ucontext_i.sym +=================================================================== +--- /dev/null ++++ glibc-2.19/sysdeps/unix/sysv/linux/s390/ucontext_i.sym +@@ -0,0 +1,25 @@ ++#include ++#include ++#include ++ ++-- ++ ++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) +Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c +=================================================================== +--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2013 Free Software Foundation, Inc. @@ -892,6 +2290,3 @@ index bd80acf..0000000 - -# endif -#endif --- -2.0.2 -