diff --git a/glibc-testsuite.changes b/glibc-testsuite.changes index feb21e6..390a386 100644 --- a/glibc-testsuite.changes +++ b/glibc-testsuite.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Mon Jul 28 10:18:46 UTC 2014 - schwab@suse.de + +- ibm93x-redundant-shift-si.patch: Avoid redundant shift character in + iconv output at block boundary (bnc#886416, BZ #17197) + +------------------------------------------------------------------- +Thu Jul 24 15:35:50 UTC 2014 - schwab@suse.de + +- s390-revert-abi-change.patch: revert back to pre-2.19 layout of jmp_buf + and ucontext_t on s390 (bnc#887228) + ------------------------------------------------------------------- Tue Jul 22 08:37:38 UTC 2014 - schwab@suse.de diff --git a/glibc-testsuite.spec b/glibc-testsuite.spec index 5a4610a..188a94d 100644 --- a/glibc-testsuite.spec +++ b/glibc-testsuite.spec @@ -205,6 +205,8 @@ 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 @@ -282,6 +284,8 @@ Patch2003: abort-no-flush.patch Patch2004: pthread-mutex-trylock-elision.patch # PATCH-FIX-UPSTREAM Speedup memset on x86-64 for large block sizes (BZ #16830) Patch2005: glibc-memset-nontemporal.diff +# PATCH-FIX-UPSTREAM Avoid redundant shift character in iconv output at block boundary (BZ #17197) +Patch2006: ibm93x-redundant-shift-si.patch # Non-glibc patches # PATCH-FIX-OPENSUSE Remove debianisms from manpages @@ -471,6 +475,7 @@ rm nscd/s-stamp %patch15 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %patch100 -p1 %patch102 -p1 @@ -506,6 +511,7 @@ rm nscd/s-stamp %patch2003 -p1 %patch2004 -p1 %patch2005 -p1 +%patch2006 -p1 %patch3000 diff --git a/glibc-utils.changes b/glibc-utils.changes index feb21e6..390a386 100644 --- a/glibc-utils.changes +++ b/glibc-utils.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Mon Jul 28 10:18:46 UTC 2014 - schwab@suse.de + +- ibm93x-redundant-shift-si.patch: Avoid redundant shift character in + iconv output at block boundary (bnc#886416, BZ #17197) + +------------------------------------------------------------------- +Thu Jul 24 15:35:50 UTC 2014 - schwab@suse.de + +- s390-revert-abi-change.patch: revert back to pre-2.19 layout of jmp_buf + and ucontext_t on s390 (bnc#887228) + ------------------------------------------------------------------- Tue Jul 22 08:37:38 UTC 2014 - schwab@suse.de diff --git a/glibc-utils.spec b/glibc-utils.spec index 6ce4675..5d3bd54 100644 --- a/glibc-utils.spec +++ b/glibc-utils.spec @@ -204,6 +204,8 @@ 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 @@ -281,6 +283,8 @@ Patch2003: abort-no-flush.patch Patch2004: pthread-mutex-trylock-elision.patch # PATCH-FIX-UPSTREAM Speedup memset on x86-64 for large block sizes (BZ #16830) Patch2005: glibc-memset-nontemporal.diff +# PATCH-FIX-UPSTREAM Avoid redundant shift character in iconv output at block boundary (BZ #17197) +Patch2006: ibm93x-redundant-shift-si.patch # Non-glibc patches # PATCH-FIX-OPENSUSE Remove debianisms from manpages @@ -471,6 +475,7 @@ rm nscd/s-stamp %patch15 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %patch100 -p1 %patch102 -p1 @@ -506,6 +511,7 @@ rm nscd/s-stamp %patch2003 -p1 %patch2004 -p1 %patch2005 -p1 +%patch2006 -p1 %patch3000 diff --git a/glibc.changes b/glibc.changes index feb21e6..390a386 100644 --- a/glibc.changes +++ b/glibc.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Mon Jul 28 10:18:46 UTC 2014 - schwab@suse.de + +- ibm93x-redundant-shift-si.patch: Avoid redundant shift character in + iconv output at block boundary (bnc#886416, BZ #17197) + +------------------------------------------------------------------- +Thu Jul 24 15:35:50 UTC 2014 - schwab@suse.de + +- s390-revert-abi-change.patch: revert back to pre-2.19 layout of jmp_buf + and ucontext_t on s390 (bnc#887228) + ------------------------------------------------------------------- Tue Jul 22 08:37:38 UTC 2014 - schwab@suse.de diff --git a/glibc.spec b/glibc.spec index 4a3a2c2..2e8993d 100644 --- a/glibc.spec +++ b/glibc.spec @@ -205,6 +205,8 @@ 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 @@ -282,6 +284,8 @@ Patch2003: abort-no-flush.patch Patch2004: pthread-mutex-trylock-elision.patch # PATCH-FIX-UPSTREAM Speedup memset on x86-64 for large block sizes (BZ #16830) Patch2005: glibc-memset-nontemporal.diff +# PATCH-FIX-UPSTREAM Avoid redundant shift character in iconv output at block boundary (BZ #17197) +Patch2006: ibm93x-redundant-shift-si.patch # Non-glibc patches # PATCH-FIX-OPENSUSE Remove debianisms from manpages @@ -471,6 +475,7 @@ rm nscd/s-stamp %patch15 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %patch100 -p1 %patch102 -p1 @@ -506,6 +511,7 @@ rm nscd/s-stamp %patch2003 -p1 %patch2004 -p1 %patch2005 -p1 +%patch2006 -p1 %patch3000 diff --git a/ibm93x-redundant-shift-si.patch b/ibm93x-redundant-shift-si.patch new file mode 100644 index 0000000..640c61f --- /dev/null +++ b/ibm93x-redundant-shift-si.patch @@ -0,0 +1,201 @@ +Avoid redundant shift character in iconv output at block boundary (bug #17197) + + [BZ #17197] + * iconvdata/ibm930.c (BODY for TO_LOOP): Record current DBCS state + immediately after emitting SI. + * iconvdata/ibm933.c (BODY for TO_LOOP): Likewise. + * iconvdata/ibm935.c (BODY for TO_LOOP): Likewise. + * iconvdata/ibm937.c (BODY for TO_LOOP): Likewise. + * iconvdata/ibm939.c (BODY for TO_LOOP): Likewise. + * iconvdata/bug-iconv10.c: New file. + * iconvdata/Makefile (tests): Add bug-iconv10. + ($(objpfx)bug-iconv10.out): New rule. + +Index: glibc-2.19/iconvdata/Makefile +=================================================================== +--- glibc-2.19.orig/iconvdata/Makefile ++++ glibc-2.19/iconvdata/Makefile +@@ -67,7 +67,8 @@ include ../Makeconfig + + ifeq (yes,$(build-shared)) + tests = bug-iconv1 bug-iconv2 tst-loading tst-e2big tst-iconv4 bug-iconv4 \ +- tst-iconv6 bug-iconv5 bug-iconv6 tst-iconv7 bug-iconv8 bug-iconv9 ++ tst-iconv6 bug-iconv5 bug-iconv6 tst-iconv7 bug-iconv8 bug-iconv9 \ ++ bug-iconv10 + ifeq ($(have-thread-library),yes) + tests += bug-iconv3 + endif +@@ -295,6 +296,8 @@ $(objpfx)tst-iconv4.out: $(objpfx)gconv- + $(addprefix $(objpfx),$(modules.so)) + $(objpfx)tst-iconv7.out: $(objpfx)gconv-modules \ + $(addprefix $(objpfx),$(modules.so)) ++$(objpfx)bug-iconv10.out: $(objpfx)gconv-modules \ ++ $(addprefix $(objpfx),$(modules.so)) + + $(objpfx)iconv-test.out: run-iconv-test.sh $(objpfx)gconv-modules \ + $(addprefix $(objpfx),$(modules.so)) \ +Index: glibc-2.19/iconvdata/bug-iconv10.c +=================================================================== +--- /dev/null ++++ glibc-2.19/iconvdata/bug-iconv10.c +@@ -0,0 +1,60 @@ ++/* bug 17197: check for redundant shift character at block boundary. */ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static int ++do_test (void) ++{ ++ iconv_t cd = iconv_open ("IBM930", "UTF-8"); ++ if (cd == (iconv_t) -1) ++ { ++ puts ("iconv_open failed"); ++ return 1; ++ } ++ ++ char instr1[] = "\xc2\xa6."; ++ const char expstr1[4] = "\016Bj\017"; ++ const char expstr2[] = "K"; ++ char outstr[4]; ++ size_t inlen = sizeof (instr1); ++ size_t outlen = sizeof (outstr); ++ char *inptr = instr1; ++ char *outptr = outstr; ++ size_t r = iconv (cd, &inptr, &inlen, &outptr, &outlen); ++ if (r != -1 ++ || errno != E2BIG ++ || inlen != sizeof (instr1) - 2 ++ || inptr != instr1 + 2 ++ || outlen != 0 ++ || memcmp (outstr, expstr1, sizeof (expstr1)) != 0) ++ { ++ puts ("wrong first conversion"); ++ return 1; ++ } ++ ++ outlen = sizeof (outstr); ++ outptr = outstr; ++ r = iconv (cd, &inptr, &inlen, &outptr, &outlen); ++ if (r != 0 ++ || inlen != 0 ++ || outlen != sizeof (outstr) - sizeof (expstr2) ++ || memcmp (outstr, expstr2, sizeof (expstr2)) != 0) ++ { ++ puts ("wrong second conversion"); ++ return 1; ++ } ++ ++ if (iconv_close (cd) != 0) ++ { ++ puts ("iconv_close failed"); ++ return 1; ++ } ++ return 0; ++} ++ ++#define TEST_FUNCTION do_test () ++#include "../test-skeleton.c" +Index: glibc-2.19/iconvdata/ibm930.c +=================================================================== +--- glibc-2.19.orig/iconvdata/ibm930.c ++++ glibc-2.19/iconvdata/ibm930.c +@@ -255,6 +255,7 @@ enum + break; \ + } \ + *outptr++ = SI; \ ++ curcs = sb; \ + } \ + \ + if (__builtin_expect (outptr + 1 > outend, 0)) \ +@@ -268,7 +269,6 @@ enum + *outptr++ = 0x5b; \ + else \ + *outptr++ = cp[0]; \ +- curcs = sb; \ + } \ + \ + /* Now that we wrote the output increment the input pointer. */ \ +Index: glibc-2.19/iconvdata/ibm933.c +=================================================================== +--- glibc-2.19.orig/iconvdata/ibm933.c ++++ glibc-2.19/iconvdata/ibm933.c +@@ -254,6 +254,7 @@ enum + break; \ + } \ + *outptr++ = SI; \ ++ curcs = sb; \ + } \ + \ + if (__builtin_expect (outptr + 1 > outend, 0)) \ +@@ -262,7 +263,6 @@ enum + break; \ + } \ + *outptr++ = cp[0]; \ +- curcs = sb; \ + } \ + \ + /* Now that we wrote the output increment the input pointer. */ \ +Index: glibc-2.19/iconvdata/ibm935.c +=================================================================== +--- glibc-2.19.orig/iconvdata/ibm935.c ++++ glibc-2.19/iconvdata/ibm935.c +@@ -254,6 +254,7 @@ enum + break; \ + } \ + *outptr++ = SI; \ ++ curcs = sb; \ + } \ + \ + if (__builtin_expect (outptr + 1 > outend, 0)) \ +@@ -262,7 +263,6 @@ enum + break; \ + } \ + *outptr++ = cp[0]; \ +- curcs = sb; \ + } \ + \ + /* Now that we wrote the output increment the input pointer. */ \ +Index: glibc-2.19/iconvdata/ibm937.c +=================================================================== +--- glibc-2.19.orig/iconvdata/ibm937.c ++++ glibc-2.19/iconvdata/ibm937.c +@@ -254,6 +254,7 @@ enum + break; \ + } \ + *outptr++ = SI; \ ++ curcs = sb; \ + } \ + \ + if (__builtin_expect (outptr + 1 > outend, 0)) \ +@@ -262,7 +263,6 @@ enum + break; \ + } \ + *outptr++ = cp[0]; \ +- curcs = sb; \ + } \ + \ + /* Now that we wrote the output increment the input pointer. */ \ +Index: glibc-2.19/iconvdata/ibm939.c +=================================================================== +--- glibc-2.19.orig/iconvdata/ibm939.c ++++ glibc-2.19/iconvdata/ibm939.c +@@ -254,6 +254,7 @@ enum + break; \ + } \ + *outptr++ = SI; \ ++ curcs = sb; \ + } \ + \ + if (__builtin_expect (outptr + 1 > outend, 0)) \ +@@ -267,7 +268,6 @@ enum + *outptr++ = 0xb2; \ + else \ + *outptr++ = cp[0]; \ +- curcs = sb; \ + } \ + \ + /* Now that we wrote the output increment the input pointer. */ \ diff --git a/s390-revert-abi-change.patch b/s390-revert-abi-change.patch new file mode 100644 index 0000000..a87bb50 --- /dev/null +++ b/s390-revert-abi-change.patch @@ -0,0 +1,897 @@ +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" + +--- + 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 + +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" + #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. */ +-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) +@@ -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); ++ ++#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 ++++ /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 +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; + longjmp; _longjmp; siglongjmp; + } +- GLIBC_PRIVATE { +- __v1__libc_longjmp; __v1__libc_siglongjmp; +- __v2__libc_longjmp; __v2__libc_siglongjmp; +- } + } + + 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 + +-#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) */ +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 +@@ -40,10 +40,6 @@ typedef struct __s390_jmp_buf + /* 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 +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 + +-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) ++__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. */ +- __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) +-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); ++#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); +-#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) ++ ++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. */ +-attribute_hidden void ++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 +-#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. */ +-attribute_hidden void ++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 +-#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 +-#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 +-#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) +-# 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 ++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 +-__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 ++++ /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 +- . +- +- Versioned copy of sysdeps/generic/longjmp.c modified for extended +- jmpbuf. */ +- +-#include +-#include +-#include +-#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 */ +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 ++++ /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 +- . */ +- +-/* +- * ISO C99 Standard: 7.13 Nonlocal jumps +- */ +- +-#ifndef _V1_SETJMP_H +-#define _V1_SETJMP_H 1 +- +-#include +- +-__BEGIN_DECLS +- +-#define __V1_JMPBUF +-#define _SETJMP_H +-#include /* Get `__jmp_buf'. */ +- +-#ifndef _ASM +- +-#include /* 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 */ +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 ++++ /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 +- . +- +- Copied from setjmp/sigjmp.c for extending jmp_buf. */ +- +-#include +-#include +- +-#if !defined NOT_IN_libc && defined SHARED +-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) +-# include +-# include +-# include +- +-/* 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 */ +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 +@@ -16,9 +16,3 @@ endif + ifeq ($(subdir),elf) + sysdep_routines += dl-vdso + endif +- +-ifeq ($(subdir),debug) +-ifeq (yes,$(build-shared)) +-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) +-# define __V1_UCONTEXT + 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 @@ + #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 + +-# define __v2__longjmp ____longjmp_chk +-# define __v2__libc_siglongjmp __longjmp_chk ++# define __longjmp ____longjmp_chk ++# define __libc_siglongjmp __longjmp_chk + + # include + + #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 + +-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 + + #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 @@ + } 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 */ +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 "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) + +- 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 + +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 +@@ -62,16 +62,8 @@ ENTRY(__setcontext) + /* 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 +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) + /* Store general purpose registers. */ + stm %r0,%r15,SC_GPRS(%r1) + +- /* Copy uc_flags into the new ucontext_t. */ + 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 %r2,SIG_BLOCK + 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) +-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 @@ + } 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 */ +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 + +- /* 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) + +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) + /* 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 +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 +@@ -64,15 +64,6 @@ typedef struct + 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 @@ struct ucontext + stack_t uc_stack; + mcontext_t uc_mcontext; + __sigset_t uc_sigmask; +-#ifndef __s390x__ +- unsigned long uc_high_gprs[16]; +-#endif +- char __reserved[512]; + }; + + +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 ++++ /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 +- . +- +- 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 +- +-#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 +- +-compat_symbol (libc, __v1__libc_siglongjmp_chk, __longjmp_chk, GLIBC_2_11); +- +-# endif +-#endif +-- +2.0.2 +