mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 13:00:06 +00:00
0923f74ada
This essentially folds compat_symbol_unique functionality into compat_symbol. This change eliminates the need for intermediate aliases for defining multiple symbol versions, for both compat_symbol and versioned_symbol. Some binutils versions do not suport multiple versions per symbol on some targets, so aliases are automatically introduced, similar to what compat_symbol_unique did. To reduce symbol table sizes, a configure check is added to avoid these aliases if they are not needed. The new mechanism works with data symbols as well as function symbols, due to the way an assembler-level redirect is used. It is not compatible with weak symbols for old binutils versions, which is why the definition of __malloc_initialize_hook had to be changed. This is not a loss of functionality because weak symbols do not matter to dynamic linking. The placeholder symbol needs repeating in nptl/libpthread-compat.c now that compat_symbol is used, but that seems more obvious than introducing yet another macro. A subtle difference was that compat_symbol_unique made the symbol global automatically. compat_symbol does not do this, so static had to be removed from the definition of __libpthread_version_placeholder. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
53 lines
2.0 KiB
C
53 lines
2.0 KiB
C
/* Placeholder definitions to pull in removed symbol versions.
|
|
Copyright (C) 2019-2021 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
|
|
<https://www.gnu.org/licenses/>. */
|
|
|
|
#include <sys/cdefs.h>
|
|
#include <shlib-compat.h>
|
|
|
|
#ifdef SHARED
|
|
void
|
|
attribute_compat_text_section
|
|
__attribute_used__
|
|
__libpthread_version_placeholder_1 (void)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
/* 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))
|
|
compat_symbol (libpthread, __libpthread_version_placeholder_1,
|
|
__libpthread_version_placeholder, GLIBC_2_1_2);
|
|
#endif
|
|
|
|
#if (SHLIB_COMPAT (libpthread, GLIBC_2_2_3, GLIBC_2_2_4))
|
|
compat_symbol (libpthread, __libpthread_version_placeholder_1,
|
|
__libpthread_version_placeholder, GLIBC_2_2_3);
|
|
#endif
|
|
|
|
#if (SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_3))
|
|
compat_symbol (libpthread, __libpthread_version_placeholder_1,
|
|
__libpthread_version_placeholder, GLIBC_2_2_6);
|
|
#endif
|