From: H.J. Lu Date: Mon, 8 Dec 2025 02:06:43 +0000 (+0800) Subject: i386: Add GLIBC_ABI_GNU_TLS dependency only if used X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d9b7ca8816e1b088122a389ff8962785f8c7b10e;p=thirdparty%2Fbinutils-gdb.git i386: Add GLIBC_ABI_GNU_TLS dependency only if used Add GLIBC_ABI_GNU_TLS version dependency only if ___tls_get_addr is referenced by regular object. bfd/ PR ld/33287 PR ld/33702 * elfxx-x86.c (_bfd_x86_elf_link_check_relocs): Set has_tls_get_addr_call only if referenced by regular object. ld/ PR ld/33287 PR ld/33702 * testsuite/ld-i386/i386.exp: Run PR ld/33702 test. * testsuite/ld-i386/no-tls.c: New file. Signed-off-by: H.J. Lu --- diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index e5a24c4ac1d..4495b3eb00b 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -892,7 +892,8 @@ _bfd_x86_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info) elf_x86_hash_entry (h)->tls_get_addr = 1; } - htab->has_tls_get_addr_call = 1; + if (h->ref_regular) + htab->has_tls_get_addr_call = 1; } /* Pass NULL for __ehdr_start which will be defined by diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp index bba0eeda6d8..3a8a8b1af04 100644 --- a/ld/testsuite/ld-i386/i386.exp +++ b/ld/testsuite/ld-i386/i386.exp @@ -1525,6 +1525,7 @@ run_ld_link_tests [list \ # The musl C library does not support --gnu-tls-tag nor --gnu2-tls-tag. if { ![istarget *-*-musl] + && [istarget "i?86-*-linux*"] && [check_compiler_available] } { run_cc_link_tests [list \ [list \ @@ -1559,6 +1560,15 @@ if { ![istarget *-*-musl] {{readelf {-W --version-info} gnu2-tls-1b.rd}} \ "gnu2-tls-1b.so" \ ] \ + [list \ + "Build no-tls" \ + "-Wl,--gnu-tls-tag,--gnu2-tls-tag" \ + "" \ + { no-tls.c } \ + {{readelf {-W --version-info} gnu-tls-1b.rd} \ + {readelf {-W --version-info} gnu2-tls-1b.rd}} \ + "no-tls" \ + ] \ ] } diff --git a/ld/testsuite/ld-i386/no-tls.c b/ld/testsuite/ld-i386/no-tls.c new file mode 100644 index 00000000000..a9bce4a1445 --- /dev/null +++ b/ld/testsuite/ld-i386/no-tls.c @@ -0,0 +1,5 @@ +int +main () +{ + return 0; +}