summaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorStefan Liebler <stli@linux.vnet.ibm.com>2014-07-31 20:04:54 +0200
committerAndreas Krebbel <krebbel@linux.vnet.ibm.com>2014-07-31 20:04:54 +0200
commit2f438e20ab591641760e97458d5d1569942eced5 (patch)
tree3fb25d366c77a51ecfbf1c79d4b0b02521573443 /sysdeps/unix
parent6c9578a24b5c4182d1c475a32a147478bc757bf3 (diff)
S/390: Revert the jmp_buf/ucontext_t ABI change.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/s390/Makefile6
-rw-r--r--sysdeps/unix/sysv/linux/s390/getcontext.S38
-rw-r--r--sysdeps/unix/sysv/linux/s390/longjmp_chk.c36
-rw-r--r--sysdeps/unix/sysv/linux/s390/pt-longjmp.c71
-rw-r--r--sysdeps/unix/sysv/linux/s390/rtld-getcontext.S19
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c24
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S (renamed from sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S)50
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S10
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S24
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym26
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c25
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S (renamed from sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S)15
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S14
-rw-r--r--sysdeps/unix/sysv/linux/s390/sys/ucontext.h13
-rw-r--r--sysdeps/unix/sysv/linux/s390/ucontext_i.sym (renamed from sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.sym)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c35
18 files changed, 87 insertions, 321 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile
index 768f926fb8..5c3ca69e71 100644
--- a/sysdeps/unix/sysv/linux/s390/Makefile
+++ b/sysdeps/unix/sysv/linux/s390/Makefile
@@ -17,12 +17,6 @@ ifeq ($(subdir),elf)
sysdep_routines += dl-vdso
endif
-ifeq ($(subdir),debug)
-ifeq (yes,$(build-shared))
-sysdep_routines += v1-longjmp_chk
-endif
-endif
-
ifeq ($(subdir),nptl)
ifeq ($(enable-lock-elision),yes)
libpthread-sysdep_routines += elision-lock elision-unlock elision-timed \
diff --git a/sysdeps/unix/sysv/linux/s390/getcontext.S b/sysdeps/unix/sysv/linux/s390/getcontext.S
deleted file mode 100644
index 5edbf95ccb..0000000000
--- a/sysdeps/unix/sysv/linux/s390/getcontext.S
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Extendible version of getcontext for System z
- Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <libc-symbols.h>
-#include <shlib-compat.h>
-
-versioned_symbol (libc, __v2getcontext, getcontext, GLIBC_2_19)
-#define __getcontext __v2getcontext
-
-#include "getcontext-common.S"
-
-#undef __getcontext
-
-libc_hidden_ver (__v2getcontext, getcontext)
-
-#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_19)
-# define __V1_UCONTEXT
-compat_symbol (libc, __v1getcontext, getcontext, GLIBC_2_1)
-# define __getcontext __v1getcontext
-# include "getcontext-common.S"
-# undef __getcontext
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/s390/longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/longjmp_chk.c
index 10f542d61c..02c96c289a 100644
--- a/sysdeps/unix/sysv/linux/s390/longjmp_chk.c
+++ b/sysdeps/unix/sysv/linux/s390/longjmp_chk.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
+/* Copyright (C) 2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -15,30 +15,34 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>.
- This is a copy of debug/longjmp_chk.c extended for symbol
- versioning. */
+ Versioned copy of debug/longjmp_chk.c modified for versioning
+ the reverted jmpbuf extension. */
#include <shlib-compat.h>
-#include <setjmp.h>
-/* This place is the only user of these functions. */
-extern void ____v2__longjmp_chk (__jmp_buf __env, int __val)
+#if !defined NOT_IN_libc && defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+/* this is a copy from debug/longjmp_chk.c because we need an unique name
+ for __longjmp_chk, but it is already named via a define
+ for __libc_siglongjmp in debug/longjmp_chk.c. */
+# include <setjmp.h>
+
+// XXX Should move to include/setjmp.h
+extern void ____longjmp_chk (__jmp_buf __env, int __val)
__attribute__ ((__noreturn__));
-#if defined NOT_IN_libc
+# define __longjmp ____longjmp_chk
+# define __libc_siglongjmp __v1__longjmp_chk
-# define __v2__longjmp ____longjmp_chk
-# define __v2__libc_siglongjmp __longjmp_chk
+# include <setjmp/longjmp.c>
-# include <longjmp.c>
+/* In glibc release 2.19 a new versions of __longjmp_chk was introduced,
+ but was reverted before 2.20. Thus both versions are the same function. */
+strong_alias (__v1__longjmp_chk, __v2__longjmp_chk);
+versioned_symbol (libc, __v1__longjmp_chk, __longjmp_chk, GLIBC_2_11);
+compat_symbol (libc, __v2__longjmp_chk, __longjmp_chk, GLIBC_2_19);
#else
-# define __v2__longjmp ____v2__longjmp_chk
-# define __v2__libc_siglongjmp __v2__libc_siglongjmp_chk
-
-# include <longjmp.c>
-
-versioned_symbol (libc, __v2__libc_siglongjmp_chk, __longjmp_chk, GLIBC_2_19);
+# include <debug/longjmp_chk.c>
#endif
diff --git a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c b/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
index 801432cccb..2e489ae19d 100644
--- a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
+++ b/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
+/* Copyright (C) 2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -15,49 +15,30 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>.
- This is a copy of pthread/pt-longjmp.c made for extending the
- jmpbuf structure on System z. */
+ Versioned copy of nptl/pt-longjmp.c modified for versioning
+ the reverted jmpbuf extension. */
-#include <setjmp.h>
-#include <stdlib.h>
-#include <bits/wordsize.h>
-#include "pthreadP.h"
#include <shlib-compat.h>
-#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19)
-
-/* The __v1 version prototypes are declared in v1-setjmp.h which
- cannot be included together with setjmp.h. So we put the
- prototypes here manually. */
-extern void __v1__libc_siglongjmp (sigjmp_buf env, int val)
- __attribute__ ((noreturn));
-extern void __v1__libc_longjmp (sigjmp_buf env, int val)
- __attribute__ ((noreturn));
-
-void __v1_siglongjmp (sigjmp_buf env, int val)
-{
- __v1__libc_siglongjmp (env, val);
-}
-
-void __v1_longjmp (jmp_buf env, int val)
-{
- __v1__libc_longjmp (env, val);
-}
-
-compat_symbol (libpthread, __v1_longjmp, longjmp, GLIBC_2_0);
-compat_symbol (libpthread, __v1_siglongjmp, siglongjmp, GLIBC_2_0);
-#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19)) */
-
-void
-__v2_longjmp (jmp_buf env, int val)
-{
- __libc_longjmp (env, val);
-}
-
-void
-__v2_siglongjmp (jmp_buf env, int val)
-{
- __libc_siglongjmp (env, val);
-}
-
-versioned_symbol (libpthread, __v2_longjmp, longjmp, GLIBC_2_19);
-versioned_symbol (libpthread, __v2_siglongjmp, siglongjmp, GLIBC_2_19);
+
+#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
+ /* we need a unique name in case of symbol versioning. */
+# define longjmp __v1longjmp
+#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)) */
+
+#include <nptl/pt-longjmp.c>
+
+#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 new versions of longjmp-functions were introduced,
+ but were reverted before 2.20. Thus both versions are the same function. */
+
+# undef longjmp
+
+strong_alias (__v1longjmp, __v2longjmp)
+versioned_symbol (libpthread, __v1longjmp, longjmp, GLIBC_2_0);
+compat_symbol (libpthread, __v2longjmp, longjmp, GLIBC_2_19);
+
+weak_alias (siglongjmp, __v1siglongjmp)
+weak_alias (siglongjmp, __v2siglongjmp)
+versioned_symbol (libpthread, __v1siglongjmp, siglongjmp, GLIBC_2_0);
+compat_symbol (libpthread, __v2siglongjmp, siglongjmp, GLIBC_2_19);
+#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)) */
diff --git a/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S b/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S
deleted file mode 100644
index 653f2b656f..0000000000
--- a/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Build a non-versioned object for rtld-*. */
-#include "getcontext-common.S"
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 a1b7a6a1ae..e74f335768 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
@@ -26,8 +26,8 @@
#include <stdint.h>
#include <signal.h>
#include <sys/syscall.h>
-#include <libc-symbols.h>
-#include <shlib-compat.h>
+
+#define __longjmp ____longjmp_chk
#define CHECK_SP(env, guard) \
do \
@@ -51,22 +51,4 @@
} \
} while (0)
-
-#if defined NOT_IN_libc
-/* Build a non-versioned object for rtld-*. */
-# define __longjmp ____longjmp_chk
-# include "__longjmp-common.c"
-
-#else /* !NOT_IN_libc */
-# define __longjmp ____v2__longjmp_chk
-# include "__longjmp-common.c"
-
-# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_11, GLIBC_2_19)
-# undef __longjmp
-# define __V1_JMPBUF
-# define __longjmp ____v1__longjmp_chk
-# include "__longjmp-common.c"
-# undef __longjmp
-
-# endif
-#endif /* !NOT_IN_libc */
+#include "__longjmp.c"
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
index 4992030239..f35bc5c39a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
@@ -19,9 +19,10 @@
#include <sysdep.h>
#include <features.h>
-#include "rtld-global-offsets.h"
#include "ucontext_i.h"
+#include <shlib-compat.h>
+
/* __getcontext (const ucontext_t *ucp)
Saves the machine context in UCP such that when it is activated,
@@ -37,7 +38,7 @@ ENTRY(__getcontext)
/* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
la %r2,SIG_BLOCK
slr %r3,%r3
- la %r4,SC_MASK(%r1)
+ la %r4,SC_MASK(%r1)
lhi %r5,_NSIG8
svc SYS_ify(rt_sigprocmask)
@@ -60,42 +61,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
@@ -110,3 +75,12 @@ ENTRY(__getcontext)
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
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 03f2e83805..0194f0b086 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/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
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
index fbe8b77caf..42839e26f1 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 41ede4b7b2..9206aa334d 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
+++ b/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)
-
- /* Save/restore the upper halfs if necessary. */
- tml %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */
- jz 0f
- .machine "z900"
- .machinemode "zarch_nohighgprs"
- stmh %r0,%r15,SC_HIGHGPRS(%r1)
- lmh %r0,%r15,SC_HIGHGPRS(%r5)
-
- /* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize). */
-0: la %r2,SIG_BLOCK
- la %r3,SC_MASK(%r5)
+ la %r3,SC_MASK(%r5)
slr %r4,%r4
lhi %r5,_NSIG8
svc SYS_ify(rt_sigprocmask)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
deleted file mode 100644
index 705c7ab6cf..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <stddef.h>
-#include <signal.h>
-#include <sys/ucontext.h>
-
---
-
-SIG_BLOCK
-SIG_UNBLOCK
-SIG_SETMASK
-
-_NSIG8 (_NSIG / 8)
-
-#define ucontext(member) offsetof (ucontext_t, member)
-#define mcontext(member) ucontext (uc_mcontext.member)
-
-SC_FLGS ucontext (uc_flags)
-SC_LINK ucontext (uc_link)
-SC_STCK ucontext (uc_stack.ss_sp)
-SC_STSZ ucontext (uc_stack.ss_size)
-SC_PSW mcontext (psw)
-SC_GPRS mcontext (gregs)
-SC_ACRS mcontext (aregs)
-SC_FPC mcontext (fpregs.fpc)
-SC_FPRS mcontext (fpregs.fprs)
-SC_MASK ucontext (uc_sigmask)
-SC_HIGHGPRS ucontext (uc_high_gprs)
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 bc27b08728..a3b1375a0d 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
@@ -26,8 +26,8 @@
#include <stdint.h>
#include <signal.h>
#include <sys/syscall.h>
-#include <libc-symbols.h>
-#include <shlib-compat.h>
+
+#define __longjmp ____longjmp_chk
#define CHECK_SP(env, guard) \
do \
@@ -51,23 +51,4 @@
} \
} while (0)
-
-#if defined NOT_IN_libc
-/* Build a non-versioned object for rtld-*. */
-# define __longjmp ____longjmp_chk
-# include "__longjmp-common.c"
-
-#else /* !NOT_IN_libc */
-# define __longjmp ____v2__longjmp_chk
-# include "__longjmp-common.c"
-# undef __longjmp
-
-# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_11, GLIBC_2_19)
-# undef __longjmp
-# define __V1_JMPBUF
-# define __longjmp ____v1__longjmp_chk
-# include "__longjmp-common.c"
-# undef __longjmp
-
-# endif
-#endif /* !NOT_IN_libc */
+#include "__longjmp.c"
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
index 3e61e30702..26a1c514c4 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
@@ -21,6 +21,8 @@
#include "ucontext_i.h"
+#include <shlib-compat.h>
+
/* __getcontext (const ucontext_t *ucp)
Saves the machine context in UCP such that when it is activated,
@@ -62,10 +64,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)
@@ -77,3 +75,12 @@ ENTRY(__getcontext)
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
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 4576fc8d14..807f702981 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/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
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
index ac74b6bc08..e3e624c91b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
+++ b/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)
- /* Set __swapcontext return value to 0. */
- slgr %r2,%r2
-
/* Store general purpose registers. */
stmg %r0,%r15,SC_GPRS(%r1)
- /* Copy uc_flags into the new ucontext_t. */
- lgr %r5,%r0
- lg %r2,SC_FLGS(%r5)
- stg %r2,SC_FLGS(%r1)
-
/* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize). */
la %r2,SIG_BLOCK
+ lgr %r5,%r0
la %r3,SC_MASK(%r5)
- slgr %r4,%r4
lghi %r5,_NSIG8
+ slgr %r4,%r4
svc SYS_ify(rt_sigprocmask)
/* Load fpu context. */
diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
index f04bf849d5..d528cb189d 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/s390-64/ucontext_i.sym b/sysdeps/unix/sysv/linux/s390/ucontext_i.sym
index 6cc9f19624..6cc9f19624 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.sym
+++ b/sysdeps/unix/sysv/linux/s390/ucontext_i.sym
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 bd80acfe66..0000000000
--- a/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>.
-
- This went into a separate source file since we would otherwise be
- needed to include two different versions of setjmp.h into the same
- file. */
-
-#include <shlib-compat.h>
-
-#if !defined NOT_IN_libc && defined SHARED
-# if SHLIB_COMPAT (libc, GLIBC_2_11, GLIBC_2_19)
-
-# define __v1__longjmp ____v1__longjmp_chk
-# define __v1__libc_siglongjmp __v1__libc_siglongjmp_chk
-
-# include <v1-longjmp.c>
-
-compat_symbol (libc, __v1__libc_siglongjmp_chk, __longjmp_chk, GLIBC_2_11);
-
-# endif
-#endif