]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
S/390: Revert the jmp_buf/ucontext_t ABI change.
authorStefan Liebler <stli@linux.vnet.ibm.com>
Thu, 31 Jul 2014 18:04:54 +0000 (20:04 +0200)
committerAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Thu, 31 Jul 2014 18:04:54 +0000 (20:04 +0200)
36 files changed:
ChangeLog
sysdeps/s390/Makefile [deleted file]
sysdeps/s390/Versions
sysdeps/s390/__longjmp.c [deleted file]
sysdeps/s390/bits/setjmp.h
sysdeps/s390/longjmp.c
sysdeps/s390/rtld-__longjmp.c [deleted file]
sysdeps/s390/rtld-global-offsets.sym [deleted file]
sysdeps/s390/rtld-setjmp.S [deleted file]
sysdeps/s390/s390-32/__longjmp.c [moved from sysdeps/s390/s390-32/__longjmp-common.c with 98% similarity]
sysdeps/s390/s390-32/setjmp.S [moved from sysdeps/s390/s390-32/setjmp-common.S with 54% similarity]
sysdeps/s390/s390-64/__longjmp.c [moved from sysdeps/s390/s390-64/__longjmp-common.c with 98% similarity]
sysdeps/s390/s390-64/setjmp.S [moved from sysdeps/s390/s390-64/setjmp-common.S with 60% similarity]
sysdeps/s390/setjmp.S [deleted file]
sysdeps/s390/sigjmp.c [deleted file]
sysdeps/s390/v1-longjmp.c [deleted file]
sysdeps/s390/v1-setjmp.h [deleted file]
sysdeps/s390/v1-sigjmp.c [deleted file]
sysdeps/unix/sysv/linux/s390/Makefile
sysdeps/unix/sysv/linux/s390/getcontext.S [deleted file]
sysdeps/unix/sysv/linux/s390/longjmp_chk.c
sysdeps/unix/sysv/linux/s390/pt-longjmp.c
sysdeps/unix/sysv/linux/s390/rtld-getcontext.S [deleted file]
sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S [moved from sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S with 67% similarity]
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S
sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym [deleted file]
sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S [moved from sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S with 82% similarity]
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
sysdeps/unix/sysv/linux/s390/sys/ucontext.h
sysdeps/unix/sysv/linux/s390/ucontext_i.sym [moved from sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.sym with 100% similarity]
sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c [deleted file]

index a32cd68e1072c3f23cbb1d675a1467ddbe7ddc80..ac65fd0b65f417c1e979c06abc4ab3162d3f54bb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,74 @@
+2014-07-31  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.
+       * sysdeps/unix/sysv/linux/s390/pt-longjmp.c:
+       Include nptl/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/libc.abilist:
+       Regenerated.
+
 2014-07-31  Andreas Schwab  <schwab@suse.de>
 
        * config.h.in (HAVE_IFUNC): Define to 0.
diff --git a/sysdeps/s390/Makefile b/sysdeps/s390/Makefile
deleted file mode 100644 (file)
index 42978dc..0000000
+++ /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 156abc79f491bd9d70963f8548c9e85cb66c062b..84176233537fb11835aad23cad60269893e83ec5 100644 (file)
@@ -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 {
diff --git a/sysdeps/s390/__longjmp.c b/sysdeps/s390/__longjmp.c
deleted file mode 100644 (file)
index e4acd31..0000000
+++ /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 25eaf10fdf1dae0d27efd743a954990c5a410498..0071a9dce548644027a510d8a7e1dcb8800487a2 100644 (file)
@@ -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 c758d149a470a461d6d8c05a524466877c63e472..601f077e1fe928fc9e55f6a4dd15808f87228a31 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
+/* Copyright (C) 2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    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)  */
diff --git a/sysdeps/s390/rtld-__longjmp.c b/sysdeps/s390/rtld-__longjmp.c
deleted file mode 100644 (file)
index 5e9f739..0000000
+++ /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"
diff --git a/sysdeps/s390/rtld-global-offsets.sym b/sysdeps/s390/rtld-global-offsets.sym
deleted file mode 100644 (file)
index ff4e97f..0000000
+++ /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)
diff --git a/sysdeps/s390/rtld-setjmp.S b/sysdeps/s390/rtld-setjmp.S
deleted file mode 100644 (file)
index 4011011..0000000
+++ /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"
similarity index 98%
rename from sysdeps/s390/s390-32/__longjmp-common.c
rename to sysdeps/s390/s390-32/__longjmp.c
index f78ef656e5b74c3ddc7cf90500bf12db4670a3a2..5d46e21923e855a5de03d647937008ba58e28457 100644 (file)
@@ -25,7 +25,7 @@
 
 /* Jump to the position specified by ENV, causing the
    setjmp call there to return VAL, or 1 if VAL is 0.  */
