ELF: Move PLT relocation handler to one place. NFC.
llvm-svn: 259470
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index a09a570..1371a96 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -324,25 +324,36 @@
continue;
}
+ // If a relocation needs PLT, we create a PLT and a GOT slot
+ // for the symbol.
+ if (Body && Target->needsPlt(Type, *Body)) {
+ if (Body->isInPlt())
+ continue;
+ Out<ELFT>::Plt->addEntry(Body);
+
+ if (Target->UseLazyBinding) {
+ Out<ELFT>::GotPlt->addEntry(Body);
+ Out<ELFT>::RelaPlt->addReloc({&C, &RI});
+ } else {
+ if (Body->isInGot())
+ continue;
+ Out<ELFT>::Got->addEntry(Body);
+ Out<ELFT>::RelaDyn->addReloc({&C, &RI});
+ }
+
+ if (canBePreempted(Body, /*NeedsGot=*/true))
+ Body->setUsedInDynamicReloc();
+ continue;
+ }
+
bool NeedsGot = false;
- bool NeedsPlt = false;
if (Body) {
- NeedsPlt = Target->needsPlt(Type, *Body);
- if (NeedsPlt) {
- if (Body->isInPlt())
- continue;
- Out<ELFT>::Plt->addEntry(Body);
- }
NeedsGot = Target->needsGot(Type, *Body);
if (NeedsGot) {
- if (NeedsPlt && Target->UseLazyBinding) {
- Out<ELFT>::GotPlt->addEntry(Body);
- } else {
- if (Body->isInGot())
- continue;
- Out<ELFT>::Got->addEntry(Body);
- }
+ if (Body->isInGot())
+ continue;
+ Out<ELFT>::Got->addEntry(Body);
}
}
@@ -383,10 +394,7 @@
if (CBP)
Body->setUsedInDynamicReloc();
- if (NeedsPlt && Target->UseLazyBinding)
- Out<ELFT>::RelaPlt->addReloc({&C, &RI});
- else
- Out<ELFT>::RelaDyn->addReloc({&C, &RI});
+ Out<ELFT>::RelaDyn->addReloc({&C, &RI});
}
}