[PATCH v3] x86-64: Add GLIBC_ABI_GNU2_TLS version dependency
H.J. Lu
hjl.tools@gmail.com
Sun Aug 17 18:34:42 GMT 2025
On Fri, Aug 15, 2025 at 6:10 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Linux/x86-64, programs and shared libraries compiled with
> -mtls-dialect=gnu2 may fail silently at run-time against glibc without
> the GNU2 TLS run-time fix for:
>
> https://sourceware.org/bugzilla/show_bug.cgi?id=31372
>
> A version tag, GLIBC_ABI_GNU2_TLS, has been added to glibc to indicate
> that glibc has the working GNU2 TLS run-time by:
>
> commit 9df8fa397d515dc86ff5565f6c45625e672d539e
> Author: H.J. Lu <hjl.tools@gmail.com>
> Date: Mon Jul 28 12:18:22 2025 -0700
>
> x86-64: Add GLIBC_ABI_GNU2_TLS version [BZ #33129]
>
> Add the --gnu2-tls-tag option to x86-64 ELF linker to add the
> GLIBC_ABI_GNU2_TLS version dependency in output programs and shared
> libraries when linking against glibc if input relocatable object files
> have R_X86_64_TLSDESC_CALL relocation. The output will fail to load and
> run at run-time against glibc which doesn't define the GLIBC_ABI_GNU2_TLS
> version.
>
> Add the --enable-gnu2-tls-tag configure option to enable --gnu2-tls-tag
> by default. If unspecified, linker will add the GLIBC_ABI_GNU2_TLS
> version dependency if inputs have R_X86_64_TLSDESC_CALL relocation and
> libc.so defines the GLIBC_ABI_GNU2_TLS version.
>
> bfd/
>
> PR ld/33130
> * elf-linker-x86.h (elf_linker_x86_params): Add gnu2_tls.
> * elf64-x86-64.c (elf_x86_64_scan_relocs): Set has_tlsdesc_call
> to 1 for R_X86_64_TLSDESC_CALL.
> (elf_x86_64_add_glibc_version_dependency): Add GLIBC_ABI_GNU2_TLS
> version dependency if GLIBC_ABI_GNU2_TLS dependency isn't disabled
> and has_tlsdesc_call isn't 0.
> * elflink.c (elf_link_add_glibc_verneed): Add a pointer to bool
> argument, auto_version. If *auto_version is true, add the
> version dependency only if libc.so defines the version.
> (_bfd_elf_link_add_glibc_version_dependency): Add a pointer to
> bool argument and pass it to elf_link_add_glibc_verneed.
> (_bfd_elf_link_add_dt_relr_dependency): Pass NULL to
> _bfd_elf_link_add_glibc_version_dependency.
> * elfxx-x86.h (elf_x86_link_hash_table): Add has_tlsdesc_call.
>
> ld/
>
> PR ld/33130
> * NEWS: Mention --gnu2-tls-tag, --no-gnu2-tls-tag and
> --enable-gnu2-tls-tag.
> * config.in: Regenerated.
> * configure: Likewise.
> * configure.ac: Add --enable-gnu2-tls-tag.
> * ld.texi: Document --gnu2-tls-tag/--no-gnu2-tls-tag.
> * ldlex.h (option_values): Add OPTION_GNU2_TLS_TAG and
> OPTION_NO_GNU2_TLS_TAG.
> * emulparams/elf32_x86_64.sh (EXTRA_EM_FILE): Changed to
> "elf-x86-64".
> * emulparams/elf_x86_64.sh (EXTRA_EM_FILE): Likewise.
> * emultempl/elf-x86-64.em: New file.
> * emultempl/elf-x86.em (elf_x86_64_before_parse): Removed.
> (LDEMUL_BEFORE_PARSE): Likewise.
> (elf_x86_64_before_allocation): Likewise.
> * testsuite/ld-x86-64/gnu2-tls-1.rd: New file.
> * testsuite/ld-x86-64/gnu2-tls-1a.od: New file.
> * testsuite/ld-x86-64/gnu2-tls-1a.s: Likewise.
> * testsuite/ld-x86-64/gnu2-tls-1b.od: Likewise.
> * testsuite/ld-x86-64/gnu2-tls-1b.s: Likewise.
> * testsuite/ld-x86-64/gnu2-tls-1c.od: Likewise.
> * testsuite/ld-x86-64/gnu2-tls-2.rd: Likewise.
> * testsuite/ld-x86-64/gnu2-tls-2.s: Likewise.
> * testsuite/ld-x86-64/x86-64.exp: Run GLIBC_ABI_GNU2_TLS tests.
>
I sent out the v4 patch to properly add the GLIBC_2.36 version dependency
with a test when -z mark-plt -z nopack-relative-relocs passed to linker.
--
H.J.
More information about the Binutils
mailing list