+++ /dev/null
-//===-- 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
class MCAssembler;
class MCFixup;
class MCFragment;
+class MCSymbol;
class MCSymbolRefExpr;
class MCValue;
class raw_ostream;
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
namespace llvm {
class MCFixup;
class MCInst;
-class MCObjectFormat;
class MCObjectWriter;
class MCSection;
template<typename T>
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;
MCMachObjectTargetWriter.cpp
MCNullStreamer.cpp
MCObjectStreamer.cpp
- MCObjectFormat.cpp
MCObjectWriter.cpp
MCPureStreamer.cpp
MCSection.cpp
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,
#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"
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());
+++ /dev/null
-//===- 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();
-}
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 {
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,
#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"
// 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;
// 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;
#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"
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;
#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"
// 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");
#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"
namespace {
class ELFX86AsmBackend : public X86AsmBackend {
- MCELFObjectFormat Format;
-
public:
Triple::OSType OSType;
ELFX86AsmBackend(const Target &T, Triple::OSType _OSType)
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;
class WindowsX86AsmBackend : public X86AsmBackend {
bool Is64Bit;
- MCCOFFObjectFormat Format;
public:
WindowsX86AsmBackend(const Target &T, bool is64Bit)
, 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 {