Implement R_X86_64_GOTTPOFF, R_X86_64_TLSGD and R_X86_64_TPOFF32.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117481 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp
index addda8a..90473db 100644
--- a/lib/MC/ELFObjectWriter.cpp
+++ b/lib/MC/ELFObjectWriter.cpp
@@ -85,6 +85,9 @@
   case ELF::R_X86_64_GOT32:
   case ELF::R_X86_64_PLT32:
   case ELF::R_X86_64_GOTPCREL:
+  case ELF::R_X86_64_TPOFF32:
+  case ELF::R_X86_64_TLSGD:
+  case ELF::R_X86_64_GOTTPOFF:
     return true;
   }
 }
@@ -687,6 +690,12 @@
       case llvm::MCSymbolRefExpr::VK_GOTPCREL:
         Type = ELF::R_X86_64_GOTPCREL;
         break;
+      case MCSymbolRefExpr::VK_GOTTPOFF:
+        Type = ELF::R_X86_64_GOTTPOFF;
+        break;
+      case MCSymbolRefExpr::VK_TLSGD:
+        Type = ELF::R_X86_64_TLSGD;
+        break;
       }
     } else {
       switch ((unsigned)Fixup.getKind()) {
@@ -707,6 +716,9 @@
         case MCSymbolRefExpr::VK_GOTPCREL:
           Type = ELF::R_X86_64_GOTPCREL;
           break;
+        case MCSymbolRefExpr::VK_TPOFF:
+          Type = ELF::R_X86_64_TPOFF32;
+          break;
         }
         break;
       case FK_Data_4: