aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2015-07-21 16:10:05 -0700
committerCary Coutant <ccoutant@gmail.com>2015-07-21 16:10:05 -0700
commit5417c94d1a944d1a27f99240e5d62a6d7cd324f1 (patch)
tree844c9db4f746ffff2921ed6e852733407062b72f
parentb8c6c5ef99ef8f07fcea1c777d5084dc6f7232e5 (diff)
downloadgdb-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.
-rw-r--r--gold/ChangeLog8
-rw-r--r--gold/symtab.cc9
2 files changed, 17 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 7fdc7bf..a74d96c 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,13 @@
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
* archive.cc (Library_base::should_include_member): Don't use entry
point for relocatable links, or if target is not yet valid.
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;
}