mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
Fix problem where gold fails to issue an undefined symbol error during LTO.
During LTO, if (1) an IR file contains a COMDAT group that is kept, (2) a later non-claimed file contains the same group, which we discard, and (3) the plugin fails to provide a definition of the symbols in that COMDAT group, gold silently resolves any references to those symbols to 0. This patch adds a check for a placeholder symbol when deciding whether to issue an undefined symbol error. It also adds an extra note after any undefined placeholder symbol error that explains that a definition was expected from the plugin. gold/ PR gold/19842 * errors.cc (Errors::undefined_symbol): Add info message when symbol should have been provided by a plugin. * target-reloc.h (issue_undefined_symbol_error): Check for placeholder symbols defined in discarded sections. * testsuite/Makefile.am (plugin_test_9b): New test case. * testsuite/Makefile.in: Regenerate. * testsuite/plugin_test_9b_elf.cc: New test source file. * testsuite/plugin_test_9b_ir.cc: New test source file.
This commit is contained in:
@ -198,6 +198,9 @@ Errors::undefined_symbol(const Symbol* sym, const std::string& location)
|
||||
gold_info(_("%s: the vtable symbol may be undefined because "
|
||||
"the class is missing its key function"),
|
||||
program_name);
|
||||
if (sym->is_placeholder())
|
||||
gold_info(_("%s: the symbol should have been defined by a plugin"),
|
||||
program_name);
|
||||
}
|
||||
|
||||
// Issue a debugging message.
|
||||
|
Reference in New Issue
Block a user