-attribute_hidden void
+void
 __longjmp (__jmp_buf env, int val)
 {
 #ifdef PTR_DEMANGLE
similarity index 54%
rename from sysdeps/s390/s390-32/setjmp-common.S
rename to sysdeps/s390/s390-32/setjmp.S
index d7bb7204540e9452c808b40fd9cb55a8465ba51e..e940d71a9e909c72eb1f04e232a1710b3978800b 100644 (file)
 #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      0f                   /* branch relativ to __sigsetjmp */
+       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      0f                   /* branch relativ to __sigsetjmp */
+       j      .Linternal_sigsetjmp /* 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 */
+       j      .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
 END (__setjmp)
 
 ENTRY(__sigsetjmp)
-0:
+.Linternal_sigsetjmp:
 #ifdef PTR_MANGLE
        stm    %r6,%r13,0(%r2)      /* store registers in jmp_buf */
        lr     %r4,%r14
@@ -54,10 +62,6 @@ ENTRY(__sigsetjmp)
        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)
@@ -70,15 +74,38 @@ ENTRY(__sigsetjmp)
           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 */
+.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
-1:      .long  _GLOBAL_OFFSET_TABLE_ - 0b
+.L1:    .long  _GLOBAL_OFFSET_TABLE_ - .L0
 #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
+.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  */
similarity index 98%
rename from sysdeps/s390/s390-64/__longjmp-common.c
rename to sysdeps/s390/s390-64/__longjmp.c
index 46cabb67bce755c73c67e2272e165c994556b368..168ebf562b662dca6f82a6a97fea554a58262ac7 100644 (file)
@@ -25,7 +25,7 @@
 
 /* Jump to the position specified by ENV, causing the
    setjmp call there to return VAL, or 1 if VAL is 0.  */
-attribute_hidden void
+void
 __longjmp (__jmp_buf env, int val)
 {
 #ifdef PTR_DEMANGLE
similarity index 60%
rename from sysdeps/s390/s390-64/setjmp-common.S
rename to sysdeps/s390/s390-64/setjmp.S
index 9cdcae45c5eeb897b9fa1fed35c606dff595ac6e..7cbb9e8cccdaf10a482ff99ca24585802d615326 100644 (file)
 #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      0f                   /* Branch relativ to __sigsetjmp.  */
+        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      0f                   /* Branch relativ to __sigsetjmp.  */
+        j      .Linternal_sigsetjmp /* 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.  */
+        j      .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp.  */
 END (__setjmp)
 
 ENTRY(__sigsetjmp)
-0:
+.Linternal_sigsetjmp:
 #ifdef PTR_MANGLE
        stmg   %r6,%r13,0(%r2)      /* Store registers in jmp_buf.  */
        lgr    %r4,%r14
@@ -54,10 +62,6 @@ ENTRY(__sigsetjmp)
        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)
@@ -77,3 +81,26 @@ ENTRY(__sigsetjmp)
        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  */
