summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-10-06 16:23:36 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-10-06 16:23:36 +0000
commit8f3d2c9058a4590b58aa24d15ca1dfe05e64d3e9 (patch)
treed09921189aec6efd64ee074429f1cdb955a9fd12 /llvm/lib
parentaadc5596f10818af6a03274a8f490a131d21fe75 (diff)
downloadbcm5719-llvm-8f3d2c9058a4590b58aa24d15ca1dfe05e64d3e9.tar.gz
bcm5719-llvm-8f3d2c9058a4590b58aa24d15ca1dfe05e64d3e9.zip
Correctly handle GOTPCREL relocations.
llvm-svn: 115793
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/MC/ELFObjectWriter.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index 9f9681ae3ef..da3e7efda8b 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -544,12 +544,12 @@ static bool ShouldRelocOnSymbol(const MCSymbolData &SD,
if (SD.isExternal())
return true;
- const llvm::MCSymbolRefExpr& Ref = *Target.getSymA();
+ MCSymbolRefExpr::VariantKind Kind = Target.getSymA()->getKind();
const MCSectionELF &Sec2 =
static_cast<const MCSectionELF&>(F.getParent()->getSection());
- if (Ref.getKind() == MCSymbolRefExpr::VK_PLT &&
- &Sec2 != &Section)
+ if (&Sec2 != &Section &&
+ (Kind == MCSymbolRefExpr::VK_PLT || Kind == MCSymbolRefExpr::VK_GOTPCREL))
return true;
return false;
@@ -648,6 +648,9 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
case MCSymbolRefExpr::VK_GOT:
Type = ELF::R_X86_64_GOT32;
break;
+ case llvm::MCSymbolRefExpr::VK_GOTPCREL:
+ Type = ELF::R_X86_64_GOTPCREL;
+ break;
default:
llvm_unreachable("Unimplemented");
}
OpenPOWER on IntegriCloud