This is an automated email from the git hooks/post-receive script. aurel32 pushed a commit to branch sid in repository glibc.
commit 690b105ebc7b2accad29dfd08b1bdb5d7eacbac2 Author: Aurelien Jarno <aurel...@aurel32.net> Date: Tue Nov 21 22:18:46 2017 +0100 debian/patches/git-updates.diff: update from upstream stable branch: * debian/patches/git-updates.diff: update from upstream stable branch: - Don't use IFUNC resolver for longjmp or system in libpthread. Closes: #882336. --- debian/changelog | 3 + debian/patches/git-updates.diff | 237 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 237 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index c97b30a..1b70c9d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,9 @@ glibc (2.25-2) UNRELEASED; urgency=medium Closes: #882346. * debian/testsuite-xfail-debian.mk: mark tst-create-detached on HPPA. Closes: #882152. + * debian/patches/git-updates.diff: update from upstream stable branch: + - Don't use IFUNC resolver for longjmp or system in libpthread. + Closes: #882336. [ YunQiang Su ] * Add symbol files for mipsn32 and mips64. diff --git a/debian/patches/git-updates.diff b/debian/patches/git-updates.diff index 55fd207..e2d3970 100644 --- a/debian/patches/git-updates.diff +++ b/debian/patches/git-updates.diff @@ -1,10 +1,31 @@ GIT update of git://sourceware.org/git/glibc.git/release/2.25/master from glibc-2.25 diff --git a/ChangeLog b/ChangeLog -index f140ee67de..687fd20c46 100644 +index f140ee67de..d3c5570239 100644 --- a/ChangeLog +++ b/ChangeLog -@@ -1,3 +1,576 @@ +@@ -1,3 +1,597 @@ ++2017-08-09 Andreas Schwab <sch...@suse.de> ++ ++ * nptl/Makefile (tests) [$(build-shared) = yes]: Add ++ tst-compat-forwarder. ++ (modules-names): Add tst-compat-forwarder-mod. ++ ($(objpfx)tst-compat-forwarder): Depend on ++ $(objpfx)tst-compat-forwarder-mod.so. ++ * nptl/tst-compat-forwarder.c: New file. ++ * nptl/tst-compat-forwarder-mod.c: New file. ++ ++2017-08-09 Andreas Schwab <sch...@suse.de> ++ ++ * sysdeps/unix/sysv/linux/s390/pt-longjmp.c: Update reference to ++ renamed alias. ++ ++2017-08-08 Andreas Schwab <sch...@suse.de> ++ ++ [BZ #21041] ++ * nptl/pt-longjmp.c (longjmp, siglongjmp): Don't use IFUNC resolver. ++ * nptl/pt-system.c (system): Likewise. ++ +2017-10-13 James Clarke <jrt...@jrtc27.com> + + * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): @@ -2073,7 +2094,7 @@ index 19d76c0c37..eaea7c3b89 100644 diff --git a/nptl/Makefile b/nptl/Makefile -index 6d48c0cfc8..24067768ed 100644 +index 6d48c0cfc8..8def69ae22 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -224,6 +224,7 @@ tests = tst-typesizes \ @@ -2093,6 +2114,33 @@ index 6d48c0cfc8..24067768ed 100644 tst-once1 tst-once2 tst-once3 tst-once4 tst-once5 \ tst-key1 tst-key2 tst-key3 tst-key4 \ tst-sem1 tst-sem2 tst-sem3 tst-sem4 tst-sem5 tst-sem6 tst-sem7 \ +@@ -355,7 +356,7 @@ tests += tst-cancelx2 tst-cancelx3 tst-cancelx4 tst-cancelx5 \ + tst-oncex3 tst-oncex4 + ifeq ($(build-shared),yes) + tests += tst-atfork2 tst-tls3 tst-tls3-malloc tst-tls4 tst-tls5 tst-_res1 \ +- tst-fini1 tst-stackguard1 ++ tst-fini1 tst-stackguard1 tst-compat-forwarder + tests-nolibpthread += tst-fini1 + ifeq ($(have-z-execstack),yes) + tests += tst-execstack +@@ -366,7 +367,7 @@ modules-names = tst-atfork2mod tst-tls3mod tst-tls4moda tst-tls4modb \ + tst-tls5mod tst-tls5moda tst-tls5modb tst-tls5modc \ + tst-tls5modd tst-tls5mode tst-tls5modf tst-stack4mod \ + tst-_res1mod1 tst-_res1mod2 tst-execstack-mod tst-fini1mod \ +- tst-join7mod ++ tst-join7mod tst-compat-forwarder-mod + extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) \ + tst-cleanup4aux.o tst-cleanupx4aux.o + test-extras += $(modules-names) tst-cleanup4aux tst-cleanupx4aux +@@ -704,6 +705,8 @@ $(objpfx)tst-oddstacklimit.out: $(objpfx)tst-oddstacklimit $(objpfx)tst-basic1 + $(evaluate-test) + endif + ++$(objpfx)tst-compat-forwarder: $(objpfx)tst-compat-forwarder-mod.so ++ + # The tests here better do not run in parallel + ifneq ($(filter %tests,$(MAKECMDGOALS)),) + .NOTPARALLEL: diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index 8a228ab254..368fe3c36b 100644 --- a/nptl/allocatestack.c @@ -2114,6 +2162,99 @@ index 8a228ab254..368fe3c36b 100644 goto mprot_error; #endif +diff --git a/nptl/pt-longjmp.c b/nptl/pt-longjmp.c +index 2ef757e687..8f3c6b3a09 100644 +--- a/nptl/pt-longjmp.c ++++ b/nptl/pt-longjmp.c +@@ -25,21 +25,14 @@ + symbol in libpthread, but the historical ABI requires it. For static + linking, there is no need to provide anything here--the libc version + will be linked in. For shared library ABI compatibility, there must be +- longjmp and siglongjmp symbols in libpthread.so; so we define them using +- IFUNC to redirect to the libc function. */ ++ longjmp and siglongjmp symbols in libpthread.so. + +-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22) +- +-# if HAVE_IFUNC +- +-# undef INIT_ARCH +-# define INIT_ARCH() +-# define DEFINE_LONGJMP(name) libc_ifunc (name, &__libc_longjmp) +- +-extern __typeof(longjmp) longjmp_ifunc; +-extern __typeof(siglongjmp) siglongjmp_ifunc; ++ With an IFUNC resolver, it would be possible to avoid the indirection, ++ but the IFUNC resolver might run before the __libc_longjmp symbol has ++ been relocated, in which case the IFUNC resolver would not be able to ++ provide the correct address. */ + +-# else /* !HAVE_IFUNC */ ++#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22) + + static void __attribute__ ((noreturn, used)) + longjmp_compat (jmp_buf env, int val) +@@ -47,14 +40,10 @@ longjmp_compat (jmp_buf env, int val) + __libc_longjmp (env, val); + } + +-# define DEFINE_LONGJMP(name) strong_alias (longjmp_compat, name) +- +-# endif /* HAVE_IFUNC */ +- +-DEFINE_LONGJMP (longjmp_ifunc) +-compat_symbol (libpthread, longjmp_ifunc, longjmp, GLIBC_2_0); ++strong_alias (longjmp_compat, longjmp_alias) ++compat_symbol (libpthread, longjmp_alias, longjmp, GLIBC_2_0); + +-strong_alias (longjmp_ifunc, siglongjmp_ifunc) +-compat_symbol (libpthread, siglongjmp_ifunc, siglongjmp, GLIBC_2_0); ++strong_alias (longjmp_alias, siglongjmp_alias) ++compat_symbol (libpthread, siglongjmp_alias, siglongjmp, GLIBC_2_0); + + #endif +diff --git a/nptl/pt-system.c b/nptl/pt-system.c +index f8ca6ba0d9..b30ddf2b39 100644 +--- a/nptl/pt-system.c ++++ b/nptl/pt-system.c +@@ -25,29 +25,21 @@ + libpthread, but the historical ABI requires it. For static linking, + there is no need to provide anything here--the libc version will be + linked in. For shared library ABI compatibility, there must be a +- 'system' symbol in libpthread.so; so we define it using IFUNC to +- redirect to the libc function. */ ++ 'system' symbol in libpthread.so. + +-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22) +- +-# if HAVE_IFUNC +- +-extern __typeof(system) system_ifunc; +-# undef INIT_ARCH +-# define INIT_ARCH() +-libc_ifunc (system_ifunc, &__libc_system) ++ With an IFUNC resolver, it would be possible to avoid the indirection, ++ but the IFUNC resolver might run before the __libc_system symbol has ++ been relocated, in which case the IFUNC resolver would not be able to ++ provide the correct address. */ + +-# else /* !HAVE_IFUNC */ ++#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22) + + static int __attribute__ ((used)) + system_compat (const char *line) + { + return __libc_system (line); + } +-strong_alias (system_compat, system_ifunc) +- +-# endif /* HAVE_IFUNC */ +- +-compat_symbol (libpthread, system_ifunc, system, GLIBC_2_0); ++strong_alias (system_compat, system_alias) ++compat_symbol (libpthread, system_alias, system, GLIBC_2_0); + + #endif diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c index dc9ca4c476..4425927c30 100644 --- a/nptl/pthread_mutex_lock.c @@ -2737,6 +2878,81 @@ index 256508ca2a..846687e1cf 100644 atomic_store_relaxed (&rwlock->__data.__cur_writer, THREAD_GETMEM (THREAD_SELF, tid)); return 0; +diff --git a/nptl/tst-compat-forwarder-mod.c b/nptl/tst-compat-forwarder-mod.c +new file mode 100644 +index 0000000000..823bfa22de +--- /dev/null ++++ b/nptl/tst-compat-forwarder-mod.c +@@ -0,0 +1,28 @@ ++/* Copyright (C) 2017 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/>. */ ++ ++/* Call the function system through a statically initialized pointer. */ ++ ++#include <stdlib.h> ++ ++int (*system_function) (const char *) = system; ++ ++void ++call_system (void) ++{ ++ system_function (NULL); ++} +diff --git a/nptl/tst-compat-forwarder.c b/nptl/tst-compat-forwarder.c +new file mode 100644 +index 0000000000..f96806b7fe +--- /dev/null ++++ b/nptl/tst-compat-forwarder.c +@@ -0,0 +1,35 @@ ++/* Copyright (C) 2017 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/>. */ ++ ++/* Test that the compat forwaders in libpthread work correctly. */ ++ ++#include <support/test-driver.h> ++ ++extern void call_system (void); ++ ++int ++do_test (void) ++{ ++ /* Calling the system function from a shared library that is not linked ++ against libpthread, when the main program is linked against ++ libpthread, should not crash. */ ++ call_system (); ++ ++ return 0; ++} ++ ++#include <support/test-driver.c> diff --git a/nptl/tst-mutex7.c b/nptl/tst-mutex7.c index a11afdba5e..08fe251eeb 100644 --- a/nptl/tst-mutex7.c @@ -9633,6 +9849,21 @@ index 2c2584956d..8ea4333846 100644 # The main malloc is interposed into the dynamic linker, for # allocations after the initial link (when dlopen is used). ld.so: malloc + REL R_386_GLOB_DAT +diff --git a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c b/sysdeps/unix/sysv/linux/s390/pt-longjmp.c +index d324237edd..0221ac2cf5 100644 +--- a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c ++++ b/sysdeps/unix/sysv/linux/s390/pt-longjmp.c +@@ -26,8 +26,8 @@ + /* 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. */ + +-strong_alias (longjmp_ifunc, __v2longjmp) ++strong_alias (longjmp_alias, __v2longjmp) + compat_symbol (libpthread, __v2longjmp, longjmp, GLIBC_2_19); +-strong_alias (siglongjmp_ifunc, __v2siglongjmp) ++strong_alias (siglongjmp_alias, __v2siglongjmp) + compat_symbol (libpthread, __v2siglongjmp, siglongjmp, GLIBC_2_19); + #endif /* SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)) */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/long-double.h b/sysdeps/unix/sysv/linux/sparc/bits/long-double.h deleted file mode 100644 index 094e05124b..0000000000 -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git