forked from Imagelibrary/binutils-gdb
PR30343 infrastructure
Make ldemul_before_plugin_all_symbols_read more useful. * ldlang.c (lang_process): Move call to ldemul_before_plugin_all_symbols_read outside BFD_SUPPORTS_PLUGINS. Allow backends to add to gc_sym_list before handling entry sym. * ldelf.c (ldelf_before_plugin_all_symbols_read): Test lto_plugin_active.
This commit is contained in:
@@ -1215,7 +1215,8 @@ ldelf_before_plugin_all_symbols_read (int use_libpath, int native,
|
||||
{
|
||||
struct elf_link_hash_table *htab = elf_hash_table (&link_info);
|
||||
|
||||
if (!is_elf_hash_table (&htab->root))
|
||||
if (!link_info.lto_plugin_active
|
||||
|| !is_elf_hash_table (&htab->root))
|
||||
return;
|
||||
|
||||
htab->handling_dt_needed = true;
|
||||
|
||||
16
ld/ldlang.c
16
ld/ldlang.c
@@ -7964,14 +7964,14 @@ lang_process (void)
|
||||
statements we can give values to symbolic origin/length now. */
|
||||
lang_do_memory_regions (true);
|
||||
|
||||
ldemul_before_plugin_all_symbols_read ();
|
||||
|
||||
#if BFD_SUPPORTS_PLUGINS
|
||||
if (link_info.lto_plugin_active)
|
||||
{
|
||||
lang_statement_list_type added;
|
||||
lang_statement_list_type files, inputfiles;
|
||||
|
||||
ldemul_before_plugin_all_symbols_read ();
|
||||
|
||||
/* Now all files are read, let the plugin(s) decide if there
|
||||
are any more to be added to the link before we call the
|
||||
emulation's after_open hook. We create a private list of
|
||||
@@ -8074,17 +8074,17 @@ lang_process (void)
|
||||
}
|
||||
#endif /* BFD_SUPPORTS_PLUGINS */
|
||||
|
||||
/* Make sure that nobody has tried to add a symbol to this list
|
||||
before now. */
|
||||
ASSERT (link_info.gc_sym_list == NULL);
|
||||
struct bfd_sym_chain **sym = &link_info.gc_sym_list;
|
||||
while (*sym)
|
||||
sym = &(*sym)->next;
|
||||
|
||||
link_info.gc_sym_list = &entry_symbol;
|
||||
*sym = &entry_symbol;
|
||||
|
||||
if (entry_symbol.name == NULL)
|
||||
{
|
||||
link_info.gc_sym_list = ldlang_undef_chain_list_head;
|
||||
*sym = ldlang_undef_chain_list_head;
|
||||
|
||||
/* entry_symbol is normally initialied by a ENTRY definition in the
|
||||
/* entry_symbol is normally initialised by an ENTRY definition in the
|
||||
linker script or the -e command line option. But if neither of
|
||||
these have been used, the target specific backend may still have
|
||||
provided an entry symbol via a call to lang_default_entry().
|
||||
|
||||
Reference in New Issue
Block a user