diff --git a/sysdeps/s390/setjmp.S b/sysdeps/s390/setjmp.S
deleted file mode 100644 (file)
index 2ec621a..0000000
+++ /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) */
diff --git a/sysdeps/s390/sigjmp.c b/sysdeps/s390/sigjmp.c
deleted file mode 100644 (file)
index f7b5a6f..0000000
+++ /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;
-}
diff --git a/sysdeps/s390/v1-longjmp.c b/sysdeps/s390/v1-longjmp.c
deleted file mode 100644 (file)
index 82252c9..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.
-
-   Versioned copy of sysdeps/generic/longjmp.c modified for extended
-   jmpbuf.  */
-
-#include <shlib-compat.h>
-#include <stddef.h>
-#include <signal.h>
-#include "v1-setjmp.h"
-
-#if !defined NOT_INT_libc && defined SHARED
-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
-
-void
-__v1__libc_siglongjmp (__v1__sigjmp_buf env, int val)
-{
-  /* Perform any cleanups needed by the frames being unwound.  */
-  _longjmp_unwind (env, val);
-
-  if (env[0].__mask_was_saved)
-    /* Restore the saved signal mask.  */
-    (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask,
-                         (sigset_t *) NULL);
-
-  /* Call the machine-dependent function to restore machine state.  */
-  __v1__longjmp (env[0].__jmpbuf, val ?: 1);
-}
-
-#  ifndef __v1__longjmp
-strong_alias (__v1__libc_siglongjmp, __v1__libc_longjmp)
-libc_hidden_def (__v1__libc_longjmp)
-weak_alias (__v1__libc_siglongjmp, __v1_longjmp)
-weak_alias (__v1__libc_siglongjmp, __v1longjmp)
-weak_alias (__v1__libc_siglongjmp, __v1siglongjmp)
-
-compat_symbol (libc, __v1_longjmp, _longjmp, GLIBC_2_0);
-compat_symbol (libc, __v1longjmp, longjmp, GLIBC_2_0);
-compat_symbol (libc, __v1siglongjmp, siglongjmp, GLIBC_2_0);
-
-#  endif /* ifndef __v1__longjmp */
-# endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) */
-#endif /* if !defined NOT_INT_libc && defined SHARED */
diff --git a/sysdeps/s390/v1-setjmp.h b/sysdeps/s390/v1-setjmp.h
deleted file mode 100644 (file)
index a4a6b76..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright (C) 1991-2013 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-/*
- *     ISO C99 Standard: 7.13 Nonlocal jumps   <setjmp.h>
- */
-
-#ifndef        _V1_SETJMP_H
-#define        _V1_SETJMP_H    1
-
-#include <features.h>
-
-__BEGIN_DECLS
-
-#define __V1_JMPBUF
-#define _SETJMP_H
-#include <bits/setjmp.h>               /* Get `__jmp_buf'.  */
-
-#ifndef _ASM
-
-#include <bits/sigset.h>               /* Get `__sigset_t'.  */
-
-
-/* Calling environment, plus possibly a saved signal mask.  */
-typedef struct __v1__jmp_buf_tag
-  {
-    /* NOTE: The machine-dependent definitions of `__sigsetjmp'
-       assume that a `jmp_buf' begins with a `__jmp_buf' and that
-       `__mask_was_saved' follows it.  Do not move these members
-       or add others before it.  */
-    __jmp_buf __jmpbuf;                /* Calling environment.  */
-    int __mask_was_saved;      /* Saved the signal mask?  */
-    __sigset_t __saved_mask;   /* Saved signal mask.  */
-  } __v1__jmp_buf[1];
-
-
-/* Store the calling environment in ENV, also saving the signal mask.
-   Return 0.  */
-extern int __v1setjmp (__v1__jmp_buf __env);
-
-/* Store the calling environment in ENV, also saving the
-   signal mask if SAVEMASK is nonzero.  Return 0.
-   This is the internal name for `sigsetjmp'.  */
-extern int __v1__sigsetjmp (struct __v1__jmp_buf_tag __env[1],
-                              int __savemask);
-
-/* Store the calling environment in ENV, not saving the signal mask.
-   Return 0.  */
-extern int __v1_setjmp (struct __v1__jmp_buf_tag __env[1]);
-
-/* Jump to the environment saved in ENV, making the
-   `setjmp' call there return VAL, or 1 if VAL is 0.  */
-extern void __v1longjmp (struct __v1__jmp_buf_tag __env[1], int __val)
-     __attribute__ ((__noreturn__));
-
-/* Same.  Usually `_longjmp' is used with `_setjmp', which does not save
-   the signal mask.  But it is how ENV was saved that determines whether
-   `longjmp' restores the mask; `_longjmp' is just an alias.  */
-extern void __v1_longjmp (struct __v1__jmp_buf_tag __env[1], int __val)
-     __attribute__ ((__noreturn__));
-
-/* Use the same type for `jmp_buf' and `sigjmp_buf'.
-   The `__mask_was_saved' flag determines whether
-   or not `longjmp' will restore the signal mask.  */
-typedef struct __v1__jmp_buf_tag __v1__sigjmp_buf[1];
-
-/* Jump to the environment saved in ENV, making the
-   sigsetjmp call there return VAL, or 1 if VAL is 0.
-   Restore the signal mask if that sigsetjmp call saved it.
-   This is just an alias `longjmp'.  */
-extern void __v1siglongjmp (__v1__sigjmp_buf __env, int __val)
-     __attribute__ ((__noreturn__));
-
-/* Internal machine-dependent function to restore context sans signal mask.  */
-extern void __v1__longjmp (__jmp_buf __env, int __val)
-     __attribute__ ((__noreturn__));
-
-/* Internal function to possibly save the current mask of blocked signals
-   in ENV, and always set the flag saying whether or not it was saved.
-   This is used by the machine-dependent definition of `__sigsetjmp'.
-   Always returns zero, for convenience.  */
-extern int __v1__sigjmp_save (__v1__jmp_buf __env, int __savemask);
-
-extern void _longjmp_unwind (__v1__jmp_buf env, int val);
-
-extern void __v1__libc_siglongjmp (__v1__sigjmp_buf env, int val)
-          __attribute__ ((noreturn));
-
-extern void __v1__libc_longjmp (__v1__sigjmp_buf env, int val)
-     __attribute__ ((noreturn));
-
-libc_hidden_proto (__v1__libc_longjmp)
-libc_hidden_proto (__v1_setjmp)
-libc_hidden_proto (__v1__sigsetjmp)
-#endif /* !_ASM */
-
-#endif /* ifndef _V1_SETJMP_H */
diff --git a/sysdeps/s390/v1-sigjmp.c b/sysdeps/s390/v1-sigjmp.c
deleted file mode 100644 (file)
index b624d16..0000000
+++ /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 768f926fb89f073235bf54c28a0fc94bdfa7d663..5c3ca69e71935f24a85b1fea89ef83101bcd6a89 100644 (file)
@@ -17,12 +17,6 @@ ifeq ($(subdir),elf)
 sysdep_routines += dl-vdso
 endif
 
