]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
elf: Strip unreferenced weak undefined symbols
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 18 Apr 2024 12:28:56 +0000 (05:28 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 19 Apr 2024 02:17:17 +0000 (19:17 -0700)
commiteebad48efeeee858be83d754a6b1326133e51d36
tree4611e2b89a9fcbe7aecf2a0709c7056cef9ba183
parent2304772225e51cb939d3766cde47d7651d15176e
elf: Strip unreferenced weak undefined symbols

Linker will resolve an undefined symbol only if it is referenced by
relocation.  Unreferenced weak undefined symbols serve no purpose.
Weak undefined symbols appear in the dynamic symbol table only when they
are referenced by dynamic relocation.  Mark symbols with relocation and
strip undefined weak symbols if they don't have relocation and aren't
in the dynamic symbol table.

bfd/

PR ld/31652
* elf-bfd.h (elf_link_hash_entry): Add has_reloc.
* elf-vxworks.c (elf_vxworks_emit_relocs): Set has_reloc.
* elflink.c (_bfd_elf_link_output_relocs): Likewise.
(elf_link_output_extsym): Strip undefined weak symbols if they
don't have relocation and aren't in the dynamic symbol table.

ld/

PR ld/31652
* testsuite/ld-elf/elf.exp: Run undefweak tests.
* testsuite/ld-elf/undefweak-1.rd: New file.
* testsuite/ld-elf/undefweak-1a.s: Likewise.
* testsuite/ld-elf/undefweak-1b.s: Likewise.
* testsuite/ld-x86-64/weakundef-1.nd: Likewise.
* testsuite/ld-x86-64/weakundef-1a.s: Likewise.
* testsuite/ld-x86-64/weakundef-1b.s: Likewise.
* testsuite/ld-x86-64/x86-64.exp: Run undefweak tests.
bfd/elf-bfd.h
bfd/elf-vxworks.c
bfd/elflink.c
ld/testsuite/ld-elf/elf.exp
ld/testsuite/ld-elf/undefweak-1.rd [new file with mode: 0644]
ld/testsuite/ld-elf/undefweak-1a.s [new file with mode: 0644]
ld/testsuite/ld-elf/undefweak-1b.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/weakundef-1.nd [new file with mode: 0644]
ld/testsuite/ld-x86-64/weakundef-1a.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/weakundef-1b.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp