ld: Add a before_plugin_all_symbols_read hook
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 2 Feb 2022 22:40:03 +0000 (14:40 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 10 Mar 2022 02:23:43 +0000 (18:23 -0800)
commit320fdefef139160c93089a19ba41a2fcc4121203
treed845e8df9ccc432cfb3d06d97cb6d2082a78da93
parent399f9ba236fa8026ca8115cb030ee87a1408ce8b
ld: Add a before_plugin_all_symbols_read hook

Add a before_plugin_all_symbols_read hook to load symbol references from
DT_NEEDED entries, included from --copy-dt-needed-entries, before reading
plugin symbols to properly resolve plugin symbol references.

bfd/

PR ld/28849
* elf-bfd.h (elf_link_hash_table): Add handling_dt_needed.
* elflink.c (_bfd_elf_merge_symbol): Don't set non_ir_ref_dynamic
before plugin 'all symbols read' hook is called.

ld/

PR ld/28849
* ldelf.c (ldelf_handle_dt_needed): New function.
(ldelf_before_plugin_all_symbols_read): Likewise.
(ldelf_after_open): Call ldelf_handle_dt_needed.
* ldelf.h (ldelf_before_plugin_all_symbols_read): New.
* ldemul.c (ldemul_before_plugin_all_symbols_read): Likewise.
* ldemul.h (ldemul_before_plugin_all_symbols_read): Likewise.
(ld_emulation_xfer_struct): Add before_plugin_all_symbols_read.
* ldlang.c (lang_process): Call
ldemul_before_plugin_all_symbols_read before calling
plugin_call_all_symbols_read.
* emultempl/elf.em
(gld${EMULATION_NAME}_before_plugin_all_symbols_read): New.
(LDEMUL_BEFORE_PLUGIN_ALL_SYMBOLS_READ): New.
* emultempl/emulation.em (ld_${EMULATION_NAME}_emulation):
Initialize the before_plugin_all_symbols_read field.
* testsuite/ld-plugin/lto.exp: Run PR ld/28849 tests.
* testsuite/ld-plugin/pr28849.d: New file.
* testsuite/ld-plugin/pr28849a.c: Likewise.
* testsuite/ld-plugin/pr28849b.c: Likewise.
13 files changed:
bfd/elf-bfd.h
bfd/elflink.c
ld/emultempl/elf.em
ld/emultempl/emulation.em
ld/ldelf.c
ld/ldelf.h
ld/ldemul.c
ld/ldemul.h
ld/ldlang.c
ld/testsuite/ld-plugin/lto.exp
ld/testsuite/ld-plugin/pr28849.d [new file with mode: 0644]
ld/testsuite/ld-plugin/pr28849a.c [new file with mode: 0644]
ld/testsuite/ld-plugin/pr28849b.c [new file with mode: 0644]