[binutils-gdb] i386: Add GLIBC_ABI_GNU_TLS dependency only if used

H.J. Lu hjl@sourceware.org
Mon Dec 8 22:51:57 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d9b7ca8816e1b088122a389ff8962785f8c7b10e

commit d9b7ca8816e1b088122a389ff8962785f8c7b10e
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Dec 8 10:06:43 2025 +0800

    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 <hjl.tools@gmail.com>

Diff:
---
 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(-)

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;
+}


More information about the Binutils-cvs mailing list