Files
binutils-gdb/ld/config.in
H.J. Lu fbcdc06c23 i386: Add GLIBC_ABI_GNU_TLS version dependency
On Linux/i386, programs and shared libraries compiled with
-mtls-dialect=gnu may fail silently at run-time against glibc without
the GNU TLS run-time fix for:

https://sourceware.org/bugzilla/show_bug.cgi?id=32996

The glibc version tag, GLIBC_ABI_GNU_TLS, has been added to indicate
that glibc has the working GNU TLS run-time:

commit ed1b7a5a489ab555a27fad9c101ebe2e1c1ba881
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Jul 28 12:16:11 2025 -0700

    i386: Add GLIBC_ABI_GNU_TLS version [BZ #33221]

Add the --gnu-tls-tag option to x86-64 ELF linker to add the
GLIBC_ABI_GNU_TLS version dependency in output programs and shared
libraries when linking against glibc if input relocatable object files
call ___tls_get_addr.  The output will fail to load and run at run-time
against glibc which doesn't define the GLIBC_ABI_GNU_TLS version.

Add the --enable-gnu-tls-tag configure option to enable --gnu-tls-tag
by default.  If unspecified, linker will add the GLIBC_ABI_GNU_TLS
version dependency if input call ___tls_get_addr and libc.so defines
the GLIBC_ABI_GNU2_TLS version.

bfd/

	PR ld/33287
	* elf-linker-x86.h (elf_linker_x86_params): Add
	gnu_tls_version_tag.
	* elf32-i386.c (elf_backend_add_glibc_version_dependency): Add
	GLIBC_ABI_GNU_TLS support.
	* elfxx-x86.c (_bfd_x86_elf_link_check_relocs): Set
	has_tls_get_addr_call to 1 if ___tls_get_addr is used.
	* elfxx-x86.h (elf_x86_link_hash_table): Add has_tls_get_addr_call.

ld/

	PR ld/33287
	* Mention --gnu-tls-tag, --no-gnu-tls-tag and --enable-gnu-tls-tag.
	* config.in: Regenerated.
	* configure: Likewise.
	* configure.ac: Add --enable-gnu-tls-tag.
	* ld.texi: Document --gnu-tls-tag and --enable-gnu-tls-tag.
	* ldlex.h (option_values): Add OPTION_GNU_TLS_VERSION_TAG and
	OPTION_NO_GNU_TLS_VERSION_TAG.
	* emultempl/elf-i386-glibc.em (elf_i386_glibc_before_parse):
	Initialize params.gnu_tls_version_tag.
	(PARSE_AND_LIST_LONGOPTS_386): New.
	(PARSE_AND_LIST_OPTIONS_386): Likewise.
	(PARSE_AND_LIST_ARGS_CASES_386): Likewise.
	(PARSE_AND_LIST_LONGOPTS): Append $PARSE_AND_LIST_LONGOPTS_386.
	(PARSE_AND_LIST_OPTIONS): Append $PARSE_AND_LIST_OPTIONS_386.
	(PARSE_AND_LIST_ARGS_CASES): Append
	$PARSE_AND_LIST_ARGS_CASES_386.
	* testsuite/ld-i386/gnu-tls-1.s: Likewise.
	* testsuite/ld-i386/gnu-tls-1a.rd: Likewise.
	* testsuite/ld-i386/gnu-tls-1b.rd: Likewise.
	* testsuite/ld-i386/i386.exp: Run PR ld/33287 tests.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-20 13:53:32 -07:00

307 lines
8.4 KiB
Plaintext

/* config.in. Generated from configure.ac by autoheader. */
/* Check that config.h is #included before system headers
(this works only for glibc, but that should be enough). */
#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
# error config.h must be #included before system headers
#endif
#define __CONFIG_H__ 1
/* Default compression algorithm for --enable-compressed-debug-sections. */
#undef DEFAULT_COMPRESSED_DEBUG_ALGORITHM
/* Define to 1 if you want to emit gnu hash in the ELF linker by default. */
#undef DEFAULT_EMIT_GNU_HASH
/* Define to 1 if you want to emit sysv hash in the ELF linker by default. */
#undef DEFAULT_EMIT_SYSV_HASH
/* Define if you want compressed debug sections by default. */
#undef DEFAULT_FLAG_COMPRESS_DEBUG
/* Define to 1 if you want to turn executable stack warnings into errors by
default. */
#undef DEFAULT_LD_ERROR_EXECSTACK
/* Define to 1 if you want to turn executable segment warnings into errors by
default. */
#undef DEFAULT_LD_ERROR_RWX_SEGMENTS
/* Define to 0 if you want to disable the generation of an executable stack
when a .note-GNU-stack section is missing. */
#undef DEFAULT_LD_EXECSTACK
/* Define to 1 if you want to enable --gnu2-tls-tag in ELF i386/x86-64 linker
by default. */
#undef DEFAULT_LD_GNU2_TLS_TAG
/* Define to 1 if you want to enable --gnu-tls-tag in ELF i386 linker by
default. */
#undef DEFAULT_LD_GNU_TLS_TAG
/* Define to 1 if you want to enable --rosegment in the ELF linker by default.
*/
#undef DEFAULT_LD_ROSEGMENT
/* The default method for DT_TEXTREL check in ELF linker. */
#undef DEFAULT_LD_TEXTREL_CHECK
/* Define to 1 if DT_TEXTREL check is warning in ELF linker by default. */
#undef DEFAULT_LD_TEXTREL_CHECK_WARNING
/* Define to 1 if you want to enable --warn-execstack in ELF linker by
default. */
#undef DEFAULT_LD_WARN_EXECSTACK
/* Define to 0 if you want to disable --warn-rwx-segments in ELF linker by
default. */
#undef DEFAULT_LD_WARN_RWX_SEGMENTS
/* Define to 1 if you want to enable -z mark-plt in ELF x86-64 linker by
default. */
#undef DEFAULT_LD_Z_MARK_PLT
/* Define to 1 if you want to enable -z memory_seal in ELF linker by default.
*/
#undef DEFAULT_LD_Z_MEMORY_SEAL
/* Define to 1 if you want to enable -z relro in ELF linker by default. */
#undef DEFAULT_LD_Z_RELRO
/* Define to 1 if you want to enable -z separate-code in ELF linker by
default. */
#undef DEFAULT_LD_Z_SEPARATE_CODE
/* Define to 1 if you want to set DT_RUNPATH instead of DT_RPATH by default.
*/
#undef DEFAULT_NEW_DTAGS
/* Define if you want run-time sanity checks. */
#undef ENABLE_CHECKING
/* Handle .ctf type-info sections */
#undef ENABLE_LIBCTF
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
/* Additional extension a shared object might have. */
#undef EXTRA_SHLIB_EXTENSION
/* Define to choose default GOT handling scheme */
#undef GOT_HANDLING_DEFAULT
/* Define to 1 if you have the Mac OS X function
CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES
/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
the CoreFoundation framework. */
#undef HAVE_CFPREFERENCESCOPYAPPVALUE
/* Define to 1 if you have the `close' function. */
#undef HAVE_CLOSE
/* Define if the GNU dcgettext() function is already present or preinstalled.
*/
#undef HAVE_DCGETTEXT
/* Define to 1 if you have the declaration of `environ', and to 0 if you
don't. */
#undef HAVE_DECL_ENVIRON
/* Is the prototype for getopt in <unistd.h> in the expected format? */
#undef HAVE_DECL_GETOPT
/* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't.
*/
#undef HAVE_DECL_STPCPY
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <elf-hints.h> header file. */
#undef HAVE_ELF_HINTS_H
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE
/* Define to 1 if you have the `getrusage' function. */
#undef HAVE_GETRUSAGE
/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
/* Define to 1 if you have the `glob' function. */
#undef HAVE_GLOB
/* Define if you have the iconv() function and it works. */
#undef HAVE_ICONV
/* Define .init_array/.fini_array sections are available and working. */
#undef HAVE_INITFINI_ARRAY
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* The jansson library is to be used */
#undef HAVE_JANSSON
/* Define if your <locale.h> file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
/* Define to 1 if you have the `lseek' function. */
#undef HAVE_LSEEK
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `mkstemp' function. */
#undef HAVE_MKSTEMP
/* Define to 1 if you have a working `mmap' system call. */
#undef HAVE_MMAP
/* Define to 1 if you have the `open' function. */
#undef HAVE_OPEN
/* Define to 1 if you have the `realpath' function. */
#undef HAVE_REALPATH
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H
/* Define to 1 if you have the <sys/mman.h> header file. */
#undef HAVE_SYS_MMAN_H
/* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the `waitpid' function. */
#undef HAVE_WAITPID
/* Define to 1 if you have the <windows.h> header file. */
#undef HAVE_WINDOWS_H
/* Define to 1 if zstd is enabled. */
#undef HAVE_ZSTD
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if you want to support the --error-handling-script command line
option. */
#undef SUPPORT_ERROR_HANDLING_SCRIPT
/* Use b modifier when opening binary files? */
#undef USE_BINARY_FOPEN
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# undef _POSIX_PTHREAD_SEMANTICS
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# undef _TANDEM_SOURCE
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# undef __EXTENSIONS__
#endif
/* Version number of package */
#undef VERSION
/* whether to use inline xxhash */
#undef WITH_XXHASH
/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
`char[]'. */
#undef YYTEXT_POINTER
/* Enable large inode numbers on Mac OS X 10.5. */
#ifndef _DARWIN_USE_64_BIT_INODE
# define _DARWIN_USE_64_BIT_INODE 1
#endif
/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS
/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES
/* Define to 1 if on MINIX. */
#undef _MINIX
/* Define to 2 if the system does not provide POSIX.1 features except with
this defined. */
#undef _POSIX_1_SOURCE
/* Define to 1 if you need to in order for `stat' and other things to work. */
#undef _POSIX_SOURCE