[binutils-gdb] elf: Set has_local_dynsyms for forced local symbol

H.J. Lu hjl@sourceware.org
Sat Jan 24 04:10:50 GMT 2026


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

commit e4a41dc43a32ed4d43ca4ffbe099c14feb73c01d
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Jan 15 09:11:50 2026 +0800

    elf: Set has_local_dynsyms for forced local symbol
    
    bfd_elf_link_record_dynamic_symbol may be called by mips backend after
    a global symbol has been forced to local.  Set has_local_dynsyms to true
    in this case.
    
    bfd/
    
            PR ld/33793
            * elflink.c (bfd_elf_link_record_dynamic_symbol): Set
            has_local_dynsyms to true for forced local symbol.
    
    ld/
    
            PR ld/33793
            * testsuite/ld-mips-elf/mips-elf.exp: Run pr33793.
            * testsuite/ld-mips-elf/pr33793.d: New file.
            * testsuite/ld-mips-elf/pr33793.s: Likewise.
    
    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>

Diff:
---
 bfd/elflink.c                         |  2 ++
 ld/testsuite/ld-mips-elf/mips-elf.exp |  2 ++
 ld/testsuite/ld-mips-elf/pr33793.d    |  4 +++
 ld/testsuite/ld-mips-elf/pr33793.s    | 51 +++++++++++++++++++++++++++++++++++
 4 files changed, 59 insertions(+)

diff --git a/bfd/elflink.c b/bfd/elflink.c
index 64c1a57b465..fcb92c91af9 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -629,6 +629,8 @@ bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
 	}
 
       h->dynindx = elf_hash_table (info)->dynsymcount;
+      if (h->forced_local)
+	elf_hash_table (info)->has_local_dynsyms = true;
       ++elf_hash_table (info)->dynsymcount;
 
       dynstr = elf_hash_table (info)->dynstr;
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index 38db5460176..c9e67324cf4 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -1782,6 +1782,8 @@ run_dump_test_o32 "global-local-symtab-final-o32"
 run_dump_test_n32 "global-local-symtab-final-n32"
 run_dump_test_n64 "global-local-symtab-final-n64"
 
+run_dump_test "pr33793"
+
 # Section ordering tests.
 foreach { abi } $abis {
     set ps2 [expr \
diff --git a/ld/testsuite/ld-mips-elf/pr33793.d b/ld/testsuite/ld-mips-elf/pr33793.d
new file mode 100644
index 00000000000..fb944866fef
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/pr33793.d
@@ -0,0 +1,4 @@
+#ld: -e __start
+#readelf: -D -s
+
+Dynamic symbol information is not available for displaying symbols.
diff --git a/ld/testsuite/ld-mips-elf/pr33793.s b/ld/testsuite/ld-mips-elf/pr33793.s
new file mode 100644
index 00000000000..6a3f4787afe
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/pr33793.s
@@ -0,0 +1,51 @@
+	.abicalls
+	.text
+	.align	2
+	.globl	__tls_get_addr
+	.ent	__tls_get_addr
+	.type	__tls_get_addr, @function
+__tls_get_addr:
+	.frame	$sp,0,$31
+	.mask	0x00000000,0
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	jr	$31
+	nop
+
+	.set	macro
+	.set	reorder
+	.end	__tls_get_addr
+	.size	__tls_get_addr, .-__tls_get_addr
+	.align	2
+	.globl	__start
+	.ent	__start
+	.type	__start, @function
+__start:
+	.frame	$sp,16,$31
+	.mask	0x80000000,-4
+	.fmask	0x00000000,0
+	.set	noreorder
+	.cpload	$25
+	.set	nomacro
+	addiu	$sp,$sp,-16
+	lw	$25,%call16(__tls_get_addr)($28)
+	addiu	$4,$28,%tlsgd(var)
+	sw	$31,12($sp)
+	.cprestore	0
+	.reloc	1f,R_MIPS_JALR,__tls_get_addr
+1:	jalr	$25
+	nop
+
+	lw	$31,12($sp)
+	lw	$2,0($2)
+	jr	$31
+	addiu	$sp,$sp,16
+
+	.set	macro
+	.set	reorder
+	.end	__start
+	.size	__start, .-__start
+	.weak	var
+	.hidden	var
+	.section	.note.GNU-stack,"",@progbits


More information about the Binutils-cvs mailing list