diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-24 18:51:21 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-24 18:51:21 +0000 |
commit | bf8209daf875fa533a379290a91d01be5152597d (patch) | |
tree | 5d31263a56a6ed2d2512da57a03fabe5afe92084 /lib/MC/MCELFStreamer.cpp | |
parent | 5c7106b2e375edca4b63ab48b218654f978698a4 (diff) |
Fix and add tests for all cases in x86 and x86_64 where gnu as implicitly
sets the type of a symbol to STT_TLS.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120100 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCELFStreamer.cpp')
-rw-r--r-- | lib/MC/MCELFStreamer.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/lib/MC/MCELFStreamer.cpp b/lib/MC/MCELFStreamer.cpp index 1eddda9fef..ec28a902a2 100644 --- a/lib/MC/MCELFStreamer.cpp +++ b/lib/MC/MCELFStreamer.cpp @@ -467,12 +467,20 @@ void MCELFStreamer::fixSymbolsInTLSFixups(const MCExpr *expr) { case MCExpr::SymbolRef: { const MCSymbolRefExpr &symRef = *cast<MCSymbolRefExpr>(expr); - MCSymbolRefExpr::VariantKind kind = symRef.getKind(); - if (kind != MCSymbolRefExpr::VK_TLSGD && - kind != MCSymbolRefExpr::VK_TLSLD && - kind != MCSymbolRefExpr::VK_TLSLDM && - kind != MCSymbolRefExpr::VK_ARM_TLSGD) + switch (symRef.getKind()) { + default: return; + case MCSymbolRefExpr::VK_NTPOFF: + case MCSymbolRefExpr::VK_GOTNTPOFF: + case MCSymbolRefExpr::VK_TLSGD: + case MCSymbolRefExpr::VK_TLSLDM: + case MCSymbolRefExpr::VK_TPOFF: + case MCSymbolRefExpr::VK_DTPOFF: + case MCSymbolRefExpr::VK_GOTTPOFF: + case MCSymbolRefExpr::VK_TLSLD: + case MCSymbolRefExpr::VK_ARM_TLSGD: + break; + } MCSymbolData &SD = getAssembler().getOrCreateSymbolData(symRef.getSymbol()); SetType(SD, ELF::STT_TLS); break; |