diff options
-rw-r--r-- | gold/ChangeLog | 6 | ||||
-rw-r--r-- | gold/incremental.cc | 12 |
2 files changed, 15 insertions, 3 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 192d6f6..52833b6 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,11 @@ 2011-07-06 Cary Coutant <ccoutant@google.com> + * gold/incremental.cc + (Output_section_incremental_inputs::write_info_blocks): Check for + hidden and internal symbols. + +2011-07-06 Cary Coutant <ccoutant@google.com> + * incremental.cc (Sized_incremental_binary::do_file_has_changed): Check disposition for startup file. (Incremental_inputs::report_command_line): Ignore diff --git a/gold/incremental.cc b/gold/incremental.cc index 710effc..cb97044 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) |