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.
This commit is contained in:
Cary Coutant 2015-07-21 16:10:05 -07:00
parent b8c6c5ef99
commit 5417c94d1a
2 changed files with 17 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2015-07-21 Cary Coutant <ccoutant@gmail.com>
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 <ccoutant@gmail.com>
PR gold/18698

View File

@ -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;
}