aboutsummaryrefslogtreecommitdiff
path: root/gold/errors.cc
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2016-03-21 19:07:55 -0700
committerCary Coutant <ccoutant@gmail.com>2016-03-21 21:42:15 -0700
commit648c5cbbf34dcbf96bde7e07b14868777fd5d635 (patch)
treeb2d83b9ce51b0a3d3d84601c675f606b89134520 /gold/errors.cc
parent6f4c0a426c653867c40936a9b8f503628adbd64b (diff)
downloadgdb-648c5cbbf34dcbf96bde7e07b14868777fd5d635.zip
gdb-648c5cbbf34dcbf96bde7e07b14868777fd5d635.tar.gz
gdb-648c5cbbf34dcbf96bde7e07b14868777fd5d635.tar.bz2
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.
Diffstat (limited to 'gold/errors.cc')
-rw-r--r--gold/errors.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/gold/errors.cc b/gold/errors.cc
index f90e53f..27392cc 100644
--- a/gold/errors.cc
+++ b/gold/errors.cc
@@ -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.