Index: symtab.cc =================================================================== RCS file: /cvs/src/src/gold/symtab.cc,v retrieving revision 1.157 diff -u -u -p -r1.157 symtab.cc --- symtab.cc 8 Jul 2011 23:49:11 -0000 1.157 +++ symtab.cc 22 Jul 2011 21:40:19 -0000 @@ -605,7 +605,8 @@ void Symbol_table::gc_mark_symbol_for_shlib(Symbol* sym) { if (!sym->is_from_dynobj() - && sym->is_externally_visible()) + && sym->is_externally_visible() + && !sym->is_forced_local()) { //Add the object and section to the work list. Relobj* obj = static_cast(sym->object()); @@ -1238,15 +1239,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();