aboutsummaryrefslogtreecommitdiff
path: root/gold/script.cc
diff options
context:
space:
mode:
authorSriraman Tallam <tmsriram@google.com>2018-02-15 17:35:16 -0800
committerSriraman Tallam <tmsriram@google.com>2018-02-15 17:35:16 -0800
commit3281b315c89caf1d539a316e41cc095e46482f75 (patch)
treec324284c8a21bf2bac30f2bb5678cbb430e63867 /gold/script.cc
parent43859909e2982252d136e19258431f3aa8afb890 (diff)
downloadfsf-binutils-gdb-3281b315c89caf1d539a316e41cc095e46482f75.zip
fsf-binutils-gdb-3281b315c89caf1d539a316e41cc095e46482f75.tar.gz
fsf-binutils-gdb-3281b315c89caf1d539a316e41cc095e46482f75.tar.bz2
Fix symbol resolution with linker plugins for defsym symbols.
2018-02-07 Sriraman Tallam <tmsriram@google.com> * expression.cc (Symbol_expression::set_expr_sym_in_real_elf): New method. (Unary_expression::set_expr_sym_in_real_elf): New method. (Binary_expression::set_expr_sym_in_real_elf): New method. (Trinary_expression::set_expr_sym_in_real_elf): New method. * plugin.cc (get_symbol_resolution_info): Fix symbol resolution if defined or used in defsyms. * plugin.h (Plugin_manager::is_defsym_def): New method. (Plugin_manager::Plugin_manager): Initialize defsym_defines_set_. (Plugin_manager::defsym_defines_set_): New member. (Plugin_manager::Defsym_defines_set): New typedef. * script.cc (Script_options::set_defsym_uses_in_real_elf): New method. (Script_options::find_defsym_defs): New method. * script.h (Expression::set_expr_sym_in_real_elf): New method. (Symbol_assignment::is_defsym): New method. (Symbol_assignment::value): New method. (Script_options::find_defsym_defs): New method. (Script_options::set_defsym_uses_in_real_elf): New method. * testsuite/Makefile.am (plugin_test_defsym): New test. * testsuite/Makefile.in: Regenerate. * testsuite/plugin_test.c: Check for new symbol resolution. * testsuite/plugin_test_defsym.sh: New script. * testsuite/plugin_test_defsym.c: New test source.
Diffstat (limited to 'gold/script.cc')
-rw-r--r--gold/script.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/gold/script.cc b/gold/script.cc
index db243cf..3deb1ae 100644
--- a/gold/script.cc
+++ b/gold/script.cc
@@ -1112,6 +1112,29 @@ Script_options::is_pending_assignment(const char* name)
return false;
}
+// Populates the set with symbols defined in defsym LHS.
+
+void Script_options::find_defsym_defs(Unordered_set<std::string>& defsym_set)
+{
+ for (Symbol_assignments::const_iterator p = this->symbol_assignments_.begin();
+ p != this->symbol_assignments_.end();
+ ++p)
+ {
+ defsym_set.insert((*p)->name());
+ }
+}
+
+void
+Script_options::set_defsym_uses_in_real_elf(Symbol_table* symtab) const
+{
+ for (Symbol_assignments::const_iterator p = this->symbol_assignments_.begin();
+ p != this->symbol_assignments_.end();
+ ++p)
+ {
+ (*p)->value()->set_expr_sym_in_real_elf(symtab);
+ }
+}
+
// Add a symbol to be defined.
void