-ifeq ($(subdir),debug)
-ifeq (yes,$(build-shared))
-sysdep_routines += v1-longjmp_chk
-endif
-endif
-
 ifeq ($(subdir),nptl)
 ifeq ($(enable-lock-elision),yes)
 libpthread-sysdep_routines += elision-lock elision-unlock elision-timed \
diff --git a/sysdeps/unix/sysv/linux/s390/getcontext.S b/sysdeps/unix/sysv/linux/s390/getcontext.S
deleted file mode 100644 (file)
index 5edbf95..0000000
+++ /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 10f542d61ce9fe8d33d3ca06ba1567add360496c..02c96c289a10218ff7cfd0fb22237437342512ea 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
+/* Copyright (C) 2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    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 801432cccbb16178b755dd182ea8eff9a2a0c2dc..2e489ae19d745bfd9170dd882b2584a095383c35 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013 Free Software Foundation, Inc.
+/* Copyright (C) 2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.
 
-   This is a copy of pthread/pt-longjmp.c made for extending the
-   jmpbuf structure on System z.  */
+   Versioned copy of nptl/pt-longjmp.c modified for versioning
+   the reverted jmpbuf extension.  */
 
-#include <setjmp.h>
-#include <stdlib.h>
-#include <bits/wordsize.h>
-#include "pthreadP.h"
 #include  <shlib-compat.h>
