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 | 127a6a47bd779f0e1e5274422537cdaac3ab2ca7 (patch) | |
tree | b1d514f56b11652ccafbf484cb194dd530c4461b /lib/MC/ELFObjectWriter.cpp | |
parent | e27db74a60c44d2b5d2700ecde11b1adce0d0d59 (diff) | |
download | external_llvm-127a6a47bd779f0e1e5274422537cdaac3ab2ca7.zip external_llvm-127a6a47bd779f0e1e5274422537cdaac3ab2ca7.tar.gz external_llvm-127a6a47bd779f0e1e5274422537cdaac3ab2ca7.tar.bz2 |
Use getFixupKindInfo to implement isFixupKindPCRel, ELF version.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122050 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | lib/MC/ELFObjectWriter.cpp | 48 |
1 files changed, 8 insertions, 40 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index b9804d4..da58e38 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/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(); |