From 5417c94d1a944d1a27f99240e5d62a6d7cd324f1 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Tue, 21 Jul 2015 16:10:05 -0700 Subject: [PATCH] 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 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. --- gold/ChangeLog | 8 ++++++++ gold/symtab.cc | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/gold/ChangeLog b/gold/ChangeLog index 7fdc7bf5c88..a74d96c1277 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,11 @@ +2015-07-21 Cary Coutant + + 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. + 2015-07-21 Cary Coutant PR gold/18698 diff --git a/gold/symtab.cc b/gold/symtab.cc index 925296a8c28..31ecc5c2638 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; } -- 2.30.2