forked from pool/glibc
Andreas Schwab
826ad7dd9f
- 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
2293 lines
77 KiB
Diff
2293 lines
77 KiB
Diff
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
|