If a relocation points to a dynamic object we can ignore it, since we cannot gc an already existing .so file. The attached patch produces an identical chromium binary, but does so a bit faster (see the attached perf logs). Using Relobj also helps me in my patch for gcing parts of SHF_MERGE sections. Cheers, Rafael 2015-04-22 Rafael Ávila de Espíndola * gc.cc (Garbage_collection::do_transitive_closure): Use Rel_section_id. * gc.h (Garbage_collection): Use Rel_section_id. (is_section_garbage): Use Relobj. (add_cident_section): Use Relobj. (add_reference): Use Relobj and Rel_section_id. (gc_process_relocs): Ignore non Relobj objects. * object.cc (do_layout): Use Rel_section_id. * object.h (Rel_section_id): New. * powerpc.cc (Powerpc_relobj): Use Rel_section_id. (add_reference): Use Relobj and Rel_section_id. (do_gc_add_reference): Use Relobj. (gc_process_relocs): Use Relobj. (do_gc_mark_symbol): Use Rel_section_id. * symtab.cc (gc_mark_symbol): Use Rel_section_id. * symtab.h (relobj): New. * target.h (gc_add_reference): Use Relobj. (do_gc_add_reference): Use Relobj.