-#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19)
-
-/* The __v1 version prototypes are declared in v1-setjmp.h which
-   cannot be included together with setjmp.h.  So we put the
-   prototypes here manually.  */
-extern void __v1__libc_siglongjmp (sigjmp_buf env, int val)
-     __attribute__ ((noreturn));
-extern void __v1__libc_longjmp (sigjmp_buf env, int val)
-     __attribute__ ((noreturn));
-
-void __v1_siglongjmp (sigjmp_buf env, int val)
-{
-  __v1__libc_siglongjmp (env, val);
-}
-
-void __v1_longjmp (jmp_buf env, int val)
-{
-  __v1__libc_longjmp (env, val);
-}
-
-compat_symbol (libpthread, __v1_longjmp, longjmp, GLIBC_2_0);
-compat_symbol (libpthread, __v1_siglongjmp, siglongjmp, GLIBC_2_0);
-#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_19))  */
-
-void
-__v2_longjmp (jmp_buf env, int val)
-{
-  __libc_longjmp (env, val);
-}
-
-void
-__v2_siglongjmp (jmp_buf env, int val)
-{
-  __libc_siglongjmp (env, val);
-}
-
-versioned_symbol (libpthread, __v2_longjmp, longjmp, GLIBC_2_19);
-versioned_symbol (libpthread, __v2_siglongjmp, siglongjmp, GLIBC_2_19);
+
+#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
+       /* we need a unique name in case of symbol versioning.  */
+# define longjmp __v1longjmp
+#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20))  */
+
+#include <nptl/pt-longjmp.c>
+
+#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 new versions of longjmp-functions were introduced,
+   but were reverted before 2.20. Thus both versions are the same function.  */
+
+# undef longjmp
+
+strong_alias (__v1longjmp, __v2longjmp)
+versioned_symbol (libpthread, __v1longjmp, longjmp, GLIBC_2_0);
+compat_symbol (libpthread, __v2longjmp, longjmp, GLIBC_2_19);
+
+weak_alias (siglongjmp, __v1siglongjmp)
+weak_alias (siglongjmp, __v2siglongjmp)
+versioned_symbol (libpthread, __v1siglongjmp, siglongjmp, GLIBC_2_0);
+compat_symbol (libpthread, __v2siglongjmp, siglongjmp, GLIBC_2_19);
+#endif /* defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20))  */
diff --git a/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S b/sysdeps/unix/sysv/linux/s390/rtld-getcontext.S
deleted file mode 100644 (file)
index 653f2b6..0000000
+++ /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 a1b7a6a1aebeb35918010478f50a210de625325e..e74f335768a4e71d1512f99d6bce8ac70879afdf 100644 (file)
@@ -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                                                                   \
        }                                                               \
     } 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"
similarity index 67%
rename from sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S
rename to sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S
index 4992030239651d28b92229dae44c48bae4e81b0f..f35bc5c39a2a7297c1fb6b1b8caee6a8c84bb683 100644 (file)
 #include <sysdep.h>
 #include <features.h>
 
-#include "rtld-global-offsets.h"
 #include "ucontext_i.h"
 
+#include <shlib-compat.h>
+
 /*  __getcontext (const ucontext_t *ucp)
 
   Saves the machine context in UCP such that when it is activated,
@@ -37,7 +38,7 @@ ENTRY(__getcontext)
        /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize).  */
        la      %r2,SIG_BLOCK
        slr     %r3,%r3
-       la      %r4,SC_MASK(%r1)
+       la      %r4,SC_MASK(%r1)
        lhi     %r5,_NSIG8
        svc     SYS_ify(rt_sigprocmask)
 
