diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-17 07:28:17 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-17 07:28:17 +0000 |
commit | df63335844fbc54de05672d7c288a3d9a7c1c2c0 (patch) | |
tree | 4f5839402e9fa56d12f25045c5bc2b8e5a3a0a55 /llvm/lib/MC/ELFObjectWriter.cpp | |
parent | 80c4e0bf6f85563505e8c85f34ea39f406395348 (diff) | |
download | bcm5719-llvm-df63335844fbc54de05672d7c288a3d9a7c1c2c0.tar.gz bcm5719-llvm-df63335844fbc54de05672d7c288a3d9a7c1c2c0.zip |
Use getFixupKindInfo to implement isFixupKindPCRel, ELF version.
llvm-svn: 122050
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 48 |
1 files changed, 8 insertions, 40 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index b9804d474b3..da58e38df9f 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -87,6 +87,13 @@ static bool RelocNeedsGOT(MCSymbolRefExpr::VariantKind Variant) { } } +static bool isFixupKindPCRel(const MCAssembler &Asm, unsigned Kind) { + const MCFixupKindInfo &FKI = + Asm.getBackend().getFixupKindInfo((MCFixupKind) Kind); + + return FKI.Flags & MCFixupKindInfo::FKF_IsPCRel; +} + namespace { class ELFObjectWriter : public MCObjectWriter { protected: @@ -361,8 +368,6 @@ namespace { virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, int64_t Addend) = 0; - - virtual bool isFixupKindPCRel(unsigned Kind) const = 0; }; //===- X86ELFObjectWriter -------------------------------------------===// @@ -378,19 +383,6 @@ namespace { virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, int64_t Addend); - - virtual bool isFixupKindPCRel(unsigned Kind) const { - switch (Kind) { - default: - return false; - case FK_PCRel_1: - case FK_PCRel_2: - case FK_PCRel_4: - case X86::reloc_riprel_4byte: - case X86::reloc_riprel_4byte_movq_load: - return true; - } - } }; @@ -407,19 +399,6 @@ namespace { virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, int64_t Addend); - virtual bool isFixupKindPCRel(unsigned Kind) const { - switch (Kind) { - default: - return false; - case FK_PCRel_1: - case FK_PCRel_2: - case FK_PCRel_4: - case ARM::fixup_arm_ldst_pcrel_12: - case ARM::fixup_arm_pcrel_10: - case ARM::fixup_arm_branch: - return true; - } - } }; //===- MBlazeELFObjectWriter -------------------------------------------===// @@ -435,17 +414,6 @@ namespace { virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, int64_t Addend); - - virtual bool isFixupKindPCRel(unsigned Kind) const { - switch (Kind) { - default: - return false; - case FK_PCRel_1: - case FK_PCRel_2: - case FK_PCRel_4: - return true; - } - } }; } @@ -777,7 +745,7 @@ void ELFObjectWriter::RecordRelocation(const MCAssembler &Asm, int64_t Value = Target.getConstant(); const MCSymbol *RelocSymbol = NULL; - bool IsPCRel = isFixupKindPCRel(Fixup.getKind()); + bool IsPCRel = isFixupKindPCRel(Asm, Fixup.getKind()); if (!Target.isAbsolute()) { const MCSymbol &Symbol = Target.getSymA()->getSymbol(); const MCSymbol &ASymbol = Symbol.AliasedSymbol(); |