mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-26 15:00:06 +00:00
41d6f74e6c
With commit f0b2132b35
("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.
38 lines
1.6 KiB
C
38 lines
1.6 KiB
C
/* Placeholder definitions to pull in removed symbol versions.
|
|
Copyright (C) 2019 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 <shlib-compat.h>
|
|
|
|
/* This is an unused compatibility symbol definition, to prevent ld
|
|
from creating a weak version definition for GLIBC_2.1.2. (__vfork
|
|
used to be defined at that version, but it is now provided by libc,
|
|
and there are no versions left in libpthread for that symbol
|
|
version.) If the ABI baseline for glibc is the GLIBC_2.2 symbol
|
|
version or later, the placeholder symbol is not needed because
|
|
there are plenty of other symbols which populate those later
|
|
versions. */
|
|
#if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
|
|
void
|
|
attribute_compat_text_section
|
|
__libpthread_version_placeholder (void)
|
|
{
|
|
}
|
|
compat_symbol (libpthread, __libpthread_version_placeholder,
|
|
__libpthread_version_placeholder, GLIBC_2_1_2);
|
|
#endif
|