summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/ELFObjectWriter.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-10-27 20:28:07 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-10-27 20:28:07 +0000
commit24c8b04d5fb4fee3745822553c035dcf9a97957b (patch)
tree21dd05e1fa17a6865ad79163215034aeff2a1164 /llvm/lib/MC/ELFObjectWriter.cpp
parente0fb32c261624cbdebc5ba6511b159814b333613 (diff)
downloadbcm5719-llvm-24c8b04d5fb4fee3745822553c035dcf9a97957b.tar.gz
bcm5719-llvm-24c8b04d5fb4fee3745822553c035dcf9a97957b.zip
Implement R_X86_64_GOTTPOFF, R_X86_64_TLSGD and R_X86_64_TPOFF32.
llvm-svn: 117481
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r--llvm/lib/MC/ELFObjectWriter.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index addda8a02b0..90473dbac9c 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -85,6 +85,9 @@ static bool RelocNeedsGOT(unsigned Type) {
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 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
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 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
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:
OpenPOWER on IntegriCloud