SHA256
1
0
forked from pool/glibc
glibc/s390-revert-abi-change.patch
Andreas Schwab d9bb8764aa Accepting request 242722 from home:Andreas_Schwab:Factory
- ibm93x-redundant-shift-si.patch: Avoid redundant shift character in
  iconv output at block boundary (bnc#886416, BZ #17197)

- s390-revert-abi-change.patch: revert back to pre-2.19 layout of jmp_buf
  and ucontext_t on s390 (bnc#887228)

OBS-URL: https://build.opensuse.org/request/show/242722
OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=376
2014-07-28 12:42:05 +00:00

898 lines
31 KiB
Diff

From a779f6e6d899cd601afc19ce19415659bbf646c9 Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@suse.de>
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 <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)
@@ -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 <libc-symbols.h>
#include <shlib-compat.h>
-#define __longjmp __v2__longjmp
#include "__longjmp-common.c"
-#undef __longjmp
-strong_alias (__v2__longjmp, __longjmp)
-
-#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
-# undef __longjmp
-# define __V1_JMPBUF
-# define __longjmp __v1__longjmp
-# include "__longjmp-common.c"
-#endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
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 <setjmp.h>
#include <signal.h>
-extern void __v2__longjmp (__jmp_buf __env, int __val)
- __attribute__ ((__noreturn__));
-extern void __v2__libc_longjmp (sigjmp_buf env, int val)
- __attribute__ ((__noreturn__));
-libc_hidden_proto (__v2__libc_longjmp)
-
/* Set the signal mask to the one specified in ENV, and jump
to the position specified in ENV, causing the setjmp
call there to return VAL, or 1 if VAL is 0. */
void
-__v2__libc_siglongjmp (sigjmp_buf env, int val)
+__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
- <http://www.gnu.org/licenses/>.
-
- Versioned copy of sysdeps/generic/longjmp.c modified for extended
- jmpbuf. */
-
-#include <shlib-compat.h>
-#include <stddef.h>
-#include <signal.h>
-#include "v1-setjmp.h"
-
-#if !defined NOT_INT_libc && defined SHARED
-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
-
-void
-__v1__libc_siglongjmp (__v1__sigjmp_buf env, int val)
-{
- /* Perform any cleanups needed by the frames being unwound. */
- _longjmp_unwind (env, val);
-
- if (env[0].__mask_was_saved)
- /* Restore the saved signal mask. */
- (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask,
- (sigset_t *) NULL);
-
- /* Call the machine-dependent function to restore machine state. */
- __v1__longjmp (env[0].__jmpbuf, val ?: 1);
-}
-
-# ifndef __v1__longjmp
-strong_alias (__v1__libc_siglongjmp, __v1__libc_longjmp)
-libc_hidden_def (__v1__libc_longjmp)
-weak_alias (__v1__libc_siglongjmp, __v1_longjmp)
-weak_alias (__v1__libc_siglongjmp, __v1longjmp)
-weak_alias (__v1__libc_siglongjmp, __v1siglongjmp)
-
-compat_symbol (libc, __v1_longjmp, _longjmp, GLIBC_2_0);
-compat_symbol (libc, __v1longjmp, longjmp, GLIBC_2_0);
-compat_symbol (libc, __v1siglongjmp, siglongjmp, GLIBC_2_0);
-
-# endif /* ifndef __v1__longjmp */
-# endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
-#endif /* if !defined NOT_INT_libc && defined SHARED */
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
- <http://www.gnu.org/licenses/>. */
-
-/*
- * ISO C99 Standard: 7.13 Nonlocal jumps <setjmp.h>
- */
-
-#ifndef _V1_SETJMP_H
-#define _V1_SETJMP_H 1
-
-#include <features.h>
-
-__BEGIN_DECLS
-
-#define __V1_JMPBUF
-#define _SETJMP_H
-#include <bits/setjmp.h> /* Get `__jmp_buf'. */
-
-#ifndef _ASM
-
-#include <bits/sigset.h> /* Get `__sigset_t'. */
-
-
-/* Calling environment, plus possibly a saved signal mask. */
-typedef struct __v1__jmp_buf_tag
- {
- /* NOTE: The machine-dependent definitions of `__sigsetjmp'
- assume that a `jmp_buf' begins with a `__jmp_buf' and that
- `__mask_was_saved' follows it. Do not move these members
- or add others before it. */
- __jmp_buf __jmpbuf; /* Calling environment. */
- int __mask_was_saved; /* Saved the signal mask? */
- __sigset_t __saved_mask; /* Saved signal mask. */
- } __v1__jmp_buf[1];
-
-
-/* Store the calling environment in ENV, also saving the signal mask.
- Return 0. */
-extern int __v1setjmp (__v1__jmp_buf __env);
-
-/* Store the calling environment in ENV, also saving the
- signal mask if SAVEMASK is nonzero. Return 0.
- This is the internal name for `sigsetjmp'. */
-extern int __v1__sigsetjmp (struct __v1__jmp_buf_tag __env[1],
- int __savemask);
-
-/* Store the calling environment in ENV, not saving the signal mask.
- Return 0. */
-extern int __v1_setjmp (struct __v1__jmp_buf_tag __env[1]);
-
-/* Jump to the environment saved in ENV, making the
- `setjmp' call there return VAL, or 1 if VAL is 0. */
-extern void __v1longjmp (struct __v1__jmp_buf_tag __env[1], int __val)
- __attribute__ ((__noreturn__));
-
-/* Same. Usually `_longjmp' is used with `_setjmp', which does not save
- the signal mask. But it is how ENV was saved that determines whether
- `longjmp' restores the mask; `_longjmp' is just an alias. */
-extern void __v1_longjmp (struct __v1__jmp_buf_tag __env[1], int __val)
- __attribute__ ((__noreturn__));
-
-/* Use the same type for `jmp_buf' and `sigjmp_buf'.
- The `__mask_was_saved' flag determines whether
- or not `longjmp' will restore the signal mask. */
-typedef struct __v1__jmp_buf_tag __v1__sigjmp_buf[1];
-
-/* Jump to the environment saved in ENV, making the
- sigsetjmp call there return VAL, or 1 if VAL is 0.
- Restore the signal mask if that sigsetjmp call saved it.
- This is just an alias `longjmp'. */
-extern void __v1siglongjmp (__v1__sigjmp_buf __env, int __val)
- __attribute__ ((__noreturn__));
-
-/* Internal machine-dependent function to restore context sans signal mask. */
-extern void __v1__longjmp (__jmp_buf __env, int __val)
- __attribute__ ((__noreturn__));
-
-/* Internal function to possibly save the current mask of blocked signals
- in ENV, and always set the flag saying whether or not it was saved.
- This is used by the machine-dependent definition of `__sigsetjmp'.
- Always returns zero, for convenience. */
-extern int __v1__sigjmp_save (__v1__jmp_buf __env, int __savemask);
-
-extern void _longjmp_unwind (__v1__jmp_buf env, int val);
-
-extern void __v1__libc_siglongjmp (__v1__sigjmp_buf env, int val)
- __attribute__ ((noreturn));
-
-extern void __v1__libc_longjmp (__v1__sigjmp_buf env, int val)
- __attribute__ ((noreturn));
-
-libc_hidden_proto (__v1__libc_longjmp)
-libc_hidden_proto (__v1_setjmp)
-libc_hidden_proto (__v1__sigsetjmp)
-#endif /* !_ASM */
-
-#endif /* ifndef _V1_SETJMP_H */
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
- <http://www.gnu.org/licenses/>.
-
- Copied from setjmp/sigjmp.c for extending jmp_buf. */
-
-#include <bits/wordsize.h>
-#include <shlib-compat.h>
-
-#if !defined NOT_IN_libc && defined SHARED
-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
-# include <stddef.h>
-# include <v1-setjmp.h>
-# include <signal.h>
-
-/* This function is called by the `sigsetjmp' macro
- before doing a `__setjmp' on ENV[0].__jmpbuf.
- Always return zero. */
-
-int
-__v1__sigjmp_save (__v1__sigjmp_buf env, int savemask)
-{
- env[0].__mask_was_saved = (savemask &&
- __sigprocmask (SIG_BLOCK, (sigset_t *) NULL,
- &env[0].__saved_mask) == 0);
-
- return 0;
-}
-
-# endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
-#endif /* !NOT_IN_libc && SHARED */
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 <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)
- __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 <longjmp.c>
#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 <longjmp.c>
-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 <sysdep.h>
#include <features.h>
-#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
- <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
--
2.0.2