diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-24 21:57:39 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-24 21:57:39 +0000 |
commit | 9f75d5df0b4412e3204946a04b0695c36dab24ee (patch) | |
tree | 2c2c31fccc63ad1755299b7da8540620b92ddd64 /llvm/lib/MC/ELFObjectWriter.cpp | |
parent | 72b1968d927bc8f13bb58914b1d7bbdc826aba67 (diff) | |
download | bcm5719-llvm-9f75d5df0b4412e3204946a04b0695c36dab24ee.tar.gz bcm5719-llvm-9f75d5df0b4412e3204946a04b0695c36dab24ee.zip |
Behave a bit more like gnu as and use the symbol (instead of the section)
for any relocation to a symbol defined in a tls section.
llvm-svn: 120121
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 7c322f3577e..3b649dbbd25 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -718,10 +718,17 @@ const MCSymbol *ELFObjectWriter::SymbolToReloc(const MCAssembler &Asm, const MCSectionELF &Section = static_cast<const MCSectionELF&>(ASymbol.getSection()); + const SectionKind secKind = Section.getKind(); - if (Section.getKind().isBSS()) + if (secKind.isBSS()) return NULL; + if (secKind.isThreadLocal()) { + if (Renamed) + return Renamed; + return &Symbol; + } + MCSymbolRefExpr::VariantKind Kind = Target.getSymA()->getKind(); const MCSectionELF &Sec2 = static_cast<const MCSectionELF&>(F.getParent()->getSection()); @@ -729,8 +736,7 @@ const MCSymbol *ELFObjectWriter::SymbolToReloc(const MCAssembler &Asm, if (&Sec2 != &Section && (Kind == MCSymbolRefExpr::VK_PLT || Kind == MCSymbolRefExpr::VK_GOTPCREL || - Kind == MCSymbolRefExpr::VK_GOTOFF || - Kind == MCSymbolRefExpr::VK_NTPOFF)) { + Kind == MCSymbolRefExpr::VK_GOTOFF)) { if (Renamed) return Renamed; return &Symbol; |