aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Fotengauer-Malinovskiy <glebfm@altlinux.org>2015-06-02 21:04:06 +0300
committerDmitry V. Levin <ldv@altlinux.org>2015-06-10 10:18:12 +0000
commit78ad175b3060aae058ed5d05ced2bc58714901cd (patch)
tree96cd466fb01d8b105801e4a7093a42f8a05e0908
parentac63a0783cdee8454c84fc45f37330d98b6039e7 (diff)
downloadglibc-78ad175b3060aae058ed5d05ced2bc58714901cd.zip
glibc-78ad175b3060aae058ed5d05ced2bc58714901cd.tar.gz
glibc-78ad175b3060aae058ed5d05ced2bc58714901cd.tar.bz2
nptl: restore .interp section in libpthread.so
In commit 02657da2cf4457804ed938ee08b8316249126444, .interp section was removed from libpthread.so. This led to an error: $ /lib64/libpthread.so.0 Native POSIX Threads Library by Ulrich Drepper et al Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Forced unwind support included. Segmentation fault (gdb) bt #0 0x00000000000055a6 in _exit@plt () Unfortunately, there is no way to add a regression test for the bug because .interp specifies the path to dynamic linker of the target system. [BZ #18479] * nptl/pt-interp.c: New file. * nptl/Makefile (libpthread-routines, libpthread-shared-only-routines): Add pt-interp. [$(build-shared) = yes] ($(objpfx)pt-interp.os): Depend on $(common-objpfx)runtime-linker.h.
-rw-r--r--ChangeLog9
-rw-r--r--NEWS2
-rw-r--r--nptl/Makefile7
-rw-r--r--nptl/pt-interp.c1
4 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index ca22729..80afbb1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2015-06-10 Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
+
+ [BZ #18479]
+ * nptl/pt-interp.c: New file.
+ * nptl/Makefile (libpthread-routines, libpthread-shared-only-routines):
+ Add pt-interp.
+ [[$(build-shared) = yes] ($(objpfx)pt-interp.os): Depend on
+ $(common-objpfx)runtime-linker.h.
+
2015-06-10 Dmitry V. Levin <ldv@altlinux.org>
* Makeconfig (+interp): Remove unused variable.
diff --git a/NEWS b/NEWS
index 221ec2f..218bf3a 100644
--- a/NEWS
+++ b/NEWS
@@ -20,7 +20,7 @@ Version 2.22
18111, 18116, 18125, 18128, 18138, 18185, 18196, 18197, 18206, 18210,
18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287, 18319, 18324,
18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444,
- 18468, 18469, 18470, 18483, 18495, 18496, 18497, 18498, 18507.
+ 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507.
* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.
diff --git a/nptl/Makefile b/nptl/Makefile
index d58324d..530d14b 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -33,7 +33,7 @@ routines = alloca_cutoff forward libc-lowlevellock libc-cancellation \
register-atfork unregister-atfork
shared-only-routines = forward
-libpthread-routines = nptl-init vars events version \
+libpthread-routines = nptl-init vars events version pt-interp \
pthread_create pthread_exit pthread_detach \
pthread_join pthread_tryjoin pthread_timedjoin \
pthread_self pthread_equal pthread_yield \
@@ -138,7 +138,8 @@ libpthread-routines = nptl-init vars events version \
# pthread_setgid pthread_setegid pthread_setregid \
# pthread_setresgid
-libpthread-shared-only-routines = version pt-allocrtsig unwind-forcedunwind
+libpthread-shared-only-routines = version pt-interp pt-allocrtsig \
+ unwind-forcedunwind
libpthread-static-only-routines = pthread_atfork
# Since cancellation handling is in large parts handled using exceptions
@@ -608,6 +609,8 @@ $(objpfx)banner.h: Banner
generated += banner.h
# Give libpthread.so an entry point and make it directly runnable itself.
LDFLAGS-pthread.so += -e __nptl_main
+# pt-interp.c exists just to get the runtime linker path into libpthread.so.
+$(objpfx)pt-interp.os: $(common-objpfx)runtime-linker.h
endif
ifeq ($(run-built-tests),yes)
diff --git a/nptl/pt-interp.c b/nptl/pt-interp.c
new file mode 100644
index 0000000..ecf1fe7
--- /dev/null
+++ b/nptl/pt-interp.c
@@ -0,0 +1 @@
+#include <elf/interp.c>