From f48b5fb76bf64c945d178839a41b835ee67dd12d Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Wed, 6 Jul 2011 22:26:37 +0000 Subject: [PATCH] * gold/incremental.cc (Output_section_incremental_inputs::write_info_blocks): Check for hidden and internal symbols. --- gold/ChangeLog | 6 ++++++ gold/incremental.cc | 12 +++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) 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) -- 2.30.2