[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) {