[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