@@ -60,42 +61,6 @@ ENTRY(__getcontext)
        std     %f14,SC_FPRS+112(%r1)
        std     %f15,SC_FPRS+120(%r1)
 
-       lhi     %r2,0
-#ifndef __V1_UCONTEXT
-       bras    %r3,0f
-# ifdef IS_IN_rtld
-  /* Within ld.so we can do slightly better by addressing dl_hwap
-     relative to GOT start.  */
-1:     .long   _GLOBAL_OFFSET_TABLE_ - 1b
-       .long   C_SYMBOL_NAME(_rtld_global_ro)@GOTOFF
-0:     l       %r4,0(%r3)
-       la      %r4,0(%r3,%r4)
-       l       %r5,4(%r3)
-       /* _dl_hwcap is 64 bit and we need the lower 32.  */
-       l       %r3,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(%r4,%r5)
-# elif PIC
-1:     .long   _GLOBAL_OFFSET_TABLE_ - 1b
-       .long   C_SYMBOL_NAME(_rtld_global_ro)@GOT
-0:     l       %r4,0(%r3)
-       la      %r4,0(%r3,%r4)  /* GOT pointer -> r4 */
-       l       %r5,4(%r3)      /* GOT offset -> r5 */
-       l       %r5,0(%r4,%r5)  /* GOT slot -> r5 */
-       l       %r3,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(%r5)
-# else
-       .long   C_SYMBOL_NAME(_dl_hwcap)
-0:     l       %r3,0(%r3)
-       l       %r3,0(%r3)
-# endif
-       tml     %r3,512 /* HWCAP_S390_HIGH_GPRS */
-       jz      2f
-       /* highgprs implies zarch so stmh/oill is ok here.  */
-       .machine "z900"
-       .machinemode "zarch_nohighgprs"
-       stmh    %r0,%r15,SC_HIGHGPRS(%r1)
-       oill    %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */
-#endif
-2:     st      %r2,SC_FLGS(%r1)
-
        /* Set __getcontext return value to 0.  */
        slr     %r2,%r2
 
@@ -110,3 +75,12 @@ ENTRY(__getcontext)
 END(__getcontext)
 
 weak_alias (__getcontext, getcontext)
+
+#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 a new version of getcontext was introduced,
+   but was reverted before 2.20. Thus both versions are the same function.  */
+weak_alias (__getcontext, __v1__getcontext)
+weak_alias (__getcontext, __v2__getcontext)
+versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1)
+compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19)
+#endif
index 03f2e83805576ab4e3b69193763d488478245d42..0194f0b0864af070722750f0dc97f31a9da865b1 100644 (file)
@@ -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 fbe8b77cafe2e33e6e0965b32be9eb6e8e06d173..42839e26f16a684ad6fc1ef476c58beeef8e55fb 100644 (file)
@@ -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 41ede4b7b299f212ecf5d14896f87798c9e54f17..9206aa334d865bcfd09997bc85d3cfb73aa72877 100644 (file)
@@ -65,31 +65,19 @@ ENTRY(__swapcontext)
        std     %f14,SC_FPRS+112(%r1)
        std     %f15,SC_FPRS+120(%r1)
 
-       /* Store access registers.  */
-       stam    %a0,%a15,SC_ACRS(%r1)
-
        /* Set __swapcontext return value to 0.  */
        slr     %r2,%r2
 
+       /* Store access registers.  */
+       stam    %a0,%a15,SC_ACRS(%r1)
+
        /* Store general purpose registers.  */
        stm     %r0,%r15,SC_GPRS(%r1)
 
-       /* Copy uc_flags into the new ucontext_t.  */
+       /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL).  */
+       la      %r2,SIG_BLOCK
        lr      %r5,%r0
