[#llvm-MCTargetStreamer] = xref:llvm.adoc[llvm]::MCTargetStreamer :relfileprefix: ../ :mrdocs: Target specific streamer interface. This is used so that targets can implement support for target specific assembly directives. == Synopsis Declared in `<llvm/MC/MCStreamer.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class MCTargetStreamer; ---- == Description If target foo wants to use this, it should implement 3 classes: * FooTargetStreamer : public MCTargetStreamer * FooTargetAsmStreamer : public FooTargetStreamer * FooTargetELFStreamer : public FooTargetStreamer FooTargetStreamer should have a pure virtual method for each directive. For example, for a ".bar symbol_name" directive, it should have virtual emitBar(const MCSymbol &Symbol) = 0; The FooTargetAsmStreamer and FooTargetELFStreamer classes implement the method. The assembly streamer just prints ".bar symbol_name". The object streamer does whatever is needed to implement .bar in the object file. In the assembly printer and parser the target streamer can be used by calling getTargetStreamer and casting it to FooTargetStreamer: MCTargetStreamer &TS = OutStreamer.getTargetStreamer(); FooTargetStreamer &ATS = static_cast<FooTargetStreamer &>(TS); The base classes FooTargetAsmStreamer and FooTargetELFStreamer should _never_ be treated differently. Callers should always talk to a FooTargetStreamer. == Member Functions [cols="1,4"] |=== | Name| Description | xref:llvm/MCTargetStreamer/2constructor.adoc[`MCTargetStreamer`] [.small]#[constructor]# | Construct a target streamer bound to `S.` | xref:llvm/MCTargetStreamer/2destructor.adoc[`~MCTargetStreamer`] [.small]#[destructor]# [.small]#[virtual]# | Destroy the target streamer. | xref:llvm/MCTargetStreamer/changeSection.adoc[`changeSection`] [.small]#[virtual]# | Update streamer for a new active section. | xref:llvm/MCTargetStreamer/emitAssignment.adoc[`emitAssignment`] [.small]#[virtual]# | Allow a target to add behavior to the emitAssignment of MCStreamer. | xref:llvm/MCTargetStreamer/emitConstantPools.adoc[`emitConstantPools`] [.small]#[virtual]# | Emit pending assembler constant pools. | xref:llvm/MCTargetStreamer/emitDwarfFileDirective.adoc[`emitDwarfFileDirective`] [.small]#[virtual]# | Emit a DWARF .file directive string. | xref:llvm/MCTargetStreamer/emitLabel.adoc[`emitLabel`] [.small]#[virtual]# | Allow a target to add behavior to the EmitLabel of MCStreamer. | xref:llvm/MCTargetStreamer/emitRawBytes.adoc[`emitRawBytes`] [.small]#[virtual]# | Emit the bytes in `Data` into the output. | xref:llvm/MCTargetStreamer/emitValue.adoc[`emitValue`] [.small]#[virtual]# | Emit the expression `Value` as a target‐specific value. | xref:llvm/MCTargetStreamer/finish.adoc[`finish`] [.small]#[virtual]# | Finish emission for this target streamer. | xref:llvm/MCTargetStreamer/getContext.adoc[`getContext`] | Return the MC context of the attached streamer. | xref:llvm/MCTargetStreamer/getStreamer.adoc[`getStreamer`] | Return the MCStreamer this target streamer is attached to. | xref:llvm/MCTargetStreamer/prettyPrintAsm.adoc[`prettyPrintAsm`] [.small]#[virtual]# | Pretty‐print `Inst` as assembly to `OS.` |=== == Protected Data Members [cols="1,4"] |=== | Name| Description | xref:llvm/MCTargetStreamer/Streamer.adoc[`Streamer`] | Streamer this target streamer is attached to. |=== == Derived Classes [cols="1,4"] |=== | Name| Description | xref:llvm/ARMTargetStreamer.adoc[`ARMTargetStreamer`] | ARM‐specific target streamer for EHABI, EABI attributes, and WinCFI. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#