summaryrefslogtreecommitdiff
path: root/nptl
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 /nptl
parentac63a0783cdee8454c84fc45f37330d98b6039e7 (diff)
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.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/Makefile7
-rw-r--r--nptl/pt-interp.c1
2 files changed, 6 insertions, 2 deletions
diff --git a/nptl/Makefile b/nptl/Makefile
index d58324d590..530d14b9d4 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 0000000000..ecf1fe70df
--- /dev/null
+++ b/nptl/pt-interp.c
@@ -0,0 +1 @@
+#include <elf/interp.c>