summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/ELFObjectWriter.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-10-27 21:23:52 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-10-27 21:23:52 +0000
commitf8537165bd32cf43f53e131e1c4031a4cd7312bf (patch)
tree4c7152196806d134c01216de0eeed86c31b6d02c /llvm/lib/MC/ELFObjectWriter.cpp
parent7b9da4a550341d29056fadec8b0491e73b07871b (diff)
downloadbcm5719-llvm-f8537165bd32cf43f53e131e1c4031a4cd7312bf.tar.gz
bcm5719-llvm-f8537165bd32cf43f53e131e1c4031a4cd7312bf.zip
Add support for R_386_TLS_GD, R_386_TLS_LE_32, R_386_TLS_IE and R_386_TLS_LE.
llvm-svn: 117494
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r--llvm/lib/MC/ELFObjectWriter.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index 90473dbac9c..1e4484d91b8 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -79,6 +79,7 @@ static bool isFixupKindX86PCRel(unsigned Kind) {
}
static bool RelocNeedsGOT(unsigned Type) {
+ // FIXME: Can we use the VariantKind?
switch (Type) {
default:
return false;
@@ -88,6 +89,10 @@ static bool RelocNeedsGOT(unsigned Type) {
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 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
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;
OpenPOWER on IntegriCloud