summaryrefslogtreecommitdiff
path: root/gold/incremental.cc
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2011-07-06 22:26:37 +0000
committerCary Coutant <ccoutant@google.com>2011-07-06 22:26:37 +0000
commitf48b5fb76bf64c945d178839a41b835ee67dd12d (patch)
treeadf52c712dcb8116452ac03c587a4f65c9bf5628 /gold/incremental.cc
parente3d961fe96743c7f02bf714ec159f77b2be47864 (diff)
* gold/incremental.cc
(Output_section_incremental_inputs::write_info_blocks): Check for hidden and internal symbols.
Diffstat (limited to 'gold/incremental.cc')
-rw-r--r--gold/incremental.cc12
1 files changed, 9 insertions, 3 deletions
diff --git a/gold/incremental.cc b/gold/incremental.cc
index 710effc351..cb97044a3d 100644
--- a/gold/incremental.cc
+++ b/gold/incremental.cc
@@ -1669,9 +1669,15 @@ Output_section_incremental_inputs<size, big_endian>::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)