From 804eb4807b7103135911ff0af4f7688d9458e4e0 Mon Sep 17 00:00:00 2001 From: Sriraman Tallam Date: Fri, 22 Jul 2011 22:38:42 +0000 Subject: [PATCH] 2011-07-22 Sriraman Tallam * symtab.cc (Symbol_table::add_from_relobj): Mark symbol as referenced only after checking if it cannot be forced local. * symtab.h (is_externally_visible): Check if the symbol is not forced local. --- gold/ChangeLog | 7 +++++++ gold/symtab.cc | 6 +++--- gold/symtab.h | 5 +++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 9d509c281b..c894c710b7 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2011-07-22 Sriraman Tallam + + * symtab.cc (Symbol_table::add_from_relobj): Mark symbol as referenced + only after checking if it cannot be forced local. + * symtab.h (is_externally_visible): Check if the symbol is not forced + local. + 2011-07-15 Ian Lance Taylor * options.h (class General_options): Add --print-output-format. diff --git a/gold/symtab.cc b/gold/symtab.cc index 26d803262d..e289f796c5 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -1238,15 +1238,15 @@ Symbol_table::add_from_relobj( is_default_version, *psym, st_shndx, is_ordinary, orig_st_shndx); + if (is_forced_local) + this->force_local(res); + // If building a shared library using garbage collection, do not // treat externally visible symbols as garbage. if (parameters->options().gc_sections() && parameters->options().shared()) this->gc_mark_symbol_for_shlib(res); - if (is_forced_local) - this->force_local(res); - if (is_defined_in_discarded_section) res->set_is_defined_in_discarded_section(); diff --git a/gold/symtab.h b/gold/symtab.h index e2aa6a7f53..b9b9e00811 100644 --- a/gold/symtab.h +++ b/gold/symtab.h @@ -538,8 +538,9 @@ class Symbol bool is_externally_visible() const { - return (this->visibility_ == elfcpp::STV_DEFAULT - || this->visibility_ == elfcpp::STV_PROTECTED); + return ((this->visibility_ == elfcpp::STV_DEFAULT + || this->visibility_ == elfcpp::STV_PROTECTED) + && !this->is_forced_local_); } // Return true if this symbol can be preempted by a definition in