aboutsummaryrefslogtreecommitdiffstats
path: root/lib/MC/ELFObjectWriter.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-12-17 07:28:17 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-12-17 07:28:17 +0000
commit127a6a47bd779f0e1e5274422537cdaac3ab2ca7 (patch)
treeb1d514f56b11652ccafbf484cb194dd530c4461b /lib/MC/ELFObjectWriter.cpp
parente27db74a60c44d2b5d2700ecde11b1adce0d0d59 (diff)
downloadexternal_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.cpp48
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();