Add support for R_386_TLS_GD, R_386_TLS_LE_32, R_386_TLS_IE and R_386_TLS_LE.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117494 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp
index 90473db..1e4484d 100644
--- a/lib/MC/ELFObjectWriter.cpp
+++ b/lib/MC/ELFObjectWriter.cpp
@@ -79,6 +79,7 @@
 }
 
 static bool RelocNeedsGOT(unsigned Type) {
+  // FIXME: Can we use the VariantKind?
   switch (Type) {
   default:
     return false;
@@ -88,6 +89,10 @@
   case ELF::R_X86_64_TPOFF32:
   case ELF::R_X86_64_TLSGD:
   case ELF::R_X86_64_GOTTPOFF:
+  case ELF::R_386_TLS_GD:
+  case ELF::R_386_TLS_LE_32:
+  case ELF::R_386_TLS_IE:
+  case ELF::R_386_TLS_LE:
     return true;
   }
 }
@@ -766,6 +771,18 @@
         case MCSymbolRefExpr::VK_GOTOFF:
           Type = ELF::R_386_GOTOFF;
           break;
+        case MCSymbolRefExpr::VK_TLSGD:
+          Type = ELF::R_386_TLS_GD;
+          break;
+        case MCSymbolRefExpr::VK_TPOFF:
+          Type = ELF::R_386_TLS_LE_32;
+          break;
+        case MCSymbolRefExpr::VK_INDNTPOFF:
+          Type = ELF::R_386_TLS_IE;
+          break;
+        case MCSymbolRefExpr::VK_NTPOFF:
+          Type = ELF::R_386_TLS_LE;
+          break;
         }
         break;
       case FK_Data_2: Type = ELF::R_386_16; break;