-       l       %r2,SC_FLGS(%r5)
-       st      %r2,SC_FLGS(%r1)
-
-       /* Save/restore the upper halfs if necessary.  */
-       tml     %r2,1   /* UCONTEXT_UC_FLAGS_HIGH_GPRS */
-       jz      0f
-       .machine        "z900"
-       .machinemode    "zarch_nohighgprs"
-       stmh    %r0,%r15,SC_HIGHGPRS(%r1)
-       lmh     %r0,%r15,SC_HIGHGPRS(%r5)
-
-       /* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize).  */
-0:     la      %r2,SIG_BLOCK
-       la      %r3,SC_MASK(%r5)
+       la      %r3,SC_MASK(%r5)
        slr     %r4,%r4
        lhi     %r5,_NSIG8
        svc     SYS_ify(rt_sigprocmask)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym
deleted file mode 100644 (file)
index 705c7ab..0000000
+++ /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 bc27b087280533a04eb14dc26f3503f4319320c0..a3b1375a0d9476e1c7f796ffc1052ad62bea468b 100644 (file)
@@ -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                                                                   \
        }                                                               \
     } 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"
similarity index 82%
rename from sysdeps/unix/sysv/linux/s390/s390-64/getcontext-common.S
rename to sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
index 3e61e3070299aee3960b6226490591b5e374be8d..26a1c514c4bdc4b1e9694eb8940be0ee8721f82b 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "ucontext_i.h"
 
+#include <shlib-compat.h>
+
 /*  __getcontext (const ucontext_t *ucp)
 
   Saves the machine context in UCP such that when it is activated,
@@ -62,10 +64,6 @@ ENTRY(__getcontext)
        /* Set __getcontext return value to 0.  */
        slgr    %r2,%r2
 
-       /* Store the version number into the uc_flags field.  So far
-          we do not make use of the reserved bytes so we store a zero.  */
-       stg     %r2,SC_FLGS(%r1)
-
        /* Store access registers.  */
        stam    %a0,%a15,SC_ACRS(%r1)
 
@@ -77,3 +75,12 @@ ENTRY(__getcontext)
 END(__getcontext)
 
 weak_alias (__getcontext, getcontext)
+
+#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
+/* In glibc release 2.19 a new version of getcontext was introduced,
+   but was reverted before 2.20. Thus both versions are the same function.  */
+weak_alias (__getcontext, __v1__getcontext)
+weak_alias (__getcontext, __v2__getcontext)
+versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1)
+compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19)
+#endif
index 4576fc8d1433bbaf9e42e92ff6502b6ce892b49a..807f70298176e5265f099d20777e7dc90b3b00bd 100644 (file)
@@ -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 ac74b6bc081912f374a1372a27206a2c1a26459c..e3e624c91b6b7bdb2457a110905bd9a0d12c9fc3 100644 (file)
@@ -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 f04bf849d545bf0667495843ef02a5bdc42de5eb..d528cb189d4ed5474eb5763ff3a16888a3d3da1b 100644 (file)
@@ -64,15 +64,6 @@ typedef struct
     fpreg_t fprs[16];
   } fpregset_t;
 
-/* Bit is set if the uc_high_gprs field contains the upper halfs of
-   the 64 bit general purpose registers.  Since the uc_high_gprs field
-   is only available in the 32 bit version of ucontext_t it will never
-   be set for 64 bit.  */
-#define UCONTEXT_UC_FLAGS_HIGH_GPRS (1UL << 0)
-
-/* A new uc_flags constant will be defined when actually making use of
-   the reserved space: UCONTEXT_UCFLAGS_RESERVED (1UL << 1).  */
-
 /* Context to describe whole processor state.  */
 typedef struct
   {
@@ -90,10 +81,6 @@ struct ucontext
     stack_t uc_stack;
     mcontext_t uc_mcontext;
     __sigset_t uc_sigmask;
-#ifndef __s390x__
-    unsigned long uc_high_gprs[16];
-#endif
-    char __reserved[512];
   };
 
 
diff --git a/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/v1-longjmp_chk.c
deleted file mode 100644 (file)
index bd80acf..0000000
+++ /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