@@ -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,
@@ -240,6 +244,9 @@ class Target {
240244 using AsmTargetStreamerCtorTy = MCTargetStreamer *(*)(
241245 MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint,
242246 bool IsVerboseAsm);
247+ using HexTargetStreamerCtorTy =
248+ MCTargetStreamer *(*)(MCStreamer &S, formatted_raw_ostream &OS,
249+ MCInstPrinter *InstPrint);
243250 using ObjectTargetStreamerCtorTy = MCTargetStreamer *(*)(
244251 MCStreamer &S, const MCSubtargetInfo &STI);
245252 using MCRelocationInfoCtorTy = MCRelocationInfo *(*)(const Triple &TT,
@@ -352,6 +359,10 @@ class Target {
352359 // / registered (default = nullptr).
353360 AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn = nullptr ;
354361
362+ // / Construction function for this target's hex TargetStreamer, if
363+ // / registered (default = nullptr).
364+ HexTargetStreamerCtorTy HexTargetStreamerCtorFn = nullptr ;
365+
355366 // / Construction function for this target's obj TargetStreamer, if
356367 // / registered (default = nullptr).
357368 ObjectTargetStreamerCtorTy ObjectTargetStreamerCtorFn = nullptr ;
@@ -680,6 +691,26 @@ class Target {
680691 return nullptr ;
681692 }
682693
694+ MCStreamer *createHexStreamer (MCContext &Ctx,
695+ std::unique_ptr<formatted_raw_ostream> OS,
696+ MCInstPrinter *InstPrint,
697+ std::unique_ptr<MCCodeEmitter> &&CE,
698+ std::unique_ptr<MCAsmBackend> &&TAB) const {
699+ formatted_raw_ostream &OSRef = *OS;
700+ MCStreamer *S = llvm::createHexStreamer (Ctx, std::move (OS), InstPrint,
701+ std::move (CE), std::move (TAB));
702+ createHexTargetStreamer (*S, OSRef, InstPrint);
703+ return S;
704+ }
705+
706+ MCTargetStreamer *createHexTargetStreamer (MCStreamer &S,
707+ formatted_raw_ostream &OS,
708+ MCInstPrinter *InstPrint) const {
709+ if (HexTargetStreamerCtorFn)
710+ return HexTargetStreamerCtorFn (S, OS, InstPrint);
711+ return nullptr ;
712+ }
713+
683714 // / createMCRelocationInfo - Create a target specific MCRelocationInfo.
684715 // /
685716 // / \param TT The target triple.
@@ -1058,6 +1089,11 @@ struct TargetRegistry {
10581089 T.AsmTargetStreamerCtorFn = Fn;
10591090 }
10601091
1092+ static void RegisterHexTargetStreamer (Target &T,
1093+ Target::HexTargetStreamerCtorTy Fn) {
1094+ T.HexTargetStreamerCtorFn = Fn;
1095+ }
1096+
10611097 static void
10621098 RegisterObjectTargetStreamer (Target &T,
10631099 Target::ObjectTargetStreamerCtorTy Fn) {
0 commit comments