PR30343, LTO ignores linker reference to _pei386_runtime_relocator
authorAlan Modra <amodra@gmail.com>
Sun, 7 May 2023 08:16:57 +0000 (17:46 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 8 May 2023 00:41:47 +0000 (10:11 +0930)
commitdefb881754df013e337eb981bc54b5e83fd01fa4
tree49a8f61112fb19427b2a69e9b0ce3764f63c96cd
parent8406216e94ee15c0b2267a7f1b229a00d6dc772d
PR30343, LTO ignores linker reference to _pei386_runtime_relocator

Make a reference to _pei386_runtime_relocator before LTO recompilation.
This is done regardless of whether such a reference will be used,
because it can't be known whether it is needed before LTO.

I also found it necessary to enable long section names for the bfd
created in make_runtime_pseudo_reloc, because otherwise when writing
it out to the bfd-in-memory we get the section written as .rdata_r
which when read back in leads to a linker warning ".rdata_r: section
below image base" and likely runtime misbehaviour.

PR 30343
* emultempl/pe.em (make_runtime_ref): New function.
(gld${EMULATION_NAME}_before_plugin_all_symbols_read): New function.
(LDEMUL_BEFORE_PLUGIN_ALL_SYMBOLS_READ): Define.
* emultempl/pep.em: Similarly to pe.em.
* pe-dll.c (make_runtime_pseudo_reloc): Set long section names.
ld/emultempl/pe.em
ld/emultempl/pep.em
ld/pe-dll.c