SHA256
1
0
forked from pool/glibc
glibc/s390-revert-abi-change.patch
Andreas Schwab 826ad7dd9f Accepting request 243561 from home:Andreas_Schwab:Factory
- ppc64le-profiling.patch: fix profiling for ppc64le (bnc#889601, BZ
  #17213)
- s390-revert-abi-change.patch: replace with upstream patch, switches
  default symbol version back to old version (bnc#887228)

OBS-URL: https://build.opensuse.org/request/show/243561
OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=378
2014-08-04 07:48:30 +00:00

2293 lines
77 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

2014-07-30 Stefan Liebler <stli@linux.vnet.ibm.com>
* sysdeps/s390/Makefile: Delete file.
* sysdeps/s390/Versions (GLIBC_2.19): Remove __setjmp.
* sysdeps/s390/__longjmp.c: Delete file.
* sysdeps/s390/bits/setjmp.h (__s390_jmp_buf):
Remove fields __flags and __reserved.
* sysdeps/s390/longjmp.c: Include setjmp/longjmp.c
and add versioning.
* sysdeps/s390/rtld-__longjmp.c: Delete file.
* sysdeps/s390/rtld-global-offsets.sym: Likewise.
* sysdeps/s390/rtld-setjmp.S: Likewise.
* sysdeps/s390/s390-32/__longjmp-common.c: Move to ...
* sysdeps/s390/s390-32/__longjmp.c: ... here.
* sysdeps/s390/s390-32/setjmp-common.S: Move to ...
* sysdeps/s390/s390-32/setjmp.S: ... here.
Add versioning.
(__sigsetjmp): Remove setting __flags field.
* sysdeps/s390/s390-64/__longjmp-common.c:Move to ...
* sysdeps/s390/s390-64/__longjmp.c: ... here.
* sysdeps/s390/s390-64/setjmp-common.S: Move to ...
* sysdeps/s390/s390-64/setjmp.S: ... here.
Add versioning.
(__sigsetjmp): Remove setting __flags field.
* sysdeps/s390/setjmp.S: Delete file.
* sysdeps/s390/sigjmp.c: Likewise.
* sysdeps/s390/v1-longjmp.c: Likewise.
* sysdeps/s390/v1-setjmp.h: Likewise.
* sysdeps/s390/v1-sigjmp.c: Likewise.
* sysdeps/unix/sysv/linux/s390/Makefile (sysdep_routines):
Remove v1-longjmp_chk.
* sysdeps/unix/sysv/linux/s390/getcontext.S: Delete file.
* sysdeps/unix/sysv/linux/s390/longjmp_chk.c:
Include debug/longjmp_chk.c and add versioning.
* nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c:
Include nptl/sysdeps/pthread/pt-longjmp.c and add versioning.
* sysdeps/unix/sysv/linux/s390/rtld-getcontext.S: Delete file.
* sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c:
Include __longjmp.c.
* sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S:
Move to ...
* sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S: ... here.
(__getcontext): Remove setting __flags field.
Add versioning.
* sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S:
Don´t restore upper high grps.
* sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S:
Likewise.
(__swapcontext): Remove setting uc_flags field.
* sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym:
Delete file.
* sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c:
Include __longjmp.c.
* sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S:
Move to ...
* sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S: ... here.
(__getcontext): Remove setting __flags field.
Add versioning.
* sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S:
(__swapcontext): Remove setting uc_flags field.
* unix/sysv/linux/s390/s390-64/ucontext_i.sym: Delete file.
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h (ucontext):
Remove fields uc_high_gprs and __reserved.
* sysdeps/unix/sysv/linux/s390/ucontext_i.sym:
New file with reverted content.
* sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c: Delete file.
* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist:
Regenerated.
* sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist:
Regenerated.
Index: glibc-2.19/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
===================================================================
--- glibc-2.19.orig/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
+++ glibc-2.19/nptl/sysdeps/unix/sysv/linux/s390/pt-longjmp.c
@@ -15,49 +15,30 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>.
- This is a copy of pthread/pt-longjmp.c made for extending the
- jmpbuf structure on System z. */
+ Versioned copy of nptl/pt-longjmp.c modified for versioning
+ the reverted jmpbuf extension. */
-#include <setjmp.h>
-#include <stdlib.h>
-#include <bits/wordsize.h>
-#include "pthreadP.h"
#include <shlib-compat.h>
-#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19)
-/* The __v1 version prototypes are declared in v1-setjmp.h which
- cannot be included together with setjmp.h. So we put the
- prototypes here manually. */
-extern void __v1__libc_siglongjmp (sigjmp_buf env, int val)
- __attribute__ ((noreturn));
-extern void __v1__libc_longjmp (sigjmp_buf env, int val)
- __attribute__ ((noreturn));
-
-void __v1_siglongjmp (sigjmp_buf env, int val)
-{
- __v1__libc_siglongjmp (env, val);
-}
-
-void __v1_longjmp (jmp_buf env, int val)
-{
- __v1__libc_longjmp (env, val);
-}
-
-compat_symbol (libpthread, __v1_longjmp, longjmp, GLIBC_2_0);
-compat_symbol (libpthread, __v1_siglongjmp, siglongjmp, GLIBC_2_0);
-#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19)) */
-
-void
-__v2_longjmp (jmp_buf env, int val)
-{
- __libc_longjmp (env, val);
-}
-
-void
-__v2_siglongjmp (jmp_buf env, int val)
-{
- __libc_siglongjmp (env, val);
-}
-
-versioned_symbol (libpthread, __v2_longjmp, longjmp, GLIBC_2_19);
-versioned_symbol (libpthread, __v2_siglongjmp, siglongjmp, GLIBC_2_19);
+#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
+ /* we need a unique name in case of symbol versioning. */
+# define longjmp __v1longjmp
+#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)) */
+
+#include <nptl/sysdeps/pthread/pt-longjmp.c>
+
+#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 new versions of longjmp-functions were introduced,
+ but were reverted before 2.20. Thus both versions are the same function. */
+
+# undef longjmp
+
+strong_alias (__v1longjmp, __v2longjmp)
+versioned_symbol (libpthread, __v1longjmp, longjmp, GLIBC_2_0);
+compat_symbol (libpthread, __v2longjmp, longjmp, GLIBC_2_19);
+
+weak_alias (siglongjmp, __v1siglongjmp)
+weak_alias (siglongjmp, __v2siglongjmp)
+versioned_symbol (libpthread, __v1siglongjmp, siglongjmp, GLIBC_2_0);
+compat_symbol (libpthread, __v2siglongjmp, siglongjmp, GLIBC_2_19);
+#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)) */
Index: glibc-2.19/sysdeps/s390/Makefile
===================================================================
--- glibc-2.19.orig/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
Index: glibc-2.19/sysdeps/s390/Versions
===================================================================
--- glibc-2.19.orig/sysdeps/s390/Versions
+++ glibc-2.19/sysdeps/s390/Versions
@@ -1,12 +1,8 @@
libc {
GLIBC_2.19 {
- setjmp; _setjmp; __setjmp; __sigsetjmp;
+ setjmp; _setjmp; __sigsetjmp;
longjmp; _longjmp; siglongjmp;
}
- GLIBC_PRIVATE {
- __v1__libc_longjmp; __v1__libc_siglongjmp;
- __v2__libc_longjmp; __v2__libc_siglongjmp;
- }
}
ld {
Index: glibc-2.19/sysdeps/s390/__longjmp.c
===================================================================
--- glibc-2.19.orig/sysdeps/s390/__longjmp.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <libc-symbols.h>
-#include <shlib-compat.h>
-
-#define __longjmp __v2__longjmp
-#include "__longjmp-common.c"
-#undef __longjmp
-strong_alias (__v2__longjmp, __longjmp)
-
-#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
-# undef __longjmp
-# define __V1_JMPBUF
-# define __longjmp __v1__longjmp
-# include "__longjmp-common.c"
-#endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
Index: glibc-2.19/sysdeps/s390/bits/setjmp.h
===================================================================
--- glibc-2.19.orig/sysdeps/s390/bits/setjmp.h
+++ glibc-2.19/sysdeps/s390/bits/setjmp.h
@@ -40,10 +40,6 @@ typedef struct __s390_jmp_buf
/* We save fpu registers 4 and 6. */
long __fpregs[4];
# endif
-#ifndef __V1_JMPBUF
- unsigned long __flags;
- char __reserved[128];
-#endif
} __jmp_buf[1];
#endif
Index: glibc-2.19/sysdeps/s390/longjmp.c
===================================================================
--- glibc-2.19.orig/sysdeps/s390/longjmp.c
+++ glibc-2.19/sysdeps/s390/longjmp.c
@@ -15,50 +15,28 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>.
- Versioned copy of sysdeps/generic/longjmp.c modified for extended
- jmpbuf. */
+ Versioned copy of setjmp/longjmp.c modified for versioning
+ the reverted jmpbuf extension. */
#include <shlib-compat.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <signal.h>
-
-extern void __v2__longjmp (__jmp_buf __env, int __val)
- __attribute__ ((__noreturn__));
-extern void __v2__libc_longjmp (sigjmp_buf env, int val)
- __attribute__ ((__noreturn__));
-libc_hidden_proto (__v2__libc_longjmp)
-
-/* Set the signal mask to the one specified in ENV, and jump
- to the position specified in ENV, causing the setjmp
- call there to return VAL, or 1 if VAL is 0. */
-void
-__v2__libc_siglongjmp (sigjmp_buf env, int val)
-{
- /* Perform any cleanups needed by the frames being unwound. */
- _longjmp_unwind (env, val);
-
- if (env[0].__mask_was_saved)
- /* Restore the saved signal mask. */
- (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask,
- (sigset_t *) NULL);
-
- /* Call the machine-dependent function to restore machine state. */
- __v2__longjmp (env[0].__jmpbuf, val ?: 1);
-}
-
-#ifndef __v2__longjmp
-strong_alias (__v2__libc_siglongjmp, __v2__libc_longjmp)
-libc_hidden_def (__v2__libc_longjmp)
-weak_alias (__v2__libc_siglongjmp, __v2_longjmp)
-weak_alias (__v2__libc_siglongjmp, __v2longjmp)
-weak_alias (__v2__libc_siglongjmp, __v2siglongjmp)
-
-/* These will be used by libpthread only. */
-versioned_symbol (libc, __v2__libc_longjmp, __libc_longjmp, GLIBC_PRIVATE);
-versioned_symbol (libc, __v2__libc_siglongjmp, __libc_siglongjmp, GLIBC_PRIVATE);
-
-versioned_symbol (libc, __v2_longjmp, _longjmp, GLIBC_2_19);
-versioned_symbol (libc, __v2longjmp, longjmp, GLIBC_2_19);
-versioned_symbol (libc, __v2siglongjmp, siglongjmp, GLIBC_2_19);
-#endif /* ifndef __v2__longjmp */
+
+#include <setjmp/longjmp.c>
+
+#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 new versions of longjmp-functions were introduced,
+ but were reverted before 2.20. Thus both versions are the same function. */
+weak_alias (__libc_siglongjmp, __v1_longjmp)
+weak_alias (__libc_siglongjmp, __v2_longjmp)
+versioned_symbol (libc, __v1_longjmp, _longjmp, GLIBC_2_0);
+compat_symbol (libc, __v2_longjmp, _longjmp, GLIBC_2_19);
+
+weak_alias (__libc_siglongjmp, __v1longjmp)
+weak_alias (__libc_siglongjmp, __v2longjmp)
+versioned_symbol (libc, __v1longjmp, longjmp, GLIBC_2_0);
+compat_symbol (libc, __v2longjmp, longjmp, GLIBC_2_19);
+
+weak_alias (__libc_siglongjmp, __v1siglongjmp)
+weak_alias (__libc_siglongjmp, __v2siglongjmp)
+versioned_symbol (libc, __v1siglongjmp, siglongjmp, GLIBC_2_0);
+compat_symbol (libc, __v2siglongjmp, siglongjmp, GLIBC_2_19);
+#endif /* SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
Index: glibc-2.19/sysdeps/s390/rtld-__longjmp.c
===================================================================
--- glibc-2.19.orig/sysdeps/s390/rtld-__longjmp.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Build a non-versioned object for rtld-*. */
-# include "__longjmp-common.c"
Index: glibc-2.19/sysdeps/s390/rtld-global-offsets.sym
===================================================================
--- glibc-2.19.orig/sysdeps/s390/rtld-global-offsets.sym
+++ /dev/null
@@ -1,7 +0,0 @@
-#define SHARED 1
-
-#include <ldsodefs.h>
-
-#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem)
-
-RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap)
Index: glibc-2.19/sysdeps/s390/rtld-setjmp.S
===================================================================
--- glibc-2.19.orig/sysdeps/s390/rtld-setjmp.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Extendible version of setjmp for System z
- Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Build a non-versioned object for rtld-*. */
-# include "setjmp-common.S"
Index: glibc-2.19/sysdeps/s390/s390-32/__longjmp-common.c
===================================================================
--- glibc-2.19.orig/sysdeps/s390/s390-32/__longjmp-common.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <sysdep.h>
-#include <setjmp.h>
-#include <bits/setjmp.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-/* Jump to the position specified by ENV, causing the
- setjmp call there to return VAL, or 1 if VAL is 0. */
-attribute_hidden void
-__longjmp (__jmp_buf env, int val)
-{
-#ifdef PTR_DEMANGLE
- uintptr_t guard = THREAD_GET_POINTER_GUARD ();
-# ifdef CHECK_SP
- CHECK_SP (env, guard);
-# endif
-#elif defined CHECK_SP
- CHECK_SP (env, 0);
-#endif
- register int r2 __asm ("%r2") = val == 0 ? 1 : val;
-#ifdef PTR_DEMANGLE
- register uintptr_t r3 __asm ("%r3") = guard;
- register void *r1 __asm ("%r1") = (void *) env;
-#endif
- /* Restore registers and jump back. */
- asm volatile ("ld %%f6,48(%1)\n\t"
- "ld %%f4,40(%1)\n\t"
-#ifdef PTR_DEMANGLE
- "lm %%r6,%%r13,0(%1)\n\t"
- "lm %%r4,%%r5,32(%1)\n\t"
- "xr %%r4,%2\n\t"
- "xr %%r5,%2\n\t"
- "lr %%r15,%%r5\n\t"
- "br %%r4"
-#else
- "lm %%r6,%%r15,0(%1)\n\t"
- "br %%r14"
-#endif
- : : "r" (r2),
-#ifdef PTR_DEMANGLE
- "r" (r1), "r" (r3)
-#else
- "a" (env)
-#endif
- );
-
- /* Avoid `volatile function does return' warnings. */
- for (;;);
-}
Index: glibc-2.19/sysdeps/s390/s390-32/__longjmp.c
===================================================================
--- /dev/null
+++ glibc-2.19/sysdeps/s390/s390-32/__longjmp.c
@@ -0,0 +1,68 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <sysdep.h>
+#include <setjmp.h>
+#include <bits/setjmp.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Jump to the position specified by ENV, causing the
+ setjmp call there to return VAL, or 1 if VAL is 0. */
+void
+__longjmp (__jmp_buf env, int val)
+{
+#ifdef PTR_DEMANGLE
+ uintptr_t guard = THREAD_GET_POINTER_GUARD ();
+# ifdef CHECK_SP
+ CHECK_SP (env, guard);
+# endif
+#elif defined CHECK_SP
+ CHECK_SP (env, 0);
+#endif
+ register int r2 __asm ("%r2") = val == 0 ? 1 : val;
+#ifdef PTR_DEMANGLE
+ register uintptr_t r3 __asm ("%r3") = guard;
+ register void *r1 __asm ("%r1") = (void *) env;
+#endif
+ /* Restore registers and jump back. */
+ asm volatile ("ld %%f6,48(%1)\n\t"
+ "ld %%f4,40(%1)\n\t"
+#ifdef PTR_DEMANGLE
+ "lm %%r6,%%r13,0(%1)\n\t"
+ "lm %%r4,%%r5,32(%1)\n\t"
+ "xr %%r4,%2\n\t"
+ "xr %%r5,%2\n\t"
+ "lr %%r15,%%r5\n\t"
+ "br %%r4"
+#else
+ "lm %%r6,%%r15,0(%1)\n\t"
+ "br %%r14"
+#endif
+ : : "r" (r2),
+#ifdef PTR_DEMANGLE
+ "r" (r1), "r" (r3)
+#else
+ "a" (env)
+#endif
+ );
+
+ /* Avoid `volatile function does return' warnings. */
+ for (;;);
+}
Index: glibc-2.19/sysdeps/s390/s390-32/setjmp-common.S
===================================================================
--- glibc-2.19.orig/sysdeps/s390/s390-32/setjmp-common.S
+++ /dev/null
@@ -1,84 +0,0 @@
-/* setjmp for s390, ELF version.
- Copyright (C) 2000-2014 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#define _ASM
-#define _SETJMP_H
-#include <bits/setjmp.h>
-
- /* We include the BSD entry points here as well but we make
- them weak. */
-ENTRY (setjmp)
- .weak C_SYMBOL_NAME (setjmp)
- lhi %r3,1 /* second argument of one */
- j 0f /* branch relativ to __sigsetjmp */
-END (setjmp)
-
- /* Binary compatibility entry point. */
-ENTRY(_setjmp)
- .weak C_SYMBOL_NAME (_setjmp)
- lhi %r3,0 /* second argument of zero */
- j 0f /* branch relativ to __sigsetjmp */
-END (_setjmp)
-libc_hidden_def (_setjmp)
-
-ENTRY(__setjmp)
- lhi %r3,0 /* second argument of zero */
- j 0f /* branch relativ to __sigsetjmp */
-END (__setjmp)
-
-ENTRY(__sigsetjmp)
-0:
-#ifdef PTR_MANGLE
- stm %r6,%r13,0(%r2) /* store registers in jmp_buf */
- lr %r4,%r14
- lr %r5,%r15
- PTR_MANGLE (%r4, %r1)
- PTR_MANGLE2 (%r5, %r1)
- stm %r4,%r5,32(%r2)
-#else
- stm %r6,%r15,0(%r2) /* store registers in jmp_buf */
-#endif
-#ifndef __V1_JMPBUF
- lhi %r4,0
- st %r4,56(%r2) /* Set __flags to 0. */
-#endif
- std %f4,40(%r2)
- std %f6,48(%r2)
-#if defined NOT_IN_libc && defined IS_IN_rtld
- /* In ld.so we never save the signal mask. */
- lhi %r2,0
- br %r14
-#elif defined PIC
- /* We cannot use the PLT, because it requires that %r12 be set, but
- we can't save and restore our caller's value. Instead, we do an
- indirect jump through the GOT. */
- basr %r1,0
-0: al %r1,1f-0b(0,%r1) /* get address of global offset table */
- /* get address of __sigjmp_save from got */
- l %r1,__sigjmp_save@GOT12(0,%r1)
- br %r1
-1: .long _GLOBAL_OFFSET_TABLE_ - 0b
-#else
- basr %r1,0
-0: l %r1,1f-0b(0,%r1) /* load address of __sigjmp_save */
- br %r1 /* tail-call __sigjmp_save */
-1: .long __sigjmp_save
-#endif
-END (__sigsetjmp)
Index: glibc-2.19/sysdeps/s390/s390-32/setjmp.S
===================================================================
--- /dev/null
+++ glibc-2.19/sysdeps/s390/s390-32/setjmp.S
@@ -0,0 +1,111 @@
+/* setjmp for s390, ELF version.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#define _ASM
+#define _SETJMP_H
+#include <bits/setjmp.h>
+#include <shlib-compat.h>
+
+#if !defined IS_IN_rtld
+# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+ /* we need a unique name in case of symbol versioning. */
+# define __sigsetjmp __v1__sigsetjmp
+# endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
+#endif /* !defined IS_IN_rtld */
+
+ /* We include the BSD entry points here as well but we make
+ them weak. */
+ENTRY (setjmp)
+ .weak C_SYMBOL_NAME (setjmp)
+ lhi %r3,1 /* second argument of one */
+ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
+END (setjmp)
+
+ /* Binary compatibility entry point. */
+ENTRY(_setjmp)
+ .weak C_SYMBOL_NAME (_setjmp)
+ lhi %r3,0 /* second argument of zero */
+ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
+END (_setjmp)
+libc_hidden_def (_setjmp)
+
+ENTRY(__setjmp)
+ lhi %r3,0 /* second argument of zero */
+ j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
+END (__setjmp)
+
+ENTRY(__sigsetjmp)
+.Linternal_sigsetjmp:
+#ifdef PTR_MANGLE
+ stm %r6,%r13,0(%r2) /* store registers in jmp_buf */
+ lr %r4,%r14
+ lr %r5,%r15
+ PTR_MANGLE (%r4, %r1)
+ PTR_MANGLE2 (%r5, %r1)
+ stm %r4,%r5,32(%r2)
+#else
+ stm %r6,%r15,0(%r2) /* store registers in jmp_buf */
+#endif
+ std %f4,40(%r2)
+ std %f6,48(%r2)
+#if defined NOT_IN_libc && defined IS_IN_rtld
+ /* In ld.so we never save the signal mask. */
+ lhi %r2,0
+ br %r14
+#elif defined PIC
+ /* We cannot use the PLT, because it requires that %r12 be set, but
+ we can't save and restore our caller's value. Instead, we do an
+ indirect jump through the GOT. */
+ basr %r1,0
+.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */
+ /* get address of __sigjmp_save from got */
+ l %r1,__sigjmp_save@GOT12(0,%r1)
+ br %r1
+.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0
+#else
+ basr %r1,0
+.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */
+ br %r1 /* tail-call __sigjmp_save */
+.L1: .long __sigjmp_save
+#endif
+END (__sigsetjmp)
+
+#if !defined IS_IN_rtld
+# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 new versions of setjmp-functions were introduced,
+ but were reverted before 2.20. Thus both versions are the same function. */
+
+# undef __sigsetjmp
+
+weak_alias (setjmp, __v1setjmp);
+weak_alias (setjmp, __v2setjmp);
+versioned_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0);
+compat_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19);
+
+weak_alias (_setjmp, __v1_setjmp);
+weak_alias (_setjmp, __v2_setjmp);
+versioned_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0);
+compat_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19);
+
+strong_alias (__v1__sigsetjmp, __v2__sigsetjmp);
+versioned_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0);
+compat_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19);
+# endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
+#endif /* if !defined IS_IN_rtld */
Index: glibc-2.19/sysdeps/s390/s390-64/__longjmp-common.c
===================================================================
--- glibc-2.19.orig/sysdeps/s390/s390-64/__longjmp-common.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <sysdep.h>
-#include <setjmp.h>
-#include <bits/setjmp.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-/* Jump to the position specified by ENV, causing the
- setjmp call there to return VAL, or 1 if VAL is 0. */
-attribute_hidden void
-__longjmp (__jmp_buf env, int val)
-{
-#ifdef PTR_DEMANGLE
- uintptr_t guard = THREAD_GET_POINTER_GUARD ();
-# ifdef CHECK_SP
- CHECK_SP (env, guard);
-# endif
-#elif defined CHECK_SP
- CHECK_SP (env, 0);
-#endif
- register long int r2 __asm ("%r2") = val == 0 ? 1 : val;
-#ifdef PTR_DEMANGLE
- register uintptr_t r3 __asm ("%r3") = guard;
- register void *r1 __asm ("%r1") = (void *) env;
-#endif
- /* Restore registers and jump back. */
- asm volatile ("ld %%f8,80(%1)\n\t"
- "ld %%f9,88(%1)\n\t"
- "ld %%f10,96(%1)\n\t"
- "ld %%f11,104(%1)\n\t"
- "ld %%f12,112(%1)\n\t"
- "ld %%f13,120(%1)\n\t"
- "ld %%f14,128(%1)\n\t"
- "ld %%f15,136(%1)\n\t"
-#ifdef PTR_DEMANGLE
- "lmg %%r6,%%r13,0(%1)\n\t"
- "lmg %%r4,%%r5,64(%1)\n\t"
- "xgr %%r4,%2\n\t"
- "xgr %%r5,%2\n\t"
- "lgr %%r15,%%r5\n\t"
- "br %%r4"
-#else
- "lmg %%r6,%%r15,0(%1)\n\t"
- "br %%r14"
-#endif
- : : "r" (r2),
-#ifdef PTR_DEMANGLE
- "r" (r1), "r" (r3)
-#else
- "a" (env)
-#endif
- );
-
- /* Avoid `volatile function does return' warnings. */
- for (;;);
-}
Index: glibc-2.19/sysdeps/s390/s390-64/__longjmp.c
===================================================================
--- /dev/null
+++ glibc-2.19/sysdeps/s390/s390-64/__longjmp.c
@@ -0,0 +1,74 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <sysdep.h>
+#include <setjmp.h>
+#include <bits/setjmp.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Jump to the position specified by ENV, causing the
+ setjmp call there to return VAL, or 1 if VAL is 0. */
+void
+__longjmp (__jmp_buf env, int val)
+{
+#ifdef PTR_DEMANGLE
+ uintptr_t guard = THREAD_GET_POINTER_GUARD ();
+# ifdef CHECK_SP
+ CHECK_SP (env, guard);
+# endif
+#elif defined CHECK_SP
+ CHECK_SP (env, 0);
+#endif
+ register long int r2 __asm ("%r2") = val == 0 ? 1 : val;
+#ifdef PTR_DEMANGLE
+ register uintptr_t r3 __asm ("%r3") = guard;
+ register void *r1 __asm ("%r1") = (void *) env;
+#endif
+ /* Restore registers and jump back. */
+ asm volatile ("ld %%f8,80(%1)\n\t"
+ "ld %%f9,88(%1)\n\t"
+ "ld %%f10,96(%1)\n\t"
+ "ld %%f11,104(%1)\n\t"
+ "ld %%f12,112(%1)\n\t"
+ "ld %%f13,120(%1)\n\t"
+ "ld %%f14,128(%1)\n\t"
+ "ld %%f15,136(%1)\n\t"
+#ifdef PTR_DEMANGLE
+ "lmg %%r6,%%r13,0(%1)\n\t"
+ "lmg %%r4,%%r5,64(%1)\n\t"
+ "xgr %%r4,%2\n\t"
+ "xgr %%r5,%2\n\t"
+ "lgr %%r15,%%r5\n\t"
+ "br %%r4"
+#else
+ "lmg %%r6,%%r15,0(%1)\n\t"
+ "br %%r14"
+#endif
+ : : "r" (r2),
+#ifdef PTR_DEMANGLE
+ "r" (r1), "r" (r3)
+#else
+ "a" (env)
+#endif
+ );
+
+ /* Avoid `volatile function does return' warnings. */
+ for (;;);
+}
Index: glibc-2.19/sysdeps/s390/s390-64/setjmp-common.S
===================================================================
--- glibc-2.19.orig/sysdeps/s390/s390-64/setjmp-common.S
+++ /dev/null
@@ -1,79 +0,0 @@
-/* setjmp for 64 bit S/390, ELF version.
- Copyright (C) 2001-2014 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#define _ASM
-#define _SETJMP_H
-#include <bits/setjmp.h>
-
- /* We include the BSD entry points here as well but we make
- them weak. */
-ENTRY (setjmp)
- .weak C_SYMBOL_NAME (setjmp)
- lghi %r3,1 /* Second argument of one. */
- j 0f /* Branch relativ to __sigsetjmp. */
-END (setjmp)
-
- /* Binary compatibility entry point. */
-ENTRY(_setjmp)
- .weak C_SYMBOL_NAME (_setjmp)
- slgr %r3,%r3 /* Second argument of zero. */
- j 0f /* Branch relativ to __sigsetjmp. */
-END (_setjmp)
-libc_hidden_def (_setjmp)
-
-ENTRY(__setjmp)
- slgr %r3,%r3 /* Second argument of zero. */
- j 0f /* Branch relativ to __sigsetjmp. */
-END (__setjmp)
-
-ENTRY(__sigsetjmp)
-0:
-#ifdef PTR_MANGLE
- stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */
- lgr %r4,%r14
- lgr %r5,%r15
- PTR_MANGLE (%r4, %r1)
- PTR_MANGLE2 (%r5, %r1)
- stmg %r4,%r5,64(%r2)
-#else
- stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */
-#endif
-#ifndef __V1_JMPBUF
- lghi %r4,0
- stg %r4,144(%r2) /* Set __flags to 0. */
-#endif
- std %f8,80(%r2)
- std %f9,88(%r2)
- std %f10,96(%r2)
- std %f11,104(%r2)
- std %f12,112(%r2)
- std %f13,120(%r2)
- std %f14,128(%r2)
- std %f15,136(%r2)
-#if defined NOT_IN_libc && defined IS_IN_rtld
- /* In ld.so we never save the signal mask. */
- lghi %r2,0
- br %r14
-#elif defined PIC
- jg __sigjmp_save@PLT /* Branch to PLT of __sigsetjmp. */
-#else
- jg __sigjmp_save
-#endif
-END (__sigsetjmp)
Index: glibc-2.19/sysdeps/s390/s390-64/setjmp.S
===================================================================
--- /dev/null
+++ glibc-2.19/sysdeps/s390/s390-64/setjmp.S
@@ -0,0 +1,106 @@
+/* setjmp for 64 bit S/390, ELF version.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#define _ASM
+#define _SETJMP_H
+#include <bits/setjmp.h>
+#include <shlib-compat.h>
+
+#if !defined IS_IN_rtld
+# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+ /* we need a unique name in case of symbol versioning. */
+# define __sigsetjmp __v1__sigsetjmp
+# endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
+#endif /* !defined IS_IN_rtld */
+
+ /* We include the BSD entry points here as well but we make
+ them weak. */
+ENTRY (setjmp)
+ .weak C_SYMBOL_NAME (setjmp)
+ lghi %r3,1 /* Second argument of one. */
+ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
+END (setjmp)
+
+ /* Binary compatibility entry point. */
+ENTRY(_setjmp)
+ .weak C_SYMBOL_NAME (_setjmp)
+ slgr %r3,%r3 /* Second argument of zero. */
+ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
+END (_setjmp)
+libc_hidden_def (_setjmp)
+
+ENTRY(__setjmp)
+ slgr %r3,%r3 /* Second argument of zero. */
+ j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
+END (__setjmp)
+
+ENTRY(__sigsetjmp)
+.Linternal_sigsetjmp:
+#ifdef PTR_MANGLE
+ stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */
+ lgr %r4,%r14
+ lgr %r5,%r15
+ PTR_MANGLE (%r4, %r1)
+ PTR_MANGLE2 (%r5, %r1)
+ stmg %r4,%r5,64(%r2)
+#else
+ stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */
+#endif
+ std %f8,80(%r2)
+ std %f9,88(%r2)
+ std %f10,96(%r2)
+ std %f11,104(%r2)
+ std %f12,112(%r2)
+ std %f13,120(%r2)
+ std %f14,128(%r2)
+ std %f15,136(%r2)
+#if defined NOT_IN_libc && defined IS_IN_rtld
+ /* In ld.so we never save the signal mask. */
+ lghi %r2,0
+ br %r14
+#elif defined PIC
+ jg __sigjmp_save@PLT /* Branch to PLT of __sigsetjmp. */
+#else
+ jg __sigjmp_save
+#endif
+END (__sigsetjmp)
+
+#if !defined IS_IN_rtld
+# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 new versions of setjmp-functions were introduced,
+ but were reverted before 2.20. Thus both versions are the same function. */
+
+# undef __sigsetjmp
+
+weak_alias (setjmp, __v1setjmp);
+weak_alias (setjmp, __v2setjmp);
+versioned_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0);
+compat_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19);
+
+weak_alias (_setjmp, __v1_setjmp);
+weak_alias (_setjmp, __v2_setjmp);
+versioned_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0);
+compat_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19);
+
+strong_alias (__v1__sigsetjmp, __v2__sigsetjmp);
+versioned_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0);
+compat_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19);
+# endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */
+#endif /* if !defined IS_IN_rtld */
Index: glibc-2.19/sysdeps/s390/setjmp.S
===================================================================
--- glibc-2.19.orig/sysdeps/s390/setjmp.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Extendible version of setjmp for System z
- Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <libc-symbols.h>
-#include <shlib-compat.h>
-
-versioned_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19)
-versioned_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19)
-versioned_symbol (libc, __v2__setjmp, __setjmp, GLIBC_2_19)
-versioned_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19)
-#define setjmp __v2setjmp
-#define _setjmp __v2_setjmp
-#define __setjmp __v2__setjmp
-#define __sigsetjmp __v2__sigsetjmp
-#define __sigjmp_save __v2__sigjmp_save
-
-#include "setjmp-common.S"
-
-#undef setjmp
-#undef _setjmp
-#undef __setjmp
-#undef __sigsetjmp
-#undef __sigjmp_save
-libc_hidden_ver (__v2setjmp, setjmp)
-libc_hidden_ver (__v2_setjmp, _setjmp)
-libc_hidden_ver (__v2__setjmp, __setjmp)
-libc_hidden_ver (__v2__sigsetjmp, __sigsetjmp)
-
-#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
-compat_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0)
-compat_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0)
-compat_symbol (libc, __v1__setjmp, __setjmp, GLIBC_2_0)
-compat_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0)
-# define setjmp __v1setjmp
-# define _setjmp __v1_setjmp
-# define __setjmp __v1__setjmp
-# define __sigsetjmp __v1__sigsetjmp
-# define __sigjmp_save __v1__sigjmp_save
-# define __V1_JMPBUF
-
-# include "setjmp-common.S"
-
-# undef setjmp
-# undef _setjmp
-# undef __setjmp
-# undef __sigsetjmp
-# undef __sigjmp_save
-
-#endif /* if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
Index: glibc-2.19/sysdeps/s390/sigjmp.c
===================================================================
--- glibc-2.19.orig/sysdeps/s390/sigjmp.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 1992-2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stddef.h>
-#include <setjmp.h>
-#include <signal.h>
-
-/* This function is called by the `sigsetjmp' macro
- before doing a `__setjmp' on ENV[0].__jmpbuf.
- Always return zero. */
-
-int
-__v2__sigjmp_save (sigjmp_buf env, int savemask)
-{
- env[0].__mask_was_saved = (savemask &&
- __sigprocmask (SIG_BLOCK, (sigset_t *) NULL,
- &env[0].__saved_mask) == 0);
-
- return 0;
-}
Index: glibc-2.19/sysdeps/s390/v1-longjmp.c
===================================================================
--- glibc-2.19.orig/sysdeps/s390/v1-longjmp.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
- 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 */
Index: glibc-2.19/sysdeps/s390/v1-setjmp.h
===================================================================
--- glibc-2.19.orig/sysdeps/s390/v1-setjmp.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright (C) 1991-2013 Free Software Foundation, Inc.
- 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 */
Index: glibc-2.19/sysdeps/s390/v1-sigjmp.c
===================================================================
--- glibc-2.19.orig/sysdeps/s390/v1-sigjmp.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (C) 1992-2013 Free Software Foundation, Inc.
- 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 */
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/Makefile
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/Makefile
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/Makefile
@@ -16,9 +16,3 @@ endif
ifeq ($(subdir),elf)
sysdep_routines += dl-vdso
endif
-
-ifeq ($(subdir),debug)
-ifeq (yes,$(build-shared))
-sysdep_routines += v1-longjmp_chk
-endif
-endif
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/getcontext.S
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/getcontext.S
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Extendible version of getcontext for System z
- Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <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
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/longjmp_chk.c
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/longjmp_chk.c
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/longjmp_chk.c
@@ -15,30 +15,34 @@
License along with the GNU C Library; if not, see
<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
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Build a non-versioned object for rtld-*. */
-#include "getcontext-common.S"
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
@@ -26,8 +26,8 @@
#include <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"
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <features.h>
-
-#include "rtld-global-offsets.h"
-#include "ucontext_i.h"
-
-/* __getcontext (const ucontext_t *ucp)
-
- Saves the machine context in UCP such that when it is activated,
- it appears as if __getcontext() returned again.
-
- This implementation is intended to be used for *synchronous* context
- switches only. Therefore, it does not have to save anything
- other than the PRESERVED state. */
-
-ENTRY(__getcontext)
- lr %r1,%r2
-
- /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
- la %r2,SIG_BLOCK
- slr %r3,%r3
- la %r4,SC_MASK(%r1)
- lhi %r5,_NSIG8
- svc SYS_ify(rt_sigprocmask)
-
- /* Store fpu context. */
- stfpc SC_FPC(%r1)
- std %f0,SC_FPRS(%r1)
- std %f1,SC_FPRS+8(%r1)
- std %f2,SC_FPRS+16(%r1)
- std %f3,SC_FPRS+24(%r1)
- std %f4,SC_FPRS+32(%r1)
- std %f5,SC_FPRS+40(%r1)
- std %f6,SC_FPRS+48(%r1)
- std %f7,SC_FPRS+56(%r1)
- std %f8,SC_FPRS+64(%r1)
- std %f9,SC_FPRS+72(%r1)
- std %f10,SC_FPRS+80(%r1)
- std %f11,SC_FPRS+88(%r1)
- std %f12,SC_FPRS+96(%r1)
- std %f13,SC_FPRS+104(%r1)
- std %f14,SC_FPRS+112(%r1)
- std %f15,SC_FPRS+120(%r1)
-
- lhi %r2,0
-#ifndef __V1_UCONTEXT
- bras %r3,0f
-# ifdef IS_IN_rtld
- /* Within ld.so we can do slightly better by addressing dl_hwap
- relative to GOT start. */
-1: .long _GLOBAL_OFFSET_TABLE_ - 1b
- .long C_SYMBOL_NAME(_rtld_global_ro)@GOTOFF
-0: l %r4,0(%r3)
- la %r4,0(%r3,%r4)
- l %r5,4(%r3)
- /* _dl_hwcap is 64 bit and we need the lower 32. */
- l %r3,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(%r4,%r5)
-# elif PIC
-1: .long _GLOBAL_OFFSET_TABLE_ - 1b
- .long C_SYMBOL_NAME(_rtld_global_ro)@GOT
-0: l %r4,0(%r3)
- la %r4,0(%r3,%r4) /* GOT pointer -> r4 */
- l %r5,4(%r3) /* GOT offset -> r5 */
- l %r5,0(%r4,%r5) /* GOT slot -> r5 */
- l %r3,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(%r5)
-# else
- .long C_SYMBOL_NAME(_dl_hwcap)
-0: l %r3,0(%r3)
- l %r3,0(%r3)
-# endif
- tml %r3,512 /* HWCAP_S390_HIGH_GPRS */
- jz 2f
- /* highgprs implies zarch so stmh/oill is ok here. */
- .machine "z900"
- .machinemode "zarch_nohighgprs"
- stmh %r0,%r15,SC_HIGHGPRS(%r1)
- oill %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */
-#endif
-2: st %r2,SC_FLGS(%r1)
-
- /* Set __getcontext return value to 0. */
- slr %r2,%r2
-
- /* Store access registers. */
- stam %a0,%a15,SC_ACRS(%r1)
-
- /* Store general purpose registers. */
- stm %r0,%r15,SC_GPRS(%r1)
-
- /* Return. */
- br %r14
-END(__getcontext)
-
-weak_alias (__getcontext, getcontext)
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
===================================================================
--- /dev/null
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
@@ -0,0 +1,86 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include <features.h>
+
+#include "ucontext_i.h"
+
+#include <shlib-compat.h>
+
+/* __getcontext (const ucontext_t *ucp)
+
+ Saves the machine context in UCP such that when it is activated,
+ it appears as if __getcontext() returned again.
+
+ This implementation is intended to be used for *synchronous* context
+ switches only. Therefore, it does not have to save anything
+ other than the PRESERVED state. */
+
+ENTRY(__getcontext)
+ lr %r1,%r2
+
+ /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
+ la %r2,SIG_BLOCK
+ slr %r3,%r3
+ la %r4,SC_MASK(%r1)
+ lhi %r5,_NSIG8
+ svc SYS_ify(rt_sigprocmask)
+
+ /* Store fpu context. */
+ stfpc SC_FPC(%r1)
+ std %f0,SC_FPRS(%r1)
+ std %f1,SC_FPRS+8(%r1)
+ std %f2,SC_FPRS+16(%r1)
+ std %f3,SC_FPRS+24(%r1)
+ std %f4,SC_FPRS+32(%r1)
+ std %f5,SC_FPRS+40(%r1)
+ std %f6,SC_FPRS+48(%r1)
+ std %f7,SC_FPRS+56(%r1)
+ std %f8,SC_FPRS+64(%r1)
+ std %f9,SC_FPRS+72(%r1)
+ std %f10,SC_FPRS+80(%r1)
+ std %f11,SC_FPRS+88(%r1)
+ std %f12,SC_FPRS+96(%r1)
+ std %f13,SC_FPRS+104(%r1)
+ std %f14,SC_FPRS+112(%r1)
+ std %f15,SC_FPRS+120(%r1)
+
+ /* Set __getcontext return value to 0. */
+ slr %r2,%r2
+
+ /* Store access registers. */
+ stam %a0,%a15,SC_ACRS(%r1)
+
+ /* Store general purpose registers. */
+ stm %r0,%r15,SC_GPRS(%r1)
+
+ /* Return. */
+ br %r14
+END(__getcontext)
+
+weak_alias (__getcontext, getcontext)
+
+#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 a new version of getcontext was introduced,
+ but was reverted before 2.20. Thus both versions are the same function. */
+weak_alias (__getcontext, __v1__getcontext)
+weak_alias (__getcontext, __v2__getcontext)
+versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1)
+compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19)
+#endif
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libc.abilist
@@ -1777,7 +1777,6 @@ GLIBC_2.18
GLIBC_2.19
GLIBC_2.19 A
__longjmp_chk F
- __setjmp F
__sigsetjmp F
_longjmp F
_setjmp F
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
@@ -62,16 +62,8 @@ ENTRY(__setcontext)
/* Don't touch %a0, used for thread purposes. */
lam %a1,%a15,SC_ACRS+4(%r1)
- /* 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
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
@@ -65,31 +65,19 @@ ENTRY(__swapcontext)
std %f14,SC_FPRS+112(%r1)
std %f15,SC_FPRS+120(%r1)
- /* Store access registers. */
- stam %a0,%a15,SC_ACRS(%r1)
-
/* Set __swapcontext return value to 0. */
slr %r2,%r2
+ /* Store access registers. */
+ stam %a0,%a15,SC_ACRS(%r1)
+
/* Store general purpose registers. */
stm %r0,%r15,SC_GPRS(%r1)
- /* Copy uc_flags into the new ucontext_t. */
+ /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */
+ la %r2,SIG_BLOCK
lr %r5,%r0
- l %r2,SC_FLGS(%r5)
- st %r2,SC_FLGS(%r1)
-
- /* 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)
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <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)
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
@@ -26,8 +26,8 @@
#include <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"
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <features.h>
-
-#include "ucontext_i.h"
-
-/* __getcontext (const ucontext_t *ucp)
-
- Saves the machine context in UCP such that when it is activated,
- it appears as if __getcontext() returned again.
-
- This implementation is intended to be used for *synchronous* context
- switches only. Therefore, it does not have to save anything
- other than the PRESERVED state. */
-
-ENTRY(__getcontext)
- lgr %r1,%r2
-
- /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
- la %r2,SIG_BLOCK
- slgr %r3,%r3
- la %r4,SC_MASK(%r1)
- lghi %r5,_NSIG8
- svc SYS_ify(rt_sigprocmask)
-
- /* Store fpu context. */
- stfpc SC_FPC(%r1)
- std %f0,SC_FPRS(%r1)
- std %f1,SC_FPRS+8(%r1)
- std %f2,SC_FPRS+16(%r1)
- std %f3,SC_FPRS+24(%r1)
- std %f4,SC_FPRS+32(%r1)
- std %f5,SC_FPRS+40(%r1)
- std %f6,SC_FPRS+48(%r1)
- std %f7,SC_FPRS+56(%r1)
- std %f8,SC_FPRS+64(%r1)
- std %f9,SC_FPRS+72(%r1)
- std %f10,SC_FPRS+80(%r1)
- std %f11,SC_FPRS+88(%r1)
- std %f12,SC_FPRS+96(%r1)
- std %f13,SC_FPRS+104(%r1)
- std %f14,SC_FPRS+112(%r1)
- std %f15,SC_FPRS+120(%r1)
-
- /* Set __getcontext return value to 0. */
- slgr %r2,%r2
-
- /* Store the version number into the uc_flags field. So far
- we do not make use of the reserved bytes so we store a zero. */
- stg %r2,SC_FLGS(%r1)
-
- /* Store access registers. */
- stam %a0,%a15,SC_ACRS(%r1)
-
- /* Store general purpose registers. */
- stmg %r0,%r15,SC_GPRS(%r1)
-
- /* Return. */
- br %r14
-END(__getcontext)
-
-weak_alias (__getcontext, getcontext)
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
===================================================================
--- /dev/null
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
@@ -0,0 +1,86 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include <features.h>
+
+#include "ucontext_i.h"
+
+#include <shlib-compat.h>
+
+/* __getcontext (const ucontext_t *ucp)
+
+ Saves the machine context in UCP such that when it is activated,
+ it appears as if __getcontext() returned again.
+
+ This implementation is intended to be used for *synchronous* context
+ switches only. Therefore, it does not have to save anything
+ other than the PRESERVED state. */
+
+ENTRY(__getcontext)
+ lgr %r1,%r2
+
+ /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */
+ la %r2,SIG_BLOCK
+ slgr %r3,%r3
+ la %r4,SC_MASK(%r1)
+ lghi %r5,_NSIG8
+ svc SYS_ify(rt_sigprocmask)
+
+ /* Store fpu context. */
+ stfpc SC_FPC(%r1)
+ std %f0,SC_FPRS(%r1)
+ std %f1,SC_FPRS+8(%r1)
+ std %f2,SC_FPRS+16(%r1)
+ std %f3,SC_FPRS+24(%r1)
+ std %f4,SC_FPRS+32(%r1)
+ std %f5,SC_FPRS+40(%r1)
+ std %f6,SC_FPRS+48(%r1)
+ std %f7,SC_FPRS+56(%r1)
+ std %f8,SC_FPRS+64(%r1)
+ std %f9,SC_FPRS+72(%r1)
+ std %f10,SC_FPRS+80(%r1)
+ std %f11,SC_FPRS+88(%r1)
+ std %f12,SC_FPRS+96(%r1)
+ std %f13,SC_FPRS+104(%r1)
+ std %f14,SC_FPRS+112(%r1)
+ std %f15,SC_FPRS+120(%r1)
+
+ /* Set __getcontext return value to 0. */
+ slgr %r2,%r2
+
+ /* Store access registers. */
+ stam %a0,%a15,SC_ACRS(%r1)
+
+ /* Store general purpose registers. */
+ stmg %r0,%r15,SC_GPRS(%r1)
+
+ /* Return. */
+ br %r14
+END(__getcontext)
+
+weak_alias (__getcontext, getcontext)
+
+#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 a new version of getcontext was introduced,
+ but was reverted before 2.20. Thus both versions are the same function. */
+weak_alias (__getcontext, __v1__getcontext)
+weak_alias (__getcontext, __v2__getcontext)
+versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1)
+compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19)
+#endif
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libc.abilist
@@ -98,7 +98,6 @@ GLIBC_2.18
GLIBC_2.19
GLIBC_2.19 A
__longjmp_chk F
- __setjmp F
__sigsetjmp F
_longjmp F
_setjmp F
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
@@ -65,25 +65,21 @@ ENTRY(__swapcontext)
std %f14,SC_FPRS+112(%r1)
std %f15,SC_FPRS+120(%r1)
+ /* Set __swapcontext return value to 0. */
+ slgr %r2,%r2
+
/* Store access registers. */
stam %a0,%a15,SC_ACRS(%r1)
- /* 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. */
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.sym
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.sym
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <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)
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
@@ -64,15 +64,6 @@ typedef struct
fpreg_t fprs[16];
} fpregset_t;
-/* 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];
};
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/ucontext_i.sym
===================================================================
--- /dev/null
+++ glibc-2.19/sysdeps/unix/sysv/linux/s390/ucontext_i.sym
@@ -0,0 +1,25 @@
+#include <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)
Index: glibc-2.19/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
- 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