From d9b7ca8816e1b088122a389ff8962785f8c7b10e Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 8 Dec 2025 10:06:43 +0800 Subject: [PATCH] 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 --- bfd/elfxx-x86.c | 3 ++- ld/testsuite/ld-i386/i386.exp | 10 ++++++++++ ld/testsuite/ld-i386/no-tls.c | 5 +++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-i386/no-tls.c 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; +} -- 2.47.3