diff options
author | Cary Coutant <ccoutant@gmail.com> | 2015-07-21 16:10:05 -0700 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2015-07-21 16:10:05 -0700 |
commit | 5417c94d1a944d1a27f99240e5d62a6d7cd324f1 (patch) | |
tree | 844c9db4f746ffff2921ed6e852733407062b72f /gold/symtab.cc | |
parent | b8c6c5ef99ef8f07fcea1c777d5084dc6f7232e5 (diff) | |
download | gdb-5417c94d1a944d1a27f99240e5d62a6d7cd324f1.zip gdb-5417c94d1a944d1a27f99240e5d62a6d7cd324f1.tar.gz gdb-5417c94d1a944d1a27f99240e5d62a6d7cd324f1.tar.bz2 |
Fix problem where __start_ and __stop_ section symbols do not honor version script.
When creating the special __start_ and __stop_ section symbols, gold
does not check the version script to see if they should be local
instead of global.
2015-07-21 Cary Coutant <ccoutant@gmail.com>
gold/
PR gold/18548
* symtab.cc (Symbol_table::do_define_in_output_data): Check for
forced local symbol even when oldsym != NULL.
(Symbol_table::do_define_in_output_segment): Likewise.
(Symbol_table::do_define_as_constant): Likewise.
Diffstat (limited to 'gold/symtab.cc')
-rw-r--r-- | gold/symtab.cc | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gold/symtab.cc b/gold/symtab.cc index 925296a..31ecc5c 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -1953,6 +1953,9 @@ Symbol_table::do_define_in_output_data( return sym; else { + if (binding == elfcpp::STB_LOCAL + || this->version_script_.symbol_is_local(name)) + this->force_local(oldsym); delete sym; return oldsym; } @@ -2067,6 +2070,9 @@ Symbol_table::do_define_in_output_segment( return sym; else { + if (binding == elfcpp::STB_LOCAL + || this->version_script_.symbol_is_local(name)) + this->force_local(oldsym); delete sym; return oldsym; } @@ -2186,6 +2192,9 @@ Symbol_table::do_define_as_constant( return sym; else { + if (binding == elfcpp::STB_LOCAL + || this->version_script_.symbol_is_local(name)) + this->force_local(oldsym); delete sym; return oldsym; } |