mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
Split the object streamer callback in one per file format.
There are two main advantages to doing this * Targets that only need to handle one of the formats specially don't have to worry about the others. For example, x86 now only registers a constructor for the COFF streamer. * Changes to the arguments passed to one format constructor will not impact the other formats. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232699 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dd08f96ac7
commit
c7c4c36694
@ -748,20 +748,6 @@ MCStreamer *createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
|||||||
bool isVerboseAsm, bool useDwarfDirectory,
|
bool isVerboseAsm, bool useDwarfDirectory,
|
||||||
MCInstPrinter *InstPrint, MCCodeEmitter *CE,
|
MCInstPrinter *InstPrint, MCCodeEmitter *CE,
|
||||||
MCAsmBackend *TAB, bool ShowInst);
|
MCAsmBackend *TAB, bool ShowInst);
|
||||||
|
|
||||||
/// Create a machine code streamer which will generate Mach-O format object
|
|
||||||
/// files.
|
|
||||||
///
|
|
||||||
/// Takes ownership of \p TAB and \p CE.
|
|
||||||
MCStreamer *createMachOStreamer(MCContext &Ctx, MCAsmBackend &TAB,
|
|
||||||
raw_ostream &OS, MCCodeEmitter *CE,
|
|
||||||
bool RelaxAll, bool LabelSections = false);
|
|
||||||
|
|
||||||
/// Create a machine code streamer which will generate ELF format object files.
|
|
||||||
MCStreamer *createELFStreamer(MCContext &Ctx, MCAsmBackend &TAB,
|
|
||||||
raw_ostream &OS, MCCodeEmitter *CE,
|
|
||||||
bool RelaxAll);
|
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -58,10 +58,14 @@ namespace llvm {
|
|||||||
bool isVerboseAsm, bool useDwarfDirectory,
|
bool isVerboseAsm, bool useDwarfDirectory,
|
||||||
MCInstPrinter *InstPrint, MCCodeEmitter *CE,
|
MCInstPrinter *InstPrint, MCCodeEmitter *CE,
|
||||||
MCAsmBackend *TAB, bool ShowInst);
|
MCAsmBackend *TAB, bool ShowInst);
|
||||||
MCStreamer *createObjectStreamer(const Triple &T, MCContext &Ctx,
|
|
||||||
MCAsmBackend &TAB, raw_ostream &OS,
|
/// Takes ownership of \p TAB and \p CE.
|
||||||
MCCodeEmitter *Emitter,
|
MCStreamer *createELFStreamer(MCContext &Ctx, MCAsmBackend &TAB,
|
||||||
const MCSubtargetInfo &STI, bool RelaxAll);
|
raw_ostream &OS, MCCodeEmitter *CE,
|
||||||
|
bool RelaxAll);
|
||||||
|
MCStreamer *createMachOStreamer(MCContext &Ctx, MCAsmBackend &TAB,
|
||||||
|
raw_ostream &OS, MCCodeEmitter *CE,
|
||||||
|
bool RelaxAll, bool LabelSections = false);
|
||||||
|
|
||||||
MCRelocationInfo *createMCRelocationInfo(StringRef TT, MCContext &Ctx);
|
MCRelocationInfo *createMCRelocationInfo(StringRef TT, MCContext &Ctx);
|
||||||
|
|
||||||
@ -130,13 +134,25 @@ namespace llvm {
|
|||||||
typedef MCCodeEmitter *(*MCCodeEmitterCtorTy)(const MCInstrInfo &II,
|
typedef MCCodeEmitter *(*MCCodeEmitterCtorTy)(const MCInstrInfo &II,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
MCContext &Ctx);
|
MCContext &Ctx);
|
||||||
typedef MCStreamer *(*MCObjectStreamerCtorTy)(
|
typedef MCStreamer *(*ELFStreamerCtorTy)(const Triple &T, MCContext &Ctx,
|
||||||
const Triple &T, MCContext &Ctx, MCAsmBackend &TAB, raw_ostream &OS,
|
MCAsmBackend &TAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter, const MCSubtargetInfo &STI, bool RelaxAll);
|
MCCodeEmitter *Emitter,
|
||||||
|
bool RelaxAll);
|
||||||
|
typedef MCStreamer *(*MachOStreamerCtorTy)(MCContext &Ctx,
|
||||||
|
MCAsmBackend &TAB,
|
||||||
|
raw_ostream &OS,
|
||||||
|
MCCodeEmitter *Emitter,
|
||||||
|
bool RelaxAll);
|
||||||
|
typedef MCStreamer *(*COFFStreamerCtorTy)(MCContext &Ctx, MCAsmBackend &TAB,
|
||||||
|
raw_ostream &OS,
|
||||||
|
MCCodeEmitter *Emitter,
|
||||||
|
bool RelaxAll);
|
||||||
typedef MCTargetStreamer *(*NullTargetStreamerCtorTy)(MCStreamer &S);
|
typedef MCTargetStreamer *(*NullTargetStreamerCtorTy)(MCStreamer &S);
|
||||||
typedef MCTargetStreamer *(*AsmTargetStreamerCtorTy)(
|
typedef MCTargetStreamer *(*AsmTargetStreamerCtorTy)(
|
||||||
MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint,
|
MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint,
|
||||||
bool IsVerboseAsm);
|
bool IsVerboseAsm);
|
||||||
|
typedef MCTargetStreamer *(*ObjectTargetStreamerCtorTy)(
|
||||||
|
MCStreamer &S, const MCSubtargetInfo &STI);
|
||||||
typedef MCRelocationInfo *(*MCRelocationInfoCtorTy)(StringRef TT,
|
typedef MCRelocationInfo *(*MCRelocationInfoCtorTy)(StringRef TT,
|
||||||
MCContext &Ctx);
|
MCContext &Ctx);
|
||||||
typedef MCSymbolizer *(*MCSymbolizerCtorTy)(
|
typedef MCSymbolizer *(*MCSymbolizerCtorTy)(
|
||||||
@ -213,9 +229,10 @@ namespace llvm {
|
|||||||
/// CodeEmitter, if registered.
|
/// CodeEmitter, if registered.
|
||||||
MCCodeEmitterCtorTy MCCodeEmitterCtorFn;
|
MCCodeEmitterCtorTy MCCodeEmitterCtorFn;
|
||||||
|
|
||||||
/// MCObjectStreamerCtorFn - Construction function for this target's
|
// Construction functions for the various object formats, if registered.
|
||||||
/// MCObjectStreamer, if registered.
|
COFFStreamerCtorTy COFFStreamerCtorFn;
|
||||||
MCObjectStreamerCtorTy MCObjectStreamerCtorFn;
|
MachOStreamerCtorTy MachOStreamerCtorFn;
|
||||||
|
ELFStreamerCtorTy ELFStreamerCtorFn;
|
||||||
|
|
||||||
/// Construction function for this target's null TargetStreamer, if
|
/// Construction function for this target's null TargetStreamer, if
|
||||||
/// registered (default = nullptr).
|
/// registered (default = nullptr).
|
||||||
@ -225,6 +242,10 @@ namespace llvm {
|
|||||||
/// registered (default = nullptr).
|
/// registered (default = nullptr).
|
||||||
AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn;
|
AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn;
|
||||||
|
|
||||||
|
/// Construction function for this target's obj TargetStreamer, if
|
||||||
|
/// registered (default = nullptr).
|
||||||
|
ObjectTargetStreamerCtorTy ObjectTargetStreamerCtorFn;
|
||||||
|
|
||||||
/// MCRelocationInfoCtorFn - Construction function for this target's
|
/// MCRelocationInfoCtorFn - Construction function for this target's
|
||||||
/// MCRelocationInfo, if registered (default = llvm::createMCRelocationInfo)
|
/// MCRelocationInfo, if registered (default = llvm::createMCRelocationInfo)
|
||||||
MCRelocationInfoCtorTy MCRelocationInfoCtorFn;
|
MCRelocationInfoCtorTy MCRelocationInfoCtorFn;
|
||||||
@ -235,9 +256,10 @@ namespace llvm {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Target()
|
Target()
|
||||||
: MCObjectStreamerCtorFn(nullptr), NullTargetStreamerCtorFn(nullptr),
|
: COFFStreamerCtorFn(nullptr), MachOStreamerCtorFn(nullptr),
|
||||||
AsmTargetStreamerCtorFn(nullptr), MCRelocationInfoCtorFn(nullptr),
|
ELFStreamerCtorFn(nullptr), NullTargetStreamerCtorFn(nullptr),
|
||||||
MCSymbolizerCtorFn(nullptr) {}
|
AsmTargetStreamerCtorFn(nullptr), ObjectTargetStreamerCtorFn(nullptr),
|
||||||
|
MCRelocationInfoCtorFn(nullptr), MCSymbolizerCtorFn(nullptr) {}
|
||||||
|
|
||||||
/// @name Target Information
|
/// @name Target Information
|
||||||
/// @{
|
/// @{
|
||||||
@ -423,10 +445,30 @@ namespace llvm {
|
|||||||
MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter,
|
||||||
const MCSubtargetInfo &STI,
|
const MCSubtargetInfo &STI,
|
||||||
bool RelaxAll) const {
|
bool RelaxAll) const {
|
||||||
if (!MCObjectStreamerCtorFn)
|
MCStreamer *S;
|
||||||
return llvm::createObjectStreamer(T, Ctx, TAB, OS, Emitter, STI,
|
switch (T.getObjectFormat()) {
|
||||||
RelaxAll);
|
default:
|
||||||
return MCObjectStreamerCtorFn(T, Ctx, TAB, OS, Emitter, STI, RelaxAll);
|
llvm_unreachable("Unknown object format");
|
||||||
|
case Triple::COFF:
|
||||||
|
assert(T.isOSWindows() && "only Windows COFF is supported");
|
||||||
|
S = COFFStreamerCtorFn(Ctx, TAB, OS, Emitter, RelaxAll);
|
||||||
|
break;
|
||||||
|
case Triple::MachO:
|
||||||
|
if (MachOStreamerCtorFn)
|
||||||
|
S = MachOStreamerCtorFn(Ctx, TAB, OS, Emitter, RelaxAll);
|
||||||
|
else
|
||||||
|
S = createMachOStreamer(Ctx, TAB, OS, Emitter, RelaxAll);
|
||||||
|
break;
|
||||||
|
case Triple::ELF:
|
||||||
|
if (ELFStreamerCtorFn)
|
||||||
|
S = ELFStreamerCtorFn(T, Ctx, TAB, OS, Emitter, RelaxAll);
|
||||||
|
else
|
||||||
|
S = createELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ObjectTargetStreamerCtorFn)
|
||||||
|
ObjectTargetStreamerCtorFn(*S, STI);
|
||||||
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
MCStreamer *createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
MCStreamer *createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
||||||
@ -760,18 +802,17 @@ namespace llvm {
|
|||||||
T.MCCodeEmitterCtorFn = Fn;
|
T.MCCodeEmitterCtorFn = Fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// RegisterMCObjectStreamer - Register a object code MCStreamer
|
static void RegisterCOFFStreamer(Target &T, Target::COFFStreamerCtorTy Fn) {
|
||||||
/// implementation for the given target.
|
T.COFFStreamerCtorFn = Fn;
|
||||||
///
|
}
|
||||||
/// Clients are responsible for ensuring that registration doesn't occur
|
|
||||||
/// while another thread is attempting to access the registry. Typically
|
static void RegisterMachOStreamer(Target &T,
|
||||||
/// this is done by initializing all targets at program startup.
|
Target::MachOStreamerCtorTy Fn) {
|
||||||
///
|
T.MachOStreamerCtorFn = Fn;
|
||||||
/// @param T - The target being registered.
|
}
|
||||||
/// @param Fn - A function to construct an MCStreamer for the target.
|
|
||||||
static void RegisterMCObjectStreamer(Target &T,
|
static void RegisterELFStreamer(Target &T, Target::ELFStreamerCtorTy Fn) {
|
||||||
Target::MCObjectStreamerCtorTy Fn) {
|
T.ELFStreamerCtorFn = Fn;
|
||||||
T.MCObjectStreamerCtorFn = Fn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -784,6 +825,12 @@ namespace llvm {
|
|||||||
T.AsmTargetStreamerCtorFn = Fn;
|
T.AsmTargetStreamerCtorFn = Fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RegisterObjectTargetStreamer(Target &T,
|
||||||
|
Target::ObjectTargetStreamerCtorTy Fn) {
|
||||||
|
T.ObjectTargetStreamerCtorFn = Fn;
|
||||||
|
}
|
||||||
|
|
||||||
/// RegisterMCRelocationInfo - Register an MCRelocationInfo
|
/// RegisterMCRelocationInfo - Register an MCRelocationInfo
|
||||||
/// implementation for the given target.
|
/// implementation for the given target.
|
||||||
///
|
///
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "llvm/Support/Debug.h"
|
#include "llvm/Support/Debug.h"
|
||||||
#include "llvm/Support/ELF.h"
|
#include "llvm/Support/ELF.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
|
#include "llvm/Support/TargetRegistry.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "llvm/MC/MCSymbol.h"
|
#include "llvm/MC/MCSymbol.h"
|
||||||
#include "llvm/Support/Dwarf.h"
|
#include "llvm/Support/Dwarf.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
|
#include "llvm/Support/TargetRegistry.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
@ -423,16 +423,3 @@ void MCObjectStreamer::FinishImpl() {
|
|||||||
flushPendingLabels(nullptr);
|
flushPendingLabels(nullptr);
|
||||||
getAssembler().Finish();
|
getAssembler().Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
MCStreamer *llvm::createObjectStreamer(const Triple &T, MCContext &Ctx,
|
|
||||||
MCAsmBackend &TAB, raw_ostream &OS,
|
|
||||||
MCCodeEmitter *Emitter,
|
|
||||||
const MCSubtargetInfo &STI,
|
|
||||||
bool RelaxAll) {
|
|
||||||
switch (T.getObjectFormat()) {
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
case Triple::ELF:
|
|
||||||
return createELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -214,9 +214,16 @@ MCELFStreamer *createAArch64ELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
|||||||
raw_ostream &OS, MCCodeEmitter *Emitter,
|
raw_ostream &OS, MCCodeEmitter *Emitter,
|
||||||
bool RelaxAll) {
|
bool RelaxAll) {
|
||||||
AArch64ELFStreamer *S = new AArch64ELFStreamer(Context, TAB, OS, Emitter);
|
AArch64ELFStreamer *S = new AArch64ELFStreamer(Context, TAB, OS, Emitter);
|
||||||
new AArch64TargetELFStreamer(*S);
|
|
||||||
if (RelaxAll)
|
if (RelaxAll)
|
||||||
S->getAssembler().setRelaxAll(true);
|
S->getAssembler().setRelaxAll(true);
|
||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MCTargetStreamer *
|
||||||
|
createAArch64ObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {
|
||||||
|
Triple TT(STI.getTargetTriple());
|
||||||
|
if (TT.getObjectFormat() == Triple::ELF)
|
||||||
|
return new AArch64TargetELFStreamer(S);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,15 +123,17 @@ static MCInstPrinter *createAArch64MCInstPrinter(const Target &T,
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Ctx,
|
static MCStreamer *createELFStreamer(const Triple &T, MCContext &Ctx,
|
||||||
MCAsmBackend &TAB, raw_ostream &OS,
|
MCAsmBackend &TAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter, bool RelaxAll) {
|
||||||
const MCSubtargetInfo &STI, bool RelaxAll) {
|
return createAArch64ELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll);
|
||||||
if (T.isOSDarwin())
|
}
|
||||||
|
|
||||||
|
static MCStreamer *createMachOStreamer(MCContext &Ctx, MCAsmBackend &TAB,
|
||||||
|
raw_ostream &OS, MCCodeEmitter *Emitter,
|
||||||
|
bool RelaxAll) {
|
||||||
return createMachOStreamer(Ctx, TAB, OS, Emitter, RelaxAll,
|
return createMachOStreamer(Ctx, TAB, OS, Emitter, RelaxAll,
|
||||||
/*LabelSections*/ true);
|
/*LabelSections*/ true);
|
||||||
|
|
||||||
return createAArch64ELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Force static initialization.
|
// Force static initialization.
|
||||||
@ -156,8 +158,13 @@ extern "C" void LLVMInitializeAArch64TargetMC() {
|
|||||||
// Register the MC Code Emitter
|
// Register the MC Code Emitter
|
||||||
TargetRegistry::RegisterMCCodeEmitter(*T, createAArch64MCCodeEmitter);
|
TargetRegistry::RegisterMCCodeEmitter(*T, createAArch64MCCodeEmitter);
|
||||||
|
|
||||||
// Register the object streamer.
|
// Register the obj streamers.
|
||||||
TargetRegistry::RegisterMCObjectStreamer(*T, createMCStreamer);
|
TargetRegistry::RegisterELFStreamer(*T, createELFStreamer);
|
||||||
|
TargetRegistry::RegisterMachOStreamer(*T, createMachOStreamer);
|
||||||
|
|
||||||
|
// Register the obj target streamer.
|
||||||
|
TargetRegistry::RegisterObjectTargetStreamer(
|
||||||
|
*T, createAArch64ObjectTargetStreamer);
|
||||||
|
|
||||||
// Register the asm streamer.
|
// Register the asm streamer.
|
||||||
TargetRegistry::RegisterAsmTargetStreamer(*T,
|
TargetRegistry::RegisterAsmTargetStreamer(*T,
|
||||||
|
@ -31,6 +31,7 @@ class MCSubtargetInfo;
|
|||||||
class MCTargetStreamer;
|
class MCTargetStreamer;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
class Target;
|
class Target;
|
||||||
|
class Triple;
|
||||||
class raw_ostream;
|
class raw_ostream;
|
||||||
|
|
||||||
extern Target TheAArch64leTarget;
|
extern Target TheAArch64leTarget;
|
||||||
@ -57,6 +58,10 @@ MCTargetStreamer *createAArch64AsmTargetStreamer(MCStreamer &S,
|
|||||||
formatted_raw_ostream &OS,
|
formatted_raw_ostream &OS,
|
||||||
MCInstPrinter *InstPrint,
|
MCInstPrinter *InstPrint,
|
||||||
bool isVerboseAsm);
|
bool isVerboseAsm);
|
||||||
|
|
||||||
|
MCTargetStreamer *createAArch64ObjectTargetStreamer(MCStreamer &S,
|
||||||
|
const MCSubtargetInfo &STI);
|
||||||
|
|
||||||
} // End llvm namespace
|
} // End llvm namespace
|
||||||
|
|
||||||
// Defines symbolic names for AArch64 registers. This defines a mapping from
|
// Defines symbolic names for AArch64 registers. This defines a mapping from
|
||||||
|
@ -1374,11 +1374,18 @@ MCTargetStreamer *createARMNullTargetStreamer(MCStreamer &S) {
|
|||||||
return new ARMTargetStreamer(S);
|
return new ARMTargetStreamer(S);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MCTargetStreamer *createARMObjectTargetStreamer(MCStreamer &S,
|
||||||
|
const MCSubtargetInfo &STI) {
|
||||||
|
Triple TT(STI.getTargetTriple());
|
||||||
|
if (TT.getObjectFormat() == Triple::ELF)
|
||||||
|
return new ARMTargetELFStreamer(S);
|
||||||
|
return new ARMTargetStreamer(S);
|
||||||
|
}
|
||||||
|
|
||||||
MCELFStreamer *createARMELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
MCELFStreamer *createARMELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
||||||
raw_ostream &OS, MCCodeEmitter *Emitter,
|
raw_ostream &OS, MCCodeEmitter *Emitter,
|
||||||
bool RelaxAll, bool IsThumb) {
|
bool RelaxAll, bool IsThumb) {
|
||||||
ARMELFStreamer *S = new ARMELFStreamer(Context, TAB, OS, Emitter, IsThumb);
|
ARMELFStreamer *S = new ARMELFStreamer(Context, TAB, OS, Emitter, IsThumb);
|
||||||
new ARMTargetELFStreamer(*S);
|
|
||||||
// FIXME: This should eventually end up somewhere else where more
|
// FIXME: This should eventually end up somewhere else where more
|
||||||
// intelligent flag decisions can be made. For now we are just maintaining
|
// intelligent flag decisions can be made. For now we are just maintaining
|
||||||
// the status quo for ARM and setting EF_ARM_EABI_VER5 as the default.
|
// the status quo for ARM and setting EF_ARM_EABI_VER5 as the default.
|
||||||
|
@ -298,25 +298,18 @@ static MCCodeGenInfo *createARMMCCodeGenInfo(StringRef TT, Reloc::Model RM,
|
|||||||
return X;
|
return X;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is duplicated code. Refactor this.
|
static MCStreamer *createELFStreamer(const Triple &T, MCContext &Ctx,
|
||||||
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Ctx,
|
|
||||||
MCAsmBackend &MAB, raw_ostream &OS,
|
MCAsmBackend &MAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter, bool RelaxAll) {
|
||||||
const MCSubtargetInfo &STI, bool RelaxAll) {
|
|
||||||
switch (T.getObjectFormat()) {
|
|
||||||
default: llvm_unreachable("unsupported object format");
|
|
||||||
case Triple::MachO: {
|
|
||||||
MCStreamer *S = createMachOStreamer(Ctx, MAB, OS, Emitter, false);
|
|
||||||
new ARMTargetStreamer(*S);
|
|
||||||
return S;
|
|
||||||
}
|
|
||||||
case Triple::COFF:
|
|
||||||
assert(T.isOSWindows() && "non-Windows ARM COFF is not supported");
|
|
||||||
return createARMWinCOFFStreamer(Ctx, MAB, *Emitter, OS);
|
|
||||||
case Triple::ELF:
|
|
||||||
return createARMELFStreamer(Ctx, MAB, OS, Emitter, false,
|
return createARMELFStreamer(Ctx, MAB, OS, Emitter, false,
|
||||||
T.getArch() == Triple::thumb);
|
T.getArch() == Triple::thumb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MCStreamer *createARMMachOStreamer(MCContext &Ctx, MCAsmBackend &MAB,
|
||||||
|
raw_ostream &OS,
|
||||||
|
MCCodeEmitter *Emitter,
|
||||||
|
bool RelaxAll) {
|
||||||
|
return createMachOStreamer(Ctx, MAB, OS, Emitter, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCInstPrinter *createARMMCInstPrinter(const Target &T,
|
static MCInstPrinter *createARMMCInstPrinter(const Target &T,
|
||||||
@ -401,8 +394,13 @@ extern "C" void LLVMInitializeARMTargetMC() {
|
|||||||
// Register the MC instruction analyzer.
|
// Register the MC instruction analyzer.
|
||||||
TargetRegistry::RegisterMCInstrAnalysis(*T, createARMMCInstrAnalysis);
|
TargetRegistry::RegisterMCInstrAnalysis(*T, createARMMCInstrAnalysis);
|
||||||
|
|
||||||
// Register the object streamer.
|
TargetRegistry::RegisterELFStreamer(*T, createELFStreamer);
|
||||||
TargetRegistry::RegisterMCObjectStreamer(*T, createMCStreamer);
|
TargetRegistry::RegisterCOFFStreamer(*T, createARMWinCOFFStreamer);
|
||||||
|
TargetRegistry::RegisterMachOStreamer(*T, createARMMachOStreamer);
|
||||||
|
|
||||||
|
// Register the obj target streamer.
|
||||||
|
TargetRegistry::RegisterObjectTargetStreamer(*T,
|
||||||
|
createARMObjectTargetStreamer);
|
||||||
|
|
||||||
// Register the asm streamer.
|
// Register the asm streamer.
|
||||||
TargetRegistry::RegisterAsmTargetStreamer(*T, createARMTargetAsmStreamer);
|
TargetRegistry::RegisterAsmTargetStreamer(*T, createARMTargetAsmStreamer);
|
||||||
|
@ -32,6 +32,7 @@ class MCRelocationInfo;
|
|||||||
class MCTargetStreamer;
|
class MCTargetStreamer;
|
||||||
class StringRef;
|
class StringRef;
|
||||||
class Target;
|
class Target;
|
||||||
|
class Triple;
|
||||||
class raw_ostream;
|
class raw_ostream;
|
||||||
|
|
||||||
extern Target TheARMLETarget, TheThumbLETarget;
|
extern Target TheARMLETarget, TheThumbLETarget;
|
||||||
@ -52,6 +53,8 @@ MCTargetStreamer *createARMTargetAsmStreamer(MCStreamer &S,
|
|||||||
formatted_raw_ostream &OS,
|
formatted_raw_ostream &OS,
|
||||||
MCInstPrinter *InstPrint,
|
MCInstPrinter *InstPrint,
|
||||||
bool isVerboseAsm);
|
bool isVerboseAsm);
|
||||||
|
MCTargetStreamer *createARMObjectTargetStreamer(MCStreamer &S,
|
||||||
|
const MCSubtargetInfo &STI);
|
||||||
|
|
||||||
MCCodeEmitter *createARMLEMCCodeEmitter(const MCInstrInfo &MCII,
|
MCCodeEmitter *createARMLEMCCodeEmitter(const MCInstrInfo &MCII,
|
||||||
const MCRegisterInfo &MRI,
|
const MCRegisterInfo &MRI,
|
||||||
@ -77,10 +80,11 @@ MCAsmBackend *createThumbLEAsmBackend(const Target &T, const MCRegisterInfo &MRI
|
|||||||
MCAsmBackend *createThumbBEAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createThumbBEAsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
StringRef TT, StringRef CPU);
|
StringRef TT, StringRef CPU);
|
||||||
|
|
||||||
/// createARMWinCOFFStreamer - Construct a PE/COFF machine code streamer which
|
// Construct a PE/COFF machine code streamer which will generate a PE/COFF
|
||||||
/// will generate a PE/COFF object file.
|
// object file.
|
||||||
MCStreamer *createARMWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
MCStreamer *createARMWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
||||||
MCCodeEmitter &Emitter, raw_ostream &OS);
|
raw_ostream &OS, MCCodeEmitter *Emitter,
|
||||||
|
bool RelaxAll);
|
||||||
|
|
||||||
/// createARMELFObjectWriter - Construct an ELF Mach-O object writer.
|
/// createARMELFObjectWriter - Construct an ELF Mach-O object writer.
|
||||||
MCObjectWriter *createARMELFObjectWriter(raw_ostream &OS,
|
MCObjectWriter *createARMELFObjectWriter(raw_ostream &OS,
|
||||||
|
@ -37,10 +37,10 @@ void ARMWinCOFFStreamer::EmitThumbFunc(MCSymbol *Symbol) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace llvm {
|
MCStreamer *llvm::createARMWinCOFFStreamer(MCContext &Context,
|
||||||
MCStreamer *createARMWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
MCAsmBackend &MAB, raw_ostream &OS,
|
||||||
MCCodeEmitter &Emitter, raw_ostream &OS) {
|
MCCodeEmitter *Emitter,
|
||||||
return new ARMWinCOFFStreamer(Context, MAB, Emitter, OS);
|
bool RelaxAll) {
|
||||||
}
|
return new ARMWinCOFFStreamer(Context, MAB, *Emitter, OS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,11 +69,9 @@ void MipsELFStreamer::EmitMipsOptionRecords() {
|
|||||||
I->EmitMipsOptionRecord();
|
I->EmitMipsOptionRecord();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace llvm {
|
MCELFStreamer *llvm::createMipsELFStreamer(MCContext &Context,
|
||||||
MCELFStreamer *createMipsELFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
MCAsmBackend &MAB, raw_ostream &OS,
|
||||||
raw_ostream &OS, MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter,
|
||||||
const MCSubtargetInfo &STI,
|
|
||||||
bool RelaxAll) {
|
bool RelaxAll) {
|
||||||
return new MipsELFStreamer(Context, MAB, OS, Emitter, STI);
|
return new MipsELFStreamer(Context, MAB, OS, Emitter);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ class MipsELFStreamer : public MCELFStreamer {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
MipsELFStreamer(MCContext &Context, MCAsmBackend &MAB, raw_ostream &OS,
|
MipsELFStreamer(MCContext &Context, MCAsmBackend &MAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter, const MCSubtargetInfo &STI)
|
MCCodeEmitter *Emitter)
|
||||||
: MCELFStreamer(Context, MAB, OS, Emitter) {
|
: MCELFStreamer(Context, MAB, OS, Emitter) {
|
||||||
|
|
||||||
RegInfoRecord = new MipsRegInfoRecord(this, Context);
|
RegInfoRecord = new MipsRegInfoRecord(this, Context);
|
||||||
@ -69,6 +69,6 @@ public:
|
|||||||
|
|
||||||
MCELFStreamer *createMipsELFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
MCELFStreamer *createMipsELFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
||||||
raw_ostream &OS, MCCodeEmitter *Emitter,
|
raw_ostream &OS, MCCodeEmitter *Emitter,
|
||||||
const MCSubtargetInfo &STI, bool RelaxAll);
|
bool RelaxAll);
|
||||||
} // namespace llvm.
|
} // namespace llvm.
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,7 +25,6 @@ bool baseRegNeedsLoadStoreMask(unsigned Reg);
|
|||||||
MCELFStreamer *createMipsNaClELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
MCELFStreamer *createMipsNaClELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
||||||
raw_ostream &OS,
|
raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter,
|
||||||
const MCSubtargetInfo &STI,
|
|
||||||
bool RelaxAll);
|
bool RelaxAll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,14 +108,12 @@ static MCInstPrinter *createMipsMCInstPrinter(const Target &T,
|
|||||||
|
|
||||||
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,
|
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,
|
||||||
MCAsmBackend &MAB, raw_ostream &OS,
|
MCAsmBackend &MAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter, bool RelaxAll) {
|
||||||
const MCSubtargetInfo &STI, bool RelaxAll) {
|
|
||||||
MCStreamer *S;
|
MCStreamer *S;
|
||||||
if (!T.isOSNaCl())
|
if (!T.isOSNaCl())
|
||||||
S = createMipsELFStreamer(Context, MAB, OS, Emitter, STI, RelaxAll);
|
S = createMipsELFStreamer(Context, MAB, OS, Emitter, RelaxAll);
|
||||||
else
|
else
|
||||||
S = createMipsNaClELFStreamer(Context, MAB, OS, Emitter, STI, RelaxAll);
|
S = createMipsNaClELFStreamer(Context, MAB, OS, Emitter, RelaxAll);
|
||||||
new MipsTargetELFStreamer(*S, STI);
|
|
||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,6 +128,11 @@ static MCTargetStreamer *createMipsNullTargetStreamer(MCStreamer &S) {
|
|||||||
return new MipsTargetStreamer(S);
|
return new MipsTargetStreamer(S);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MCTargetStreamer *
|
||||||
|
createMipsObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {
|
||||||
|
return new MipsTargetELFStreamer(S, STI);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void LLVMInitializeMipsTargetMC() {
|
extern "C" void LLVMInitializeMipsTargetMC() {
|
||||||
for (Target *T : {&TheMipsTarget, &TheMipselTarget, &TheMips64Target,
|
for (Target *T : {&TheMipsTarget, &TheMipselTarget, &TheMips64Target,
|
||||||
&TheMips64elTarget}) {
|
&TheMips64elTarget}) {
|
||||||
@ -145,8 +148,8 @@ extern "C" void LLVMInitializeMipsTargetMC() {
|
|||||||
// Register the MC register info.
|
// Register the MC register info.
|
||||||
TargetRegistry::RegisterMCRegInfo(*T, createMipsMCRegisterInfo);
|
TargetRegistry::RegisterMCRegInfo(*T, createMipsMCRegisterInfo);
|
||||||
|
|
||||||
// Register the object streamer.
|
// Register the elf streamer.
|
||||||
TargetRegistry::RegisterMCObjectStreamer(*T, createMCStreamer);
|
TargetRegistry::RegisterELFStreamer(*T, createMCStreamer);
|
||||||
|
|
||||||
// Register the asm target streamer.
|
// Register the asm target streamer.
|
||||||
TargetRegistry::RegisterAsmTargetStreamer(*T, createMipsAsmTargetStreamer);
|
TargetRegistry::RegisterAsmTargetStreamer(*T, createMipsAsmTargetStreamer);
|
||||||
@ -159,6 +162,9 @@ extern "C" void LLVMInitializeMipsTargetMC() {
|
|||||||
|
|
||||||
// Register the MCInstPrinter.
|
// Register the MCInstPrinter.
|
||||||
TargetRegistry::RegisterMCInstPrinter(*T, createMipsMCInstPrinter);
|
TargetRegistry::RegisterMCInstPrinter(*T, createMipsMCInstPrinter);
|
||||||
|
|
||||||
|
TargetRegistry::RegisterObjectTargetStreamer(
|
||||||
|
*T, createMipsObjectTargetStreamer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register the MC Code Emitter
|
// Register the MC Code Emitter
|
||||||
|
@ -37,8 +37,8 @@ const unsigned LoadStoreStackMaskReg = Mips::T7;
|
|||||||
class MipsNaClELFStreamer : public MipsELFStreamer {
|
class MipsNaClELFStreamer : public MipsELFStreamer {
|
||||||
public:
|
public:
|
||||||
MipsNaClELFStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
MipsNaClELFStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter, const MCSubtargetInfo &STI)
|
MCCodeEmitter *Emitter)
|
||||||
: MipsELFStreamer(Context, TAB, OS, Emitter, STI), PendingCall(false) {}
|
: MipsELFStreamer(Context, TAB, OS, Emitter), PendingCall(false) {}
|
||||||
|
|
||||||
~MipsNaClELFStreamer() {}
|
~MipsNaClELFStreamer() {}
|
||||||
|
|
||||||
@ -254,10 +254,8 @@ bool baseRegNeedsLoadStoreMask(unsigned Reg) {
|
|||||||
MCELFStreamer *createMipsNaClELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
MCELFStreamer *createMipsNaClELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
||||||
raw_ostream &OS,
|
raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter,
|
||||||
const MCSubtargetInfo &STI,
|
|
||||||
bool RelaxAll) {
|
bool RelaxAll) {
|
||||||
MipsNaClELFStreamer *S = new MipsNaClELFStreamer(Context, TAB, OS, Emitter,
|
MipsNaClELFStreamer *S = new MipsNaClELFStreamer(Context, TAB, OS, Emitter);
|
||||||
STI);
|
|
||||||
if (RelaxAll)
|
if (RelaxAll)
|
||||||
S->getAssembler().setRelaxAll(true);
|
S->getAssembler().setRelaxAll(true);
|
||||||
|
|
||||||
|
@ -223,22 +223,6 @@ public:
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is duplicated code. Refactor this.
|
|
||||||
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Ctx,
|
|
||||||
MCAsmBackend &MAB, raw_ostream &OS,
|
|
||||||
MCCodeEmitter *Emitter,
|
|
||||||
const MCSubtargetInfo &STI, bool RelaxAll) {
|
|
||||||
if (T.isOSDarwin()) {
|
|
||||||
MCStreamer *S = createMachOStreamer(Ctx, MAB, OS, Emitter, RelaxAll);
|
|
||||||
new PPCTargetMachOStreamer(*S);
|
|
||||||
return S;
|
|
||||||
}
|
|
||||||
|
|
||||||
MCStreamer *S = createELFStreamer(Ctx, MAB, OS, Emitter, RelaxAll);
|
|
||||||
new PPCTargetELFStreamer(*S);
|
|
||||||
return S;
|
|
||||||
}
|
|
||||||
|
|
||||||
static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S,
|
static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S,
|
||||||
formatted_raw_ostream &OS,
|
formatted_raw_ostream &OS,
|
||||||
MCInstPrinter *InstPrint,
|
MCInstPrinter *InstPrint,
|
||||||
@ -246,6 +230,14 @@ static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S,
|
|||||||
return new PPCTargetAsmStreamer(S, OS);
|
return new PPCTargetAsmStreamer(S, OS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MCTargetStreamer *
|
||||||
|
createObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {
|
||||||
|
Triple TT(STI.getTargetTriple());
|
||||||
|
if (TT.getObjectFormat() == Triple::ELF)
|
||||||
|
return new PPCTargetELFStreamer(S);
|
||||||
|
return new PPCTargetMachOStreamer(S);
|
||||||
|
}
|
||||||
|
|
||||||
static MCInstPrinter *createPPCMCInstPrinter(const Target &T,
|
static MCInstPrinter *createPPCMCInstPrinter(const Target &T,
|
||||||
unsigned SyntaxVariant,
|
unsigned SyntaxVariant,
|
||||||
const MCAsmInfo &MAI,
|
const MCAsmInfo &MAI,
|
||||||
@ -279,8 +271,9 @@ extern "C" void LLVMInitializePowerPCTargetMC() {
|
|||||||
// Register the asm backend.
|
// Register the asm backend.
|
||||||
TargetRegistry::RegisterMCAsmBackend(*T, createPPCAsmBackend);
|
TargetRegistry::RegisterMCAsmBackend(*T, createPPCAsmBackend);
|
||||||
|
|
||||||
// Register the object streamer.
|
// Register the object target streamer.
|
||||||
TargetRegistry::RegisterMCObjectStreamer(*T, createMCStreamer);
|
TargetRegistry::RegisterObjectTargetStreamer(*T,
|
||||||
|
createObjectTargetStreamer);
|
||||||
|
|
||||||
// Register the asm target streamer.
|
// Register the asm target streamer.
|
||||||
TargetRegistry::RegisterAsmTargetStreamer(*T, createAsmTargetStreamer);
|
TargetRegistry::RegisterAsmTargetStreamer(*T, createAsmTargetStreamer);
|
||||||
|
@ -122,13 +122,9 @@ static MCCodeGenInfo *createSparcV9MCCodeGenInfo(StringRef TT, Reloc::Model RM,
|
|||||||
return X;
|
return X;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,
|
static MCTargetStreamer *
|
||||||
MCAsmBackend &MAB, raw_ostream &OS,
|
createObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {
|
||||||
MCCodeEmitter *Emitter,
|
return new SparcTargetELFStreamer(S);
|
||||||
const MCSubtargetInfo &STI, bool RelaxAll) {
|
|
||||||
MCStreamer *S = createELFStreamer(Context, MAB, OS, Emitter, RelaxAll);
|
|
||||||
new SparcTargetELFStreamer(*S);
|
|
||||||
return S;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,
|
static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,
|
||||||
@ -168,8 +164,9 @@ extern "C" void LLVMInitializeSparcTargetMC() {
|
|||||||
// Register the asm backend.
|
// Register the asm backend.
|
||||||
TargetRegistry::RegisterMCAsmBackend(*T, createSparcAsmBackend);
|
TargetRegistry::RegisterMCAsmBackend(*T, createSparcAsmBackend);
|
||||||
|
|
||||||
// Register the object streamer.
|
// Register the object target streamer.
|
||||||
TargetRegistry::RegisterMCObjectStreamer(*T, createMCStreamer);
|
TargetRegistry::RegisterObjectTargetStreamer(*T,
|
||||||
|
createObjectTargetStreamer);
|
||||||
|
|
||||||
// Register the asm streamer.
|
// Register the asm streamer.
|
||||||
TargetRegistry::RegisterAsmTargetStreamer(*T, createTargetAsmStreamer);
|
TargetRegistry::RegisterAsmTargetStreamer(*T, createTargetAsmStreamer);
|
||||||
|
@ -344,22 +344,6 @@ static MCCodeGenInfo *createX86MCCodeGenInfo(StringRef TT, Reloc::Model RM,
|
|||||||
return X;
|
return X;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Ctx,
|
|
||||||
MCAsmBackend &MAB, raw_ostream &OS,
|
|
||||||
MCCodeEmitter *Emitter,
|
|
||||||
const MCSubtargetInfo &STI, bool RelaxAll) {
|
|
||||||
switch (T.getObjectFormat()) {
|
|
||||||
default: llvm_unreachable("unsupported object format");
|
|
||||||
case Triple::MachO:
|
|
||||||
return createMachOStreamer(Ctx, MAB, OS, Emitter, RelaxAll);
|
|
||||||
case Triple::COFF:
|
|
||||||
assert(T.isOSWindows() && "only Windows COFF is supported");
|
|
||||||
return createX86WinCOFFStreamer(Ctx, MAB, Emitter, OS, RelaxAll);
|
|
||||||
case Triple::ELF:
|
|
||||||
return createELFStreamer(Ctx, MAB, OS, Emitter, RelaxAll);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static MCInstPrinter *createX86MCInstPrinter(const Target &T,
|
static MCInstPrinter *createX86MCInstPrinter(const Target &T,
|
||||||
unsigned SyntaxVariant,
|
unsigned SyntaxVariant,
|
||||||
const MCAsmInfo &MAI,
|
const MCAsmInfo &MAI,
|
||||||
@ -414,7 +398,7 @@ extern "C" void LLVMInitializeX86TargetMC() {
|
|||||||
TargetRegistry::RegisterMCCodeEmitter(*T, createX86MCCodeEmitter);
|
TargetRegistry::RegisterMCCodeEmitter(*T, createX86MCCodeEmitter);
|
||||||
|
|
||||||
// Register the object streamer.
|
// Register the object streamer.
|
||||||
TargetRegistry::RegisterMCObjectStreamer(*T, createMCStreamer);
|
TargetRegistry::RegisterCOFFStreamer(*T, createX86WinCOFFStreamer);
|
||||||
|
|
||||||
// Register the MCInstPrinter.
|
// Register the MCInstPrinter.
|
||||||
TargetRegistry::RegisterMCInstPrinter(*T, createX86MCInstPrinter);
|
TargetRegistry::RegisterMCInstPrinter(*T, createX86MCInstPrinter);
|
||||||
|
@ -85,12 +85,12 @@ MCAsmBackend *createX86_32AsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
|||||||
MCAsmBackend *createX86_64AsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
MCAsmBackend *createX86_64AsmBackend(const Target &T, const MCRegisterInfo &MRI,
|
||||||
StringRef TT, StringRef CPU);
|
StringRef TT, StringRef CPU);
|
||||||
|
|
||||||
/// createX86WinCOFFStreamer - Construct an X86 Windows COFF machine code
|
/// Construct an X86 Windows COFF machine code streamer which will generate
|
||||||
/// streamer which will generate PE/COFF format object files.
|
/// PE/COFF format object files.
|
||||||
///
|
///
|
||||||
/// Takes ownership of \p AB and \p CE.
|
/// Takes ownership of \p AB and \p CE.
|
||||||
MCStreamer *createX86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB,
|
MCStreamer *createX86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB,
|
||||||
MCCodeEmitter *CE, raw_ostream &OS,
|
raw_ostream &OS, MCCodeEmitter *CE,
|
||||||
bool RelaxAll);
|
bool RelaxAll);
|
||||||
|
|
||||||
/// createX86MachObjectWriter - Construct an X86 Mach-O object writer.
|
/// createX86MachObjectWriter - Construct an X86 Mach-O object writer.
|
||||||
|
@ -48,13 +48,11 @@ void X86WinCOFFStreamer::FinishImpl() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace llvm {
|
MCStreamer *llvm::createX86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB,
|
||||||
MCStreamer *createX86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB,
|
raw_ostream &OS, MCCodeEmitter *CE,
|
||||||
MCCodeEmitter *CE, raw_ostream &OS,
|
|
||||||
bool RelaxAll) {
|
bool RelaxAll) {
|
||||||
X86WinCOFFStreamer *S = new X86WinCOFFStreamer(C, AB, CE, OS);
|
X86WinCOFFStreamer *S = new X86WinCOFFStreamer(C, AB, CE, OS);
|
||||||
S->getAssembler().setRelaxAll(RelaxAll);
|
S->getAssembler().setRelaxAll(RelaxAll);
|
||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user