@@ -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,
@@ -240,6 +244,9 @@ class Target {
240
244
using AsmTargetStreamerCtorTy = MCTargetStreamer *(*)(
241
245
MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint,
242
246
bool IsVerboseAsm);
247
+ using HexTargetStreamerCtorTy =
248
+ MCTargetStreamer *(*)(MCStreamer &S, formatted_raw_ostream &OS,
249
+ MCInstPrinter *InstPrint);
243
250
using ObjectTargetStreamerCtorTy = MCTargetStreamer *(*)(
244
251
MCStreamer &S, const MCSubtargetInfo &STI);
245
252
using MCRelocationInfoCtorTy = MCRelocationInfo *(*)(const Triple &TT,
@@ -352,6 +359,10 @@ class Target {
352
359
// / registered (default = nullptr).
353
360
AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn = nullptr ;
354
361
362
+ // / Construction function for this target's hex TargetStreamer, if
363
+ // / registered (default = nullptr).
364
+ HexTargetStreamerCtorTy HexTargetStreamerCtorFn = nullptr ;
365
+
355
366
// / Construction function for this target's obj TargetStreamer, if
356
367
// / registered (default = nullptr).
357
368
ObjectTargetStreamerCtorTy ObjectTargetStreamerCtorFn = nullptr ;
@@ -680,6 +691,26 @@ class Target {
680
691
return nullptr ;
681
692
}
682
693
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
+
683
714
// / createMCRelocationInfo - Create a target specific MCRelocationInfo.
684
715
// /
685
716
// / \param TT The target triple.
@@ -1058,6 +1089,11 @@ struct TargetRegistry {
1058
1089
T.AsmTargetStreamerCtorFn = Fn;
1059
1090
}
1060
1091
1092
+ static void RegisterHexTargetStreamer (Target &T,
1093
+ Target::HexTargetStreamerCtorTy Fn) {
1094
+ T.HexTargetStreamerCtorFn = Fn;
1095
+ }
1096
+
1061
1097
static void
1062
1098
RegisterObjectTargetStreamer (Target &T,
1063
1099
Target::ObjectTargetStreamerCtorTy Fn) {
0 commit comments