@@ -88,7 +88,11 @@ createAsmStreamer(MCContext &Ctx, std::unique_ptr<formatted_raw_ostream> OS,
8888 bool isVerboseAsm, bool useDwarfDirectory,
8989 MCInstPrinter *InstPrint, std::unique_ptr<MCCodeEmitter> &&CE,
9090 std::unique_ptr<MCAsmBackend> &&TAB, bool ShowInst);
91-
91+ MCStreamer *createHexStreamer (MCContext &Ctx,
92+ std::unique_ptr<formatted_raw_ostream> OS,
93+ MCInstPrinter *InstPrint,
94+ std::unique_ptr<MCCodeEmitter> &&CE,
95+ std::unique_ptr<MCAsmBackend> &&TAB);
9296MCStreamer *createELFStreamer (MCContext &Ctx,
9397 std::unique_ptr<MCAsmBackend> &&TAB,
9498 std::unique_ptr<MCObjectWriter> &&OW,
@@ -234,6 +238,9 @@ class Target {
234238 using AsmTargetStreamerCtorTy = MCTargetStreamer *(*)(
235239 MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint,
236240 bool IsVerboseAsm);
241+ using HexTargetStreamerCtorTy =
242+ MCTargetStreamer *(*)(MCStreamer &S, formatted_raw_ostream &OS,
243+ MCInstPrinter *InstPrint);
237244 using ObjectTargetStreamerCtorTy = MCTargetStreamer *(*)(
238245 MCStreamer &S, const MCSubtargetInfo &STI);
239246 using MCRelocationInfoCtorTy = MCRelocationInfo *(*)(const Triple &TT,
@@ -346,6 +353,10 @@ class Target {
346353 // / registered (default = nullptr).
347354 AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn = nullptr ;
348355
356+ // / Construction function for this target's hex TargetStreamer, if
357+ // / registered (default = nullptr).
358+ HexTargetStreamerCtorTy HexTargetStreamerCtorFn = nullptr ;
359+
349360 // / Construction function for this target's obj TargetStreamer, if
350361 // / registered (default = nullptr).
351362 ObjectTargetStreamerCtorTy ObjectTargetStreamerCtorFn = nullptr ;
@@ -671,6 +682,26 @@ class Target {
671682 return nullptr ;
672683 }
673684
685+ MCStreamer *createHexStreamer (MCContext &Ctx,
686+ std::unique_ptr<formatted_raw_ostream> OS,
687+ MCInstPrinter *InstPrint,
688+ std::unique_ptr<MCCodeEmitter> &&CE,
689+ std::unique_ptr<MCAsmBackend> &&TAB) const {
690+ formatted_raw_ostream &OSRef = *OS;
691+ MCStreamer *S = llvm::createHexStreamer (Ctx, std::move (OS), InstPrint,
692+ std::move (CE), std::move (TAB));
693+ createHexTargetStreamer (*S, OSRef, InstPrint);
694+ return S;
695+ }
696+
697+ MCTargetStreamer *createHexTargetStreamer (MCStreamer &S,
698+ formatted_raw_ostream &OS,
699+ MCInstPrinter *InstPrint) const {
700+ if (HexTargetStreamerCtorFn)
701+ return HexTargetStreamerCtorFn (S, OS, InstPrint);
702+ return nullptr ;
703+ }
704+
674705 // / createMCRelocationInfo - Create a target specific MCRelocationInfo.
675706 // /
676707 // / \param TT The target triple.
@@ -1049,6 +1080,11 @@ struct TargetRegistry {
10491080 T.AsmTargetStreamerCtorFn = Fn;
10501081 }
10511082
1083+ static void RegisterHexTargetStreamer (Target &T,
1084+ Target::HexTargetStreamerCtorTy Fn) {
1085+ T.HexTargetStreamerCtorFn = Fn;
1086+ }
1087+
10521088 static void
10531089 RegisterObjectTargetStreamer (Target &T,
10541090 Target::ObjectTargetStreamerCtorTy Fn) {
0 commit comments