Skip an archive element if not added by linker
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 25 May 2016 15:40:52 +0000 (08:40 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 25 May 2016 15:41:05 +0000 (08:41 -0700)
commitb95a0a3177bcf797c8f5ad6a7d276fb6275352b7
treee117a53aa091141f8779f85e94d718ab44da2e04
parent7bd787e8774f96712d2e15a4094f094e00ff45ba
Skip an archive element if not added by linker

During archive rescan to resolve symbol references for files added by
LTO, linker add_archive_element callback is called to check if an
archive element should added.  After all IR symbols have been claimed,
linker won't claim new IR symbols and shouldn't add the LTO archive
element.  This patch updates linker add_archive_element callback to
return FALSE when seeing an LTO archive element during rescan and
changes ELF linker to skip such archive element.

bfd/

PR ld/20103
* cofflink.c (coff_link_check_archive_element): Return TRUE if
linker add_archive_element callback returns FALSE.
* ecoff.c (ecoff_link_check_archive_element): Likewise.
* elf64-ia64-vms.c (elf64_vms_link_add_archive_symbols): Skip
archive element if linker add_archive_element callback returns
FALSE.
* elflink.c (elf_link_add_archive_symbols): Likewise.
* pdp11.c (aout_link_check_ar_symbols): Likewise.
* vms-alpha.c (alpha_vms_link_add_archive_symbols): Likewise.
* xcofflink.c (xcoff_link_check_dynamic_ar_symbols): Likewise.
(xcoff_link_check_ar_symbols): Likewise.

ld/

PR ld/20103
* ldmain.c (add_archive_element): Don't claim new IR symbols
after all IR symbols have been claimed.
* plugin.c (plugin_call_claim_file): Remove no_more_claiming
check.
* testsuite/ld-plugin/lto.exp (pr20103): New proc.
Run PR ld/20103 tests.
* testsuite/ld-plugin/pr20103a.c: New file.
* testsuite/ld-plugin/pr20103b.c: Likewise.
* testsuite/ld-plugin/pr20103c.c: Likewise.
15 files changed:
bfd/ChangeLog
bfd/cofflink.c
bfd/ecoff.c
bfd/elf64-ia64-vms.c
bfd/elflink.c
bfd/pdp11.c
bfd/vms-alpha.c
bfd/xcofflink.c
ld/ChangeLog
ld/ldmain.c
ld/plugin.c
ld/testsuite/ld-plugin/lto.exp
ld/testsuite/ld-plugin/pr20103a.c [new file with mode: 0644]
ld/testsuite/ld-plugin/pr20103b.c [new file with mode: 0644]
ld/testsuite/ld-plugin/pr20103c.c [new file with mode: 0644]