From: Cary Coutant Date: Wed, 6 Jul 2011 22:26:37 +0000 (+0000) Subject: * gold/incremental.cc X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f48b5fb76bf64c945d178839a41b835ee67dd12d;p=binutils-gdb.git * gold/incremental.cc (Output_section_incremental_inputs::write_info_blocks): Check for hidden and internal symbols. --- diff --git a/gold/ChangeLog b/gold/ChangeLog index 192d6f6a0fe..52833b67fcf 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2011-07-06 Cary Coutant + + * gold/incremental.cc + (Output_section_incremental_inputs::write_info_blocks): Check for + hidden and internal symbols. + 2011-07-06 Cary Coutant * incremental.cc (Sized_incremental_binary::do_file_has_changed): diff --git a/gold/incremental.cc b/gold/incremental.cc index 710effc3514..cb97044a3d8 100644 --- a/gold/incremental.cc +++ b/gold/incremental.cc @@ -1669,9 +1669,15 @@ Output_section_incremental_inputs::write_info_blocks( if (sym->symtab_index() == -1U) continue; unsigned int flags = 0; - if (sym->source() == Symbol::FROM_OBJECT - && sym->object() == obj - && sym->is_defined()) + // If the symbol has hidden or internal visibility, we + // mark it as defined in the shared object so we don't + // try to resolve it during an incremental update. + if (sym->visibility() == elfcpp::STV_HIDDEN + || sym->visibility() == elfcpp::STV_INTERNAL) + flags = INCREMENTAL_SHLIB_SYM_DEF; + else if (sym->source() == Symbol::FROM_OBJECT + && sym->object() == obj + && sym->is_defined()) flags = INCREMENTAL_SHLIB_SYM_DEF; else if (sym->is_copied_from_dynobj() && this->symtab_->get_copy_source(sym) == dynobj)