diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2015-03-06 13:49:05 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2015-03-06 13:49:05 +0000 |
commit | 618c67a018ec523a2a3116421bd2a690cf696564 (patch) | |
tree | 85a02baa5266e003d540183cf6fff637472d515b /llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp | |
parent | 52b1391df61bd2ccfcbac2f354fec57cd4e17591 (diff) | |
download | llvm-618c67a018ec523a2a3116421bd2a690cf696564.zip llvm-618c67a018ec523a2a3116421bd2a690cf696564.tar.gz llvm-618c67a018ec523a2a3116421bd2a690cf696564.tar.bz2 |
[AsmPrinter][TLOF] 32-bit MachO support for replacing GOT equivalents
Add MachO 32-bit (i.e. arm and x86) support for replacing global GOT equivalent
symbol accesses. Unlike 64-bit targets, there's no GOTPCREL relocation, and
access through a non_lazy_symbol_pointers section is used instead.
-- before
_extgotequiv:
.long _extfoo
_delta:
.long _extgotequiv-_delta
-- after
_delta:
.long L_extfoo$non_lazy_ptr-_delta
.section __IMPORT,__pointers,non_lazy_symbol_pointers
L_extfoo$non_lazy_ptr:
.indirect_symbol _extfoo
.long 0
llvm-svn: 231475
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp index 3c0a342..8ff58e9 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp @@ -13,6 +13,7 @@ #include "llvm/MC/MCContext.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCStreamer.h" +#include "llvm/MC/MCValue.h" #include "llvm/Support/Dwarf.h" using namespace llvm; using namespace dwarf; @@ -25,7 +26,6 @@ void AArch64_ELFTargetObjectFile::Initialize(MCContext &Ctx, AArch64_MachoTargetObjectFile::AArch64_MachoTargetObjectFile() : TargetLoweringObjectFileMachO() { - SupportIndirectSymViaGOTPCRel = true; SupportGOTPCRelWithOffset = false; } @@ -58,7 +58,10 @@ MCSymbol *AArch64_MachoTargetObjectFile::getCFIPersonalitySymbol( } const MCExpr *AArch64_MachoTargetObjectFile::getIndirectSymViaGOTPCRel( - const MCSymbol *Sym, int64_t Offset, MCStreamer &Streamer) const { + const MCSymbol *Sym, const MCValue &MV, int64_t Offset, + MachineModuleInfo *MMI, MCStreamer &Streamer) const { + assert((Offset+MV.getConstant() == 0) && + "Arch64 does not support GOT PC rel with extra offset"); // On ARM64 Darwin, we can reference symbols with foo@GOT-., which // is an indirect pc-relative reference. const MCExpr *Res = |