bool LazyReloc = Body && Target->supportsLazyRelocations() &&
Target->relocNeedsPlt(Type, *Body);
- if (CanBePreempted) {
- unsigned GotReloc =
- Body->isTLS() ? Target->getTlsGotReloc() : Target->getGotReloc();
- if (NeedsGot)
- P->setSymbolAndType(Body->getDynamicSymbolTableIndex(),
- LazyReloc ? Target->getPltReloc() : GotReloc,
- Config->Mips64EL);
- else
- P->setSymbolAndType(Body->getDynamicSymbolTableIndex(),
- NeedsCopy ? Target->getCopyReloc()
- : Target->getDynReloc(Type),
- Config->Mips64EL);
- } else {
- P->setSymbolAndType(0, Target->getRelativeReloc(), Config->Mips64EL);
- }
+ unsigned Sym = CanBePreempted ? Body->getDynamicSymbolTableIndex() : 0;
+ unsigned Reloc;
+ if (!CanBePreempted)
+ Reloc = Target->getRelativeReloc();
+ else if (LazyReloc)
+ Reloc = Target->getPltReloc();
+ else if (NeedsGot)
+ Reloc = Body->isTLS() ? Target->getTlsGotReloc() : Target->getGotReloc();
+ else if (NeedsCopy)
+ Reloc = Target->getCopyReloc();
+ else
+ Reloc = Target->getDynReloc(Type);
+ P->setSymbolAndType(Sym, Reloc, Config->Mips64EL);
if (NeedsGot) {
if (LazyReloc)