From e597fa086665187c4d0dea1c45d5c044e297af66 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 3 Nov 2010 17:18:23 +0000 Subject: PR ld/12001 * ldlang.c (ldlang_def_chain_list): New variable. Contains a list of symbols defined via the --defsym command line option and currently waiting assignment. (insert_defined): Add a defined symbol to the symbol table. (ldlang_add_def): Add a entry to the ldlang_def_chain_list. (lang_place_defineds): Walk ldlang_def_chain_list defining the symbols. (lang_process): Call lang_place_defineds. (lang_add_assignment): If the assignment has come from a --defsym command line option then call lang_add_def. * ld-script/default-script2.d: Fix expected address for text section. PR gold/12001 * script.h (class Symbol_assignment: name): New member. Returns the name of the symbol. * scrfipt.cc (Script_options::is_pending_assignment): New member. Returns true if the given symbol name is on the list of assignments wating to be processed. * archive.cc (should_incldue_member): If the symbol is undefined, check to see if it is on the list of symbols pending assignment. --- gold/script.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gold/script.cc') diff --git a/gold/script.cc b/gold/script.cc index b92f85c..ada9abc 100644 --- a/gold/script.cc +++ b/gold/script.cc @@ -1050,6 +1050,20 @@ Script_options::Script_options() { } +// Returns true if NAME is on the list of symbol assignments waiting +// to be processed. + +bool +Script_options::is_pending_assignment(const char* name) +{ + for (Symbol_assignments::iterator p = this->symbol_assignments_.begin(); + p != this->symbol_assignments_.end(); + ++p) + if ((*p)->name() == name) + return true; + return false; +} + // Add a symbol to be defined. void -- cgit v1.1