Stub out explicit MCELFObjectTargetWriter interface.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122067 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2010-12-17 17:45:22 +00:00
parent 1f95a9db4b
commit 6024c97ffa
7 changed files with 54 additions and 6 deletions

View File

@ -14,11 +14,21 @@
#include "llvm/Support/DataTypes.h" #include "llvm/Support/DataTypes.h"
namespace llvm { namespace llvm {
class MCELFObjectTargetWriter {
protected:
MCELFObjectTargetWriter();
public:
virtual ~MCELFObjectTargetWriter();
};
/// \brief Construct a new ELF writer instance. /// \brief Construct a new ELF writer instance.
/// ///
/// \param MOTW - The target specific ELF writer subclass.
/// \param OS - The stream to write to. /// \param OS - The stream to write to.
/// \returns The constructed object writer. /// \returns The constructed object writer.
MCObjectWriter *createELFObjectWriter(raw_ostream &OS, bool is64Bit, MCObjectWriter *createELFObjectWriter(MCELFObjectTargetWriter *MOTW,
raw_ostream &OS, bool is64Bit,
Triple::OSType OSType, uint16_t EMachine, Triple::OSType OSType, uint16_t EMachine,
bool IsLittleEndian, bool IsLittleEndian,
bool HasRelocationAddend); bool HasRelocationAddend);

View File

@ -8,6 +8,7 @@ add_llvm_library(LLVMMC
MCCodeEmitter.cpp MCCodeEmitter.cpp
MCContext.cpp MCContext.cpp
MCDisassembler.cpp MCDisassembler.cpp
MCELFObjectTargetWriter.cpp
MCELFStreamer.cpp MCELFStreamer.cpp
MCExpr.cpp MCExpr.cpp
MCInst.cpp MCInst.cpp

View File

@ -1467,7 +1467,8 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm,
} }
} }
MCObjectWriter *llvm::createELFObjectWriter(raw_ostream &OS, MCObjectWriter *llvm::createELFObjectWriter(MCELFObjectTargetWriter *MOTW,
raw_ostream &OS,
bool Is64Bit, bool Is64Bit,
Triple::OSType OSType, Triple::OSType OSType,
uint16_t EMachine, uint16_t EMachine,

View File

@ -0,0 +1,18 @@
//===-- MCELFObjectTargetWriter.cpp - ELF Target Writer Subclass ----------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "llvm/MC/MCELFObjectWriter.h"
using namespace llvm;
MCELFObjectTargetWriter::MCELFObjectTargetWriter() {
}
MCELFObjectTargetWriter::~MCELFObjectTargetWriter() {
}

View File

@ -37,6 +37,11 @@ public:
/*UseAggressiveSymbolFolding=*/true) {} /*UseAggressiveSymbolFolding=*/true) {}
}; };
class ARMELFObjectWriter : public MCELFObjectTargetWriter {
public:
ARMELFObjectWriter() : MCELFObjectTargetWriter() {}
};
class ARMAsmBackend : public TargetAsmBackend { class ARMAsmBackend : public TargetAsmBackend {
bool isThumbMode; // Currently emitting Thumb code. bool isThumbMode; // Currently emitting Thumb code.
public: public:
@ -348,7 +353,8 @@ public:
uint64_t Value) const; uint64_t Value) const;
MCObjectWriter *createObjectWriter(raw_ostream &OS) const { MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
return createELFObjectWriter(OS, /*Is64Bit=*/false, return createELFObjectWriter(new ARMELFObjectWriter(), OS,
/*Is64Bit=*/false,
OSType, ELF::EM_ARM, OSType, ELF::EM_ARM,
/*IsLittleEndian=*/true, /*IsLittleEndian=*/true,
/*HasRelocationAddend=*/false); /*HasRelocationAddend=*/false);

View File

@ -42,6 +42,11 @@ static unsigned getFixupKindSize(unsigned Kind) {
namespace { namespace {
class MBlazeELFObjectWriter : public MCELFObjectTargetWriter {
public:
MBlazeELFObjectWriter() : MCELFObjectTargetWriter() {}
};
class MBlazeAsmBackend : public TargetAsmBackend { class MBlazeAsmBackend : public TargetAsmBackend {
public: public:
MBlazeAsmBackend(const Target &T) MBlazeAsmBackend(const Target &T)
@ -117,7 +122,8 @@ public:
uint64_t Value) const; uint64_t Value) const;
MCObjectWriter *createObjectWriter(raw_ostream &OS) const { MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
return createELFObjectWriter(OS,/*Is64Bit=*/false, return createELFObjectWriter(new MBlazeELFObjectWriter(),
OS,/*Is64Bit=*/false,
OSType, ELF::EM_MBLAZE, OSType, ELF::EM_MBLAZE,
/*IsLittleEndian=*/false, /*IsLittleEndian=*/false,
/*HasRelocationAddend=*/true); /*HasRelocationAddend=*/true);

View File

@ -55,6 +55,11 @@ public:
/*UseAggressiveSymbolFolding=*/Is64Bit) {} /*UseAggressiveSymbolFolding=*/Is64Bit) {}
}; };
class X86ELFObjectWriter : public MCELFObjectTargetWriter {
public:
X86ELFObjectWriter() : MCELFObjectTargetWriter() {}
};
class X86AsmBackend : public TargetAsmBackend { class X86AsmBackend : public TargetAsmBackend {
public: public:
X86AsmBackend(const Target &T) X86AsmBackend(const Target &T)
@ -310,7 +315,8 @@ public:
: ELFX86AsmBackend(T, OSType) {} : ELFX86AsmBackend(T, OSType) {}
MCObjectWriter *createObjectWriter(raw_ostream &OS) const { MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
return createELFObjectWriter(OS, /*Is64Bit=*/false, return createELFObjectWriter(new X86ELFObjectWriter(), OS,
/*Is64Bit=*/false,
OSType, ELF::EM_386, OSType, ELF::EM_386,
/*IsLittleEndian=*/true, /*IsLittleEndian=*/true,
/*HasRelocationAddend=*/false); /*HasRelocationAddend=*/false);
@ -323,7 +329,7 @@ public:
: ELFX86AsmBackend(T, OSType) {} : ELFX86AsmBackend(T, OSType) {}
MCObjectWriter *createObjectWriter(raw_ostream &OS) const { MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
return createELFObjectWriter(OS, /*Is64Bit=*/true, return createELFObjectWriter(new X86ELFObjectWriter(), OS, /*Is64Bit=*/true,
OSType, ELF::EM_X86_64, OSType, ELF::EM_X86_64,
/*IsLittleEndian=*/true, /*IsLittleEndian=*/true,
/*HasRelocationAddend=*/true); /*HasRelocationAddend=*/true);