[ELF2] - Implemented R_X86_64_GOTTPOFF relocation
Generates single GOT entry, R_X86_64_TPOFF64 is added to RelaDyn.
Differential revision: http://reviews.llvm.org/D14621
llvm-svn: 253049
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index fe744b2..22c7ed3 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -216,18 +216,19 @@
if (Body)
Body = Body->repl();
- if (Body && Body->isTLS()) {
- if (!Target->isTlsGlobalDynamicReloc(Type))
- continue;
+ if (Body && Body->isTLS() && Target->isTlsGlobalDynamicReloc(Type)) {
if (Body->isInGot())
continue;
- Out<ELFT>::Got->addEntry(Body);
+ Out<ELFT>::Got->addDynTlsEntry(Body);
Out<ELFT>::RelaDyn->addReloc({&C, &RI});
Out<ELFT>::RelaDyn->addReloc({nullptr, nullptr});
Body->setUsedInDynamicReloc();
continue;
}
+ if ((Body && Body->isTLS()) && Type != Target->getTlsPcRelGotReloc())
+ continue;
+
bool NeedsGot = false;
bool NeedsPlt = false;
if (Body) {