forked from OSchip/llvm-project
parent
1b47773e1f
commit
8396dd0893
|
@ -1,54 +0,0 @@
|
|||
//===-- llvm/MC/MCObjectFormat.h - Object Format Info -----------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_MC_MCOBJECTFORMAT_H
|
||||
#define LLVM_MC_MCOBJECTFORMAT_H
|
||||
|
||||
namespace llvm {
|
||||
class MCSymbol;
|
||||
|
||||
class MCObjectFormat {
|
||||
public:
|
||||
virtual ~MCObjectFormat();
|
||||
|
||||
/// isAbsolute - Check if A - B is an absolute value
|
||||
///
|
||||
/// \param InSet - True if this expression is in a set. For example:
|
||||
/// a:
|
||||
/// ...
|
||||
/// b:
|
||||
/// tmp = a - b
|
||||
/// .long tmp
|
||||
/// \param A - LHS
|
||||
/// \param B - RHS
|
||||
virtual bool isAbsolute(bool InSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const = 0;
|
||||
};
|
||||
|
||||
class MCELFObjectFormat : public MCObjectFormat {
|
||||
public:
|
||||
virtual bool isAbsolute(bool InSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const;
|
||||
};
|
||||
|
||||
class MCMachOObjectFormat : public MCObjectFormat {
|
||||
public:
|
||||
virtual bool isAbsolute(bool InSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const;
|
||||
};
|
||||
|
||||
class MCCOFFObjectFormat : public MCObjectFormat {
|
||||
public:
|
||||
virtual bool isAbsolute(bool InSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const;
|
||||
};
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
|
@ -20,6 +20,7 @@ class MCAsmLayout;
|
|||
class MCAssembler;
|
||||
class MCFixup;
|
||||
class MCFragment;
|
||||
class MCSymbol;
|
||||
class MCSymbolRefExpr;
|
||||
class MCValue;
|
||||
class raw_ostream;
|
||||
|
@ -98,6 +99,9 @@ public:
|
|||
bool IsPCRel,
|
||||
const MCFragment *DF) const = 0;
|
||||
|
||||
virtual bool isAbsolute(bool IsSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const = 0;
|
||||
|
||||
/// Write the object file.
|
||||
///
|
||||
/// This routine is called by the assembler after layout and relaxation is
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
namespace llvm {
|
||||
class MCFixup;
|
||||
class MCInst;
|
||||
class MCObjectFormat;
|
||||
class MCObjectWriter;
|
||||
class MCSection;
|
||||
template<typename T>
|
||||
|
@ -37,8 +36,6 @@ protected: // Can only create subclasses.
|
|||
public:
|
||||
virtual ~TargetAsmBackend();
|
||||
|
||||
virtual const MCObjectFormat &getObjectFormat() const = 0;
|
||||
|
||||
/// createObjectWriter - Create a new MCObjectWriter instance for use by the
|
||||
/// assembler backend to emit the final object file.
|
||||
virtual MCObjectWriter *createObjectWriter(raw_ostream &OS) const = 0;
|
||||
|
|
|
@ -20,7 +20,6 @@ add_llvm_library(LLVMMC
|
|||
MCMachObjectTargetWriter.cpp
|
||||
MCNullStreamer.cpp
|
||||
MCObjectStreamer.cpp
|
||||
MCObjectFormat.cpp
|
||||
MCObjectWriter.cpp
|
||||
MCPureStreamer.cpp
|
||||
MCSection.cpp
|
||||
|
|
|
@ -352,6 +352,12 @@ namespace {
|
|||
return false;
|
||||
}
|
||||
|
||||
virtual bool isAbsolute(bool IsSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const {
|
||||
// On ELF A - B is absolute if A and B are in the same section.
|
||||
return &A.getSection() == &B.getSection();
|
||||
}
|
||||
|
||||
virtual bool IsFixupFullyResolved(const MCAssembler &Asm,
|
||||
const MCValue Target,
|
||||
bool IsPCRel,
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include "llvm/MC/MCAsmLayout.h"
|
||||
#include "llvm/MC/MCAssembler.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCObjectFormat.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/MC/MCValue.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
|
@ -388,8 +387,8 @@ static bool EvaluateSymbolicAdd(const MCAssembler *Asm,
|
|||
if (Asm && A && B) {
|
||||
const MCSymbol &SA = A->getSymbol();
|
||||
const MCSymbol &SB = B->getSymbol();
|
||||
const MCObjectFormat &F = Asm->getBackend().getObjectFormat();
|
||||
if (SA.isDefined() && SB.isDefined() && F.isAbsolute(InSet, SA, SB)) {
|
||||
if (SA.isDefined() && SB.isDefined() &&
|
||||
Asm->getWriter().isAbsolute(InSet, SA, SB)) {
|
||||
MCSymbolData &AD = Asm->getSymbolData(A->getSymbol());
|
||||
MCSymbolData &BD = Asm->getSymbolData(B->getSymbol());
|
||||
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
//===- lib/MC/MCObjectFormat.cpp - MCObjectFormat implementation ----------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/MC/MCObjectFormat.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
MCObjectFormat::~MCObjectFormat() {
|
||||
}
|
||||
|
||||
bool MCELFObjectFormat::isAbsolute(bool IsSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const {
|
||||
// On ELF A - B is absolute if A and B are in the same section.
|
||||
return &A.getSection() == &B.getSection();
|
||||
}
|
||||
|
||||
bool MCMachOObjectFormat::isAbsolute(bool IsSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const {
|
||||
// On MachO A - B is absolute only if in a set.
|
||||
return IsSet;
|
||||
}
|
||||
|
||||
bool MCCOFFObjectFormat::isAbsolute(bool IsSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const {
|
||||
// On COFF A - B is absolute if A and B are in the same section.
|
||||
return &A.getSection() == &B.getSection();
|
||||
}
|
|
@ -1123,6 +1123,12 @@ public:
|
|||
UndefinedSymbolData);
|
||||
}
|
||||
|
||||
bool isAbsolute(bool IsSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const {
|
||||
// On MachO A - B is absolute only if in a set.
|
||||
return IsSet;
|
||||
}
|
||||
|
||||
bool IsSymbolRefDifferenceFullyResolved(const MCAssembler &Asm,
|
||||
const MCSymbolRefExpr *A,
|
||||
const MCSymbolRefExpr *B) const {
|
||||
|
|
|
@ -187,6 +187,12 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
virtual bool isAbsolute(bool IsSet, const MCSymbol &A,
|
||||
const MCSymbol &B) const {
|
||||
// On COFF A - B is absolute if A and B are in the same section.
|
||||
return &A.getSection() == &B.getSection();
|
||||
}
|
||||
|
||||
virtual bool IsFixupFullyResolved(const MCAssembler &Asm,
|
||||
const MCValue Target,
|
||||
bool IsPCRel,
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCMachObjectWriter.h"
|
||||
#include "llvm/MC/MCObjectFormat.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCSectionELF.h"
|
||||
#include "llvm/MC/MCSectionMachO.h"
|
||||
|
@ -350,17 +349,11 @@ namespace {
|
|||
// FIXME: This should be in a separate file.
|
||||
// ELF is an ELF of course...
|
||||
class ELFARMAsmBackend : public ARMAsmBackend {
|
||||
MCELFObjectFormat Format;
|
||||
|
||||
public:
|
||||
Triple::OSType OSType;
|
||||
ELFARMAsmBackend(const Target &T, Triple::OSType _OSType)
|
||||
: ARMAsmBackend(T), OSType(_OSType) { }
|
||||
|
||||
virtual const MCObjectFormat &getObjectFormat() const {
|
||||
return Format;
|
||||
}
|
||||
|
||||
void ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
|
||||
uint64_t Value) const;
|
||||
|
||||
|
@ -389,14 +382,9 @@ void ELFARMAsmBackend::ApplyFixup(const MCFixup &Fixup, char *Data,
|
|||
|
||||
// FIXME: This should be in a separate file.
|
||||
class DarwinARMAsmBackend : public ARMAsmBackend {
|
||||
MCMachOObjectFormat Format;
|
||||
public:
|
||||
DarwinARMAsmBackend(const Target &T) : ARMAsmBackend(T) { }
|
||||
|
||||
virtual const MCObjectFormat &getObjectFormat() const {
|
||||
return Format;
|
||||
}
|
||||
|
||||
void ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
|
||||
uint64_t Value) const;
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
#include "llvm/MC/MCELFSymbolFlags.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCObjectFormat.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCSectionELF.h"
|
||||
#include "llvm/MC/MCSectionMachO.h"
|
||||
|
@ -108,18 +107,11 @@ bool MBlazeAsmBackend::WriteNopData(uint64_t Count, MCObjectWriter *OW) const {
|
|||
|
||||
namespace {
|
||||
class ELFMBlazeAsmBackend : public MBlazeAsmBackend {
|
||||
MCELFObjectFormat Format;
|
||||
|
||||
public:
|
||||
Triple::OSType OSType;
|
||||
ELFMBlazeAsmBackend(const Target &T, Triple::OSType _OSType)
|
||||
: MBlazeAsmBackend(T), OSType(_OSType) { }
|
||||
|
||||
virtual const MCObjectFormat &getObjectFormat() const {
|
||||
return Format;
|
||||
}
|
||||
|
||||
|
||||
void ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
|
||||
uint64_t Value) const;
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "PPCFixupKinds.h"
|
||||
#include "llvm/MC/MCMachObjectWriter.h"
|
||||
#include "llvm/MC/MCSectionMachO.h"
|
||||
#include "llvm/MC/MCObjectFormat.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/Object/MachOFormat.h"
|
||||
#include "llvm/Target/TargetRegistry.h"
|
||||
|
@ -82,14 +81,9 @@ public:
|
|||
// FIXME: This should be in a separate file.
|
||||
namespace {
|
||||
class DarwinPPCAsmBackend : public PPCAsmBackend {
|
||||
MCMachOObjectFormat Format;
|
||||
public:
|
||||
DarwinPPCAsmBackend(const Target &T) : PPCAsmBackend(T) { }
|
||||
|
||||
virtual const MCObjectFormat &getObjectFormat() const {
|
||||
return Format;
|
||||
}
|
||||
|
||||
void ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
|
||||
uint64_t Value) const {
|
||||
assert(0 && "UNIMP");
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
#include "llvm/MC/MCMachObjectWriter.h"
|
||||
#include "llvm/MC/MCObjectFormat.h"
|
||||
#include "llvm/MC/MCObjectWriter.h"
|
||||
#include "llvm/MC/MCSectionCOFF.h"
|
||||
#include "llvm/MC/MCSectionELF.h"
|
||||
|
@ -295,8 +294,6 @@ bool X86AsmBackend::WriteNopData(uint64_t Count, MCObjectWriter *OW) const {
|
|||
|
||||
namespace {
|
||||
class ELFX86AsmBackend : public X86AsmBackend {
|
||||
MCELFObjectFormat Format;
|
||||
|
||||
public:
|
||||
Triple::OSType OSType;
|
||||
ELFX86AsmBackend(const Target &T, Triple::OSType _OSType)
|
||||
|
@ -304,10 +301,6 @@ public:
|
|||
HasReliableSymbolDifference = true;
|
||||
}
|
||||
|
||||
virtual const MCObjectFormat &getObjectFormat() const {
|
||||
return Format;
|
||||
}
|
||||
|
||||
virtual bool doesSectionRequireSymbols(const MCSection &Section) const {
|
||||
const MCSectionELF &ES = static_cast<const MCSectionELF&>(Section);
|
||||
return ES.getFlags() & MCSectionELF::SHF_MERGE;
|
||||
|
@ -340,7 +333,6 @@ public:
|
|||
|
||||
class WindowsX86AsmBackend : public X86AsmBackend {
|
||||
bool Is64Bit;
|
||||
MCCOFFObjectFormat Format;
|
||||
|
||||
public:
|
||||
WindowsX86AsmBackend(const Target &T, bool is64Bit)
|
||||
|
@ -348,25 +340,15 @@ public:
|
|||
, Is64Bit(is64Bit) {
|
||||
}
|
||||
|
||||
virtual const MCObjectFormat &getObjectFormat() const {
|
||||
return Format;
|
||||
}
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
|
||||
return createWinCOFFObjectWriter(OS, Is64Bit);
|
||||
}
|
||||
};
|
||||
|
||||
class DarwinX86AsmBackend : public X86AsmBackend {
|
||||
MCMachOObjectFormat Format;
|
||||
|
||||
public:
|
||||
DarwinX86AsmBackend(const Target &T)
|
||||
: X86AsmBackend(T) { }
|
||||
|
||||
virtual const MCObjectFormat &getObjectFormat() const {
|
||||
return Format;
|
||||
}
|
||||
};
|
||||
|
||||
class DarwinX86_32AsmBackend : public DarwinX86AsmBackend {
|
||||
|
|
Loading…
Reference in New Issue