Index: include/llvm/Support/TargetRegistry.h |
diff --git a/include/llvm/Support/TargetRegistry.h b/include/llvm/Support/TargetRegistry.h |
index 9b11826e3609390e87baec018179e889dcaef177..232e209dd1a2ae2a3c6569c64423ce2a66f46088 100644 |
--- a/include/llvm/Support/TargetRegistry.h |
+++ b/include/llvm/Support/TargetRegistry.h |
@@ -147,6 +147,11 @@ namespace llvm { |
raw_pwrite_stream &OS, |
MCCodeEmitter *Emitter, |
bool RelaxAll); |
+ typedef MCStreamer *(*NaClAsmStreamerCtorTy)(MCContext &Context, |
+ std::unique_ptr<formatted_raw_ostream> OS, |
+ bool isVerboseAsm, bool useDwarfDirectory, |
+ MCInstPrinter *IP, MCCodeEmitter *CE, |
+ MCAsmBackend *MAB, bool ShowInst); |
typedef MCTargetStreamer *(*NullTargetStreamerCtorTy)(MCStreamer &S); |
typedef MCTargetStreamer *(*AsmTargetStreamerCtorTy)( |
MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint, |
@@ -234,6 +239,9 @@ namespace llvm { |
MachOStreamerCtorTy MachOStreamerCtorFn; |
ELFStreamerCtorTy ELFStreamerCtorFn; |
+ // Construction functions for NaCl asm streamer, if registered. |
+ NaClAsmStreamerCtorTy NaClAsmStreamerCtorFn; |
+ |
/// Construction function for this target's null TargetStreamer, if |
/// registered (default = nullptr). |
NullTargetStreamerCtorTy NullTargetStreamerCtorFn; |
@@ -486,6 +494,22 @@ namespace llvm { |
return S; |
} |
+ MCStreamer *createNaClAsmStreamer(MCContext &Ctx, |
+ std::unique_ptr<formatted_raw_ostream> OS, |
+ bool IsVerboseAsm, bool UseDwarfDirectory, |
+ MCInstPrinter *InstPrint, MCCodeEmitter *CE, |
+ MCAsmBackend *TAB, bool ShowInst) const { |
+ if (NaClAsmStreamerCtorFn) { |
+ formatted_raw_ostream &OSRef = *OS; |
+ MCStreamer *S = NaClAsmStreamerCtorFn(Ctx, std::move(OS), IsVerboseAsm, |
+ UseDwarfDirectory, InstPrint, CE, |
+ TAB, ShowInst); |
+ createAsmTargetStreamer(*S, OSRef, InstPrint, IsVerboseAsm); |
+ return S; |
+ } |
+ return nullptr; |
+ } |
+ |
MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S, |
formatted_raw_ostream &OS, |
MCInstPrinter *InstPrint, |
@@ -825,6 +849,10 @@ namespace llvm { |
T.ELFStreamerCtorFn = Fn; |
} |
+ static void RegisterNaClAsmStreamer(Target &T, Target::NaClAsmStreamerCtorTy Fn) { |
+ T.NaClAsmStreamerCtorFn = Fn; |
+ } |
+ |
static void |
RegisterNullTargetStreamer(Target &T, Target::NullTargetStreamerCtorTy Fn) { |
T.NullTargetStreamerCtorFn = Fn; |