powerpc gold, work around pr17670
authorAlan Modra <amodra@gmail.com>
Wed, 3 Dec 2014 05:47:23 +0000 (16:17 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 3 Dec 2014 22:53:59 +0000 (09:23 +1030)
commit1611bc4afb0f08f0aff64ec355b8d68e9f4f0a73
tree6fbb005db969d5584029e9869561afd960a61fd7
parent858339f2b7aafe199c1cd07fc8d4a7c8130aa285
powerpc gold, work around pr17670

pr17670 is about an assert triggering on a branch to an undefined
weak symbol, the symbol being undefined due to dropping its comdat
group section.  (Well sort of.  The symbol is actually defined in
an .opd section which isn't part of the group, but the code section
the opd entry points at is dropped.)  So don't assert.
Also, don't make long branch stubs to such symbols, and arrange to
have target-reloc.h code warn when applying relocs that use the sym.

PR 17670
* symtab.cc (Symbol::set_undefined): Remove assertion.
* powerpc.cc (Target_powerpc::symval_for_branch): Don't assert
on symbols defined in discarded sections, instead return false.
Rearrange params, update all callers.
(Target_powerpc::Branch_info::make_stub): Don't make stubs for
branches to syms in discarded sections.
(Global_symbol_visitor_opd::operator()): Set discarded opd syms
undefined and flag as discarded.
(Target_powerpc::Relocate::relocate): Localize variable.
gold/ChangeLog
gold/powerpc.cc
gold/symtab.cc