+2019-06-28 Alan Modra <amodra@gmail.com>
+
+ * powerpc.cc (Stub_table::plt_error): New function.
+ (Stub_table::do_write): Use it.
+ (Output_data_glink::do_write): Don't segfault emitting linkage
+ table error.
+
2019-06-28 Alan Modra <amodra@gmail.com>
* powerpc.cc (Target_powerpc::Scan::get_reference_flags): Handle
return bytes;
}
+ void
+ plt_error(const Plt_stub_key& p);
+
// Write out stubs.
void
do_write(Output_file*);
}
}
+template<int size, bool big_endian>
+void
+Stub_table<size, big_endian>::plt_error(const Plt_stub_key& p)
+{
+ if (p.sym_)
+ gold_error(_("linkage table error against `%s'"),
+ p.sym_->demangled_name().c_str());
+ else
+ gold_error(_("linkage table error against `%s:[local %u]'"),
+ p.object_->name().c_str(),
+ p.locsym_);
+}
+
// Write out plt and long branch stub code.
template<int size, bool big_endian>
Address off = plt_addr - got_addr;
if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
- gold_error(_("%s: linkage table error against `%s'"),
- cs->first.object_->name().c_str(),
- cs->first.sym_->demangled_name().c_str());
+ this->plt_error(cs->first);
bool plt_load_toc = this->targ_->abiversion() < 2;
bool static_chain
Address off = plt_addr - my_addr;
if (off + 0x80008000 > 0xffffffff || (off & 3) != 0)
- gold_error(_("%s: linkage table error against `%s'"),
- ge->first->object()->name().c_str(),
+ gold_error(_("linkage table error against `%s'"),
ge->first->demangled_name().c_str());
write_insn<big_endian>(p, addis_12_12 + ha(off)), p += 4;