From 41d6f74e6cb6a92ab428c11ee1e408b2a16aa1b0 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Tue, 2 Jul 2019 15:12:20 +0200 Subject: nptl: Remove vfork IFUNC-based forwarder from libpthread [BZ #20188] With commit f0b2132b35248c1f4a80f62a2c38cddcc802aa8c ("ld.so: Support moving versioned symbols between sonames [BZ #24741]"), the dynamic linker will find the definition of vfork in libc and binds a vfork reference to that symbol, even if the soname in the version reference says that the symbol should be located in libpthread. As a result, the forwarder (whether it's IFUNC-based or a duplicate of the libc implementation) is no longer necessary. On older architectures, a placeholder symbol is required, to make sure that the GLIBC_2.1.2 symbol version does not go away, or is turned in to a weak symbol definition by the link editor. (The symbol version needs to preserved so that the symbol coverage check in elf/dl-version.c does not fail for old binaries.) mips32 is an outlier: It defined __vfork@@GLIBC_2.2, but the baseline is GLIBC_2.0. Since there are other @@GLIBC_2.2 symbols, the placeholder symbol is not needed there. --- nptl/Versions | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'nptl/Versions') diff --git a/nptl/Versions b/nptl/Versions index e7f691da7a..6007fd03e7 100644 --- a/nptl/Versions +++ b/nptl/Versions @@ -36,7 +36,6 @@ libc { __libc_alloca_cutoff; # Internal libc interface to libpthread __libc_dl_error_tsd; - __libc_vfork; __libc_pthread_init; __libc_current_sigrtmin_private; __libc_current_sigrtmax_private; __libc_allocate_rtsig_private; @@ -98,7 +97,7 @@ libpthread { sem_destroy; sem_getvalue; sem_init; sem_post; sem_trywait; sem_wait; # Special fork handling. - fork; __fork; vfork; + fork; __fork; # Cancellation points. close; __close; fcntl; __fcntl; read; __read; write; __write; accept; @@ -152,7 +151,7 @@ libpthread { } GLIBC_2.1.2 { - __vfork; + __libpthread_version_placeholder; } GLIBC_2.2 { -- cgit v1.2.3