From c677e790e5e8ff986ca84229f37751d26bf87f45 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 21 Dec 2011 14:26:29 +0000 Subject: [PATCH] Small refactoring so that RelocNeedsGOT can stay in the target independent side when the target specific bits are moved to the Target directory. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147053 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/ELFObjectWriter.cpp | 27 ++++++++++----------------- lib/MC/ELFObjectWriter.h | 13 ++++++------- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index 92aad94f17f..fa5321d3a74 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -447,6 +447,10 @@ void ELFObjectWriter::RecordRelocation(const MCAssembler &Asm, FixedValue = Value; unsigned Type = GetRelocType(Target, Fixup, IsPCRel, (RelocSymbol != 0), Addend); + MCSymbolRefExpr::VariantKind Modifier = Target.isAbsolute() ? + MCSymbolRefExpr::VK_None : Target.getSymA()->getKind(); + if (RelocNeedsGOT(Modifier)) + NeedsGOT = true; uint64_t RelocOffset = Layout.getFragmentOffset(Fragment) + Fixup.getOffset(); @@ -1385,16 +1389,8 @@ unsigned ARMELFObjectWriter::GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend) { - MCSymbolRefExpr::VariantKind Modifier = Target.isAbsolute() ? - MCSymbolRefExpr::VK_None : Target.getSymA()->getKind(); - - unsigned Type = GetRelocTypeInner(Target, Fixup, IsPCRel); - - if (RelocNeedsGOT(Modifier)) - NeedsGOT = true; - - return Type; + int64_t Addend) const { + return GetRelocTypeInner(Target, Fixup, IsPCRel); } unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target, @@ -1536,7 +1532,7 @@ unsigned PPCELFObjectWriter::GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend) { + int64_t Addend) const { // determine the type of the relocation unsigned Type; if (IsPCRel) { @@ -1606,7 +1602,7 @@ unsigned MBlazeELFObjectWriter::GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend) { + int64_t Addend) const { // determine the type of the relocation unsigned Type; if (IsPCRel) { @@ -1652,7 +1648,7 @@ unsigned X86ELFObjectWriter::GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend) { + int64_t Addend) const { // determine the type of the relocation MCSymbolRefExpr::VariantKind Modifier = Target.isAbsolute() ? @@ -1822,9 +1818,6 @@ unsigned X86ELFObjectWriter::GetRelocType(const MCValue &Target, } } - if (RelocNeedsGOT(Modifier)) - NeedsGOT = true; - return Type; } @@ -1862,7 +1855,7 @@ unsigned MipsELFObjectWriter::GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend) { + int64_t Addend) const { // determine the type of the relocation unsigned Type = (unsigned)ELF::R_MIPS_NONE; unsigned Kind = (unsigned)Fixup.getKind(); diff --git a/lib/MC/ELFObjectWriter.h b/lib/MC/ELFObjectWriter.h index 9adf0b1bd0f..3ba722c2703 100644 --- a/lib/MC/ELFObjectWriter.h +++ b/lib/MC/ELFObjectWriter.h @@ -351,7 +351,7 @@ class ELFObjectWriter : public MCObjectWriter { protected: virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend) = 0; + int64_t Addend) const = 0; virtual void adjustFixupOffset(const MCFixup &Fixup, uint64_t &RelocOffset) {} }; @@ -368,7 +368,7 @@ class ELFObjectWriter : public MCObjectWriter { protected: virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend); + int64_t Addend) const; }; @@ -395,11 +395,10 @@ class ELFObjectWriter : public MCObjectWriter { virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend); + int64_t Addend) const; private: unsigned GetRelocTypeInner(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel) const; - }; //===- PPCELFObjectWriter -------------------------------------------===// @@ -414,7 +413,7 @@ class ELFObjectWriter : public MCObjectWriter { protected: virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend); + int64_t Addend) const; virtual void adjustFixupOffset(const MCFixup &Fixup, uint64_t &RelocOffset); }; @@ -430,7 +429,7 @@ class ELFObjectWriter : public MCObjectWriter { protected: virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend); + int64_t Addend) const; }; //===- MipsELFObjectWriter -------------------------------------------===// @@ -453,7 +452,7 @@ class ELFObjectWriter : public MCObjectWriter { virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, bool IsPCRel, bool IsRelocWithSymbol, - int64_t Addend); + int64_t Addend) const; }; } -- 2.34.1