@@ -88,7 +88,11 @@ createAsmStreamer(MCContext &Ctx, std::unique_ptr<formatted_raw_ostream> OS,
88
88
bool isVerboseAsm, bool useDwarfDirectory,
89
89
MCInstPrinter *InstPrint, std::unique_ptr<MCCodeEmitter> &&CE,
90
90
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);
92
96
MCStreamer *createELFStreamer (MCContext &Ctx,
93
97
std::unique_ptr<MCAsmBackend> &&TAB,
94
98
std::unique_ptr<MCObjectWriter> &&OW,
@@ -234,6 +238,9 @@ class Target {
234
238
using AsmTargetStreamerCtorTy = MCTargetStreamer *(*)(
235
239
MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint,
236
240
bool IsVerboseAsm);
241
+ using HexTargetStreamerCtorTy =
242
+ MCTargetStreamer *(*)(MCStreamer &S, formatted_raw_ostream &OS,
243
+ MCInstPrinter *InstPrint);
237
244
using ObjectTargetStreamerCtorTy = MCTargetStreamer *(*)(
238
245
MCStreamer &S, const MCSubtargetInfo &STI);
239
246
using MCRelocationInfoCtorTy = MCRelocationInfo *(*)(const Triple &TT,
@@ -346,6 +353,10 @@ class Target {
346
353
// / registered (default = nullptr).
347
354
AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn = nullptr ;
348
355
356
+ // / Construction function for this target's hex TargetStreamer, if
357
+ // / registered (default = nullptr).
358
+ HexTargetStreamerCtorTy HexTargetStreamerCtorFn = nullptr ;
359
+
349
360
// / Construction function for this target's obj TargetStreamer, if
350
361
// / registered (default = nullptr).
351
362
ObjectTargetStreamerCtorTy ObjectTargetStreamerCtorFn = nullptr ;
@@ -671,6 +682,26 @@ class Target {
671
682
return nullptr ;
672
683
}
673
684
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
+
674
705
// / createMCRelocationInfo - Create a target specific MCRelocationInfo.
675
706
// /
676
707
// / \param TT The target triple.
@@ -1049,6 +1080,11 @@ struct TargetRegistry {
1049
1080
T.AsmTargetStreamerCtorFn = Fn;
1050
1081
}
1051
1082
1083
+ static void RegisterHexTargetStreamer (Target &T,
1084
+ Target::HexTargetStreamerCtorTy Fn) {
1085
+ T.HexTargetStreamerCtorFn = Fn;
1086
+ }
1087
+
1052
1088
static void
1053
1089
RegisterObjectTargetStreamer (Target &T,
1054
1090
Target::ObjectTargetStreamerCtorTy Fn) {
0 commit comments