LLVM: llvm::MCGOFFStreamer Class Reference (original) (raw)
Public Member Functions
MCGOFFStreamer (MCContext &Context, std::unique_ptr< MCAsmBackend > MAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter)
~MCGOFFStreamer () override
void
changeSection (MCSection *Section, uint32_t Subsection=0) override
This is called by popSection and switchSection, if the current section changes.
getWriter ()
emitSymbolAttribute (MCSymbol *Symbol, MCSymbolAttr Attribute) override
Add the given [Attribute](classllvm%5F1%5F1Attribute.html "Functions, function parameters, and return types can have attributes to indicate how they should be t...") to Symbol.
void
emitCommonSymbol (MCSymbol *Symbol, uint64_t Size, Align ByteAlignment) override
Emit a common symbol.
Public Member Functions inherited from llvm::MCObjectStreamer
void
reset () override
state management
isIntegratedAssemblerRequired () const override
Object streamers require the integrated assembler.
void
emitFrames ()
MCSymbol *
emitCFILabel () override
When emitting an object file, create and emit a real label.
void
emitCFISections (bool EH, bool Debug, bool SFrame) override
void
visitUsedSymbol (const MCSymbol &Sym) override
getAssembler ()
getAssemblerPtr () override
uint8_t *
allocFragSpace (size_t Headroom)
void
newFragment ()
template<typename FT, typename... Args>
FT *
newSpecialFragment (Args &&...args)
void
ensureHeadroom (size_t Headroom)
void
appendContents (ArrayRef< char > Contents)
void
appendContents (size_t Num, uint8_t Elt)
void
addFixup (const MCExpr *Value, MCFixupKind Kind)
void
emitLabel (MCSymbol *Symbol, SMLoc Loc=SMLoc()) override
Emit a label for Symbol into the current section.
virtual void
emitLabelAtPos (MCSymbol *Symbol, SMLoc Loc, MCFragment &F, uint64_t Offset)
void
emitAssignment (MCSymbol *Symbol, const MCExpr *Value) override
Emit an assignment of [Value](classllvm%5F1%5F1Value.html "LLVM Value Representation.") to Symbol.
void
emitConditionalAssignment (MCSymbol *Symbol, const MCExpr *Value) override
Emit an assignment of [Value](classllvm%5F1%5F1Value.html "LLVM Value Representation.") to Symbol, but only if [Value](classllvm%5F1%5F1Value.html "LLVM Value Representation.") is also emitted.
void
emitValueImpl (const MCExpr *Value, unsigned Size, SMLoc Loc=SMLoc()) override
Emit the expression [Value](classllvm%5F1%5F1Value.html "LLVM Value Representation.") into the output as a native integer of the given Size bytes.
void
emitULEB128Value (const MCExpr *Value) override
void
emitSLEB128Value (const MCExpr *Value) override
void
emitWeakReference (MCSymbol *Alias, const MCSymbol *Target) override
Emit an weak reference from Alias to Symbol.
void
changeSection (MCSection *Section, uint32_t Subsection=0) override
This is called by popSection and switchSection, if the current section changes.
void
emitInstruction (const MCInst &Inst, const MCSubtargetInfo &STI) override
Emit the given [Instruction](classllvm%5F1%5F1Instruction.html) into the current section.
void
emitInstToFragment (const MCInst &Inst, const MCSubtargetInfo &)
Emit an instruction to a special fragment, because this instruction can change its size during relaxation.
void
emitBytes (StringRef Data) override
Emit the bytes in Data into the output.
void
emitValueToAlignment (Align Alignment, int64_t Fill=0, uint8_t FillLen=1, unsigned MaxBytesToEmit=0) override
Emit some number of copies of [Value](classllvm%5F1%5F1Value.html "LLVM Value Representation.") until the byte alignment ByteAlignment is reached.
void
emitCodeAlignment (Align ByteAlignment, const MCSubtargetInfo *STI, unsigned MaxBytesToEmit=0) override
Emit nops until the byte alignment ByteAlignment is reached.
void
emitValueToOffset (const MCExpr *Offset, unsigned char Value, SMLoc Loc) override
Emit some number of copies of [Value](classllvm%5F1%5F1Value.html "LLVM Value Representation.") until the byte offset Offset is reached.
void
emitDwarfLocDirective (unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, unsigned Discriminator, StringRef FileName, StringRef Comment={}) override
This implements the DWARF2 '.loc fileno lineno ...' assembler directive.
void
emitDwarfAdvanceLineAddr (int64_t LineDelta, const MCSymbol *LastLabel, const MCSymbol *Label, unsigned PointerSize) override
If targets does not support representing debug line section by .loc/.file directives in assembly output, we need to populate debug line section with raw debug line contents.
void
emitDwarfLineEndEntry (MCSection *Section, MCSymbol *LastLabel, MCSymbol *EndLabel=nullptr) override
Emit the debug line end entry.
void
emitDwarfAdvanceFrameAddr (const MCSymbol *LastLabel, const MCSymbol *Label, SMLoc Loc)
void
emitSFrameCalculateFuncOffset (const MCSymbol *FunCabsel, const MCSymbol *FREBegin, MCFragment *FDEFrag, SMLoc Loc)
void
emitCVLocDirective (unsigned FunctionId, unsigned FileNo, unsigned Line, unsigned Column, bool PrologueEnd, bool IsStmt, StringRef FileName, SMLoc Loc) override
This implements the CodeView '.cv_loc' assembler directive.
void
emitCVLinetableDirective (unsigned FunctionId, const MCSymbol *Begin, const MCSymbol *End) override
This implements the CodeView '.cv_linetable' assembler directive.
void
emitCVInlineLinetableDirective (unsigned PrimaryFunctionId, unsigned SourceFileId, unsigned SourceLineNum, const MCSymbol *FnStartSym, const MCSymbol *FnEndSym) override
This implements the CodeView '.cv_inline_linetable' assembler directive.
void
emitCVDefRangeDirective (ArrayRef< std::pair< const MCSymbol *, const MCSymbol * > > Ranges, StringRef FixedSizePortion) override
This implements the CodeView '.cv_def_range' assembler directive.
void
emitCVStringTableDirective () override
This implements the CodeView '.cv_stringtable' assembler directive.
void
emitCVFileChecksumsDirective () override
This implements the CodeView '.cv_filechecksums' assembler directive.
void
emitCVFileChecksumOffsetDirective (unsigned FileNo) override
This implements the CodeView '.cv_filechecksumoffset' assembler directive.
void
emitRelocDirective (const MCExpr &Offset, StringRef Name, const MCExpr *Expr, SMLoc Loc={}) override
Record a relocation described by the .reloc directive.
void
emitFill (const MCExpr &NumBytes, uint64_t FillValue, SMLoc Loc=SMLoc()) override
Emit Size bytes worth of the value specified by FillValue.
void
emitFill (const MCExpr &NumValues, int64_t Size, int64_t Expr, SMLoc Loc=SMLoc()) override
Emit NumValues copies of Size bytes.
void
emitNops (int64_t NumBytes, int64_t ControlledNopLength, SMLoc Loc, const MCSubtargetInfo &STI) override
void
emitFileDirective (StringRef Filename) override
Switch to a new logical file.
void
emitFileDirective (StringRef Filename, StringRef CompilerVersion, StringRef TimeStamp, StringRef Description) override
Emit ".file assembler diretive with additioal info.
void
emitAddrsig () override
void
emitAddrsigSym (const MCSymbol *Sym) override
void
finishImpl () override
Streamer specific finalization.
void
emitAbsoluteSymbolDiff (const MCSymbol *Hi, const MCSymbol *Lo, unsigned Size) override
Emit the absolute difference between two symbols if possible.
void
emitAbsoluteSymbolDiffAsULEB128 (const MCSymbol *Hi, const MCSymbol *Lo) override
Emit the absolute difference between two symbols encoded with ULEB128.
mayHaveInstructions (MCSection &Sec) const override
void
emitPendingAssignments (MCSymbol *Symbol)
Emits pending conditional assignments that depend on Symbol being emitted.
void
emitFill (uint64_t NumBytes, uint8_t FillValue)
Emit NumBytes bytes worth of the value specified by FillValue.
Public Member Functions inherited from llvm::MCStreamer
MCStreamer (const MCStreamer &)=delete
operator= (const MCStreamer &)=delete
virtual
~MCStreamer ()
void
visitUsedExpr (const MCExpr &Expr)
void
setTargetStreamer (MCTargetStreamer *TS)
void
setStartTokLocPtr (const SMLoc *Loc)
getContext () const
void
setUseAssemblerInfoForParsing (bool v)
getUseAssemblerInfoForParsing ()
void
MCSymbol *
EnsureValidWinFrameInfo (SMLoc Loc)
Retrieve the current frame info if one is available and it is not yet closed.
hasUnfinishedDwarfFrameInfo ()
ArrayRef< std::unique_ptr< WinEH::FrameInfo > >
void
generateCompactUnwindEncodings (MCAsmBackend *MAB)
virtual void
emitIdent (StringRef IdentString)
Emit the "identifiers" directive.
emitDwarfFileDirective (unsigned FileNo, StringRef Directory, StringRef Filename, std::optional< MD5::MD5Result > Checksum=std::nullopt, std::optional< StringRef > Source=std::nullopt, unsigned CUID=0)
Associate a filename with a specified logical file number.
tryEmitDwarfFileDirective (unsigned FileNo, StringRef Directory, StringRef Filename, std::optional< MD5::MD5Result > Checksum=std::nullopt, std::optional< StringRef > Source=std::nullopt, unsigned CUID=0)
Associate a filename with a specified logical file number.
virtual void
emitDwarfFile0Directive (StringRef Directory, StringRef Filename, std::optional< MD5::MD5Result > Checksum, std::optional< StringRef > Source, unsigned CUID=0)
Specify the "root" file of the compilation, using the ".file 0" extension.
virtual void
virtual void
virtual void
emitDwarfLocLabelDirective (SMLoc Loc, StringRef Name)
This implements the '.loc_label Name' directive.
virtual bool
emitCVFileDirective (unsigned FileNo, StringRef Filename, ArrayRef< uint8_t > Checksum, unsigned ChecksumKind)
Associate a filename with a specified logical file number, and also specify that file's checksum information.
virtual bool
emitCVFuncIdDirective (unsigned FunctionId)
Introduces a function id for use with .cv_loc.
virtual bool
emitCVInlineSiteIdDirective (unsigned FunctionId, unsigned IAFunc, unsigned IAFile, unsigned IALine, unsigned IACol, SMLoc Loc)
Introduces an inline call site id for use with .cv_loc.
virtual void
emitCVDefRangeDirective (ArrayRef< std::pair< const MCSymbol *, const MCSymbol * > > Ranges, codeview::DefRangeRegisterRelHeader DRHdr)
virtual void
emitCVDefRangeDirective (ArrayRef< std::pair< const MCSymbol *, const MCSymbol * > > Ranges, codeview::DefRangeSubfieldRegisterHeader DRHdr)
virtual void
emitCVDefRangeDirective (ArrayRef< std::pair< const MCSymbol *, const MCSymbol * > > Ranges, codeview::DefRangeRegisterHeader DRHdr)
virtual void
emitCVDefRangeDirective (ArrayRef< std::pair< const MCSymbol *, const MCSymbol * > > Ranges, codeview::DefRangeFramePointerRelHeader DRHdr)
virtual void
emitCVFPOData (const MCSymbol *ProcSym, SMLoc Loc={})
This implements the CodeView '.cv_fpo_data' assembler directive.
virtual MCSymbol *
getDwarfLineTableSymbol (unsigned CUID)
void
emitCFIStartProc (bool IsSimple, SMLoc Loc=SMLoc())
void
virtual void
emitCFIDefCfa (int64_t Register, int64_t Offset, SMLoc Loc={})
virtual void
emitCFIDefCfaOffset (int64_t Offset, SMLoc Loc={})
virtual void
emitCFIDefCfaRegister (int64_t Register, SMLoc Loc={})
virtual void
emitCFILLVMDefAspaceCfa (int64_t Register, int64_t Offset, int64_t AddressSpace, SMLoc Loc={})
virtual void
emitCFIOffset (int64_t Register, int64_t Offset, SMLoc Loc={})
virtual void
emitCFIPersonality (const MCSymbol *Sym, unsigned Encoding)
virtual void
emitCFILsda (const MCSymbol *Sym, unsigned Encoding)
virtual void
emitCFIRememberState (SMLoc Loc)
virtual void
emitCFIRestoreState (SMLoc Loc)
virtual void
emitCFISameValue (int64_t Register, SMLoc Loc={})
virtual void
emitCFIRestore (int64_t Register, SMLoc Loc={})
virtual void
emitCFIRelOffset (int64_t Register, int64_t Offset, SMLoc Loc)
virtual void
emitCFIAdjustCfaOffset (int64_t Adjustment, SMLoc Loc={})
virtual void
emitCFIEscape (StringRef Values, SMLoc Loc={})
virtual void
emitCFIReturnColumn (int64_t Register)
virtual void
emitCFIGnuArgsSize (int64_t Size, SMLoc Loc={})
virtual void
virtual void
emitCFIUndefined (int64_t Register, SMLoc Loc={})
virtual void
emitCFIRegister (int64_t Register1, int64_t Register2, SMLoc Loc={})
virtual void
emitCFIWindowSave (SMLoc Loc={})
virtual void
emitCFINegateRAState (SMLoc Loc={})
virtual void
emitCFINegateRAStateWithPC (SMLoc Loc={})
virtual void
emitCFILabelDirective (SMLoc Loc, StringRef Name)
virtual void
emitCFIValOffset (int64_t Register, int64_t Offset, SMLoc Loc={})
virtual void
emitWinCFIStartProc (const MCSymbol *Symbol, SMLoc Loc=SMLoc())
virtual void
emitWinCFIEndProc (SMLoc Loc=SMLoc())
virtual void
emitWinCFIFuncletOrFuncEnd (SMLoc Loc=SMLoc())
This is used on platforms, such as Windows on ARM64, that require function or funclet sizes to be emitted in .xdata before the End marker is emitted for the frame.
virtual void
emitWinCFIStartChained (SMLoc Loc=SMLoc())
virtual void
emitWinCFIEndChained (SMLoc Loc=SMLoc())
virtual void
emitWinCFIPushReg (MCRegister Register, SMLoc Loc=SMLoc())
virtual void
emitWinCFISetFrame (MCRegister Register, unsigned Offset, SMLoc Loc=SMLoc())
virtual void
emitWinCFIAllocStack (unsigned Size, SMLoc Loc=SMLoc())
virtual void
emitWinCFISaveReg (MCRegister Register, unsigned Offset, SMLoc Loc=SMLoc())
virtual void
emitWinCFISaveXMM (MCRegister Register, unsigned Offset, SMLoc Loc=SMLoc())
virtual void
emitWinCFIPushFrame (bool Code, SMLoc Loc=SMLoc())
virtual void
emitWinCFIEndProlog (SMLoc Loc=SMLoc())
virtual void
emitWinCFIBeginEpilogue (SMLoc Loc=SMLoc())
virtual void
emitWinCFIEndEpilogue (SMLoc Loc=SMLoc())
virtual void
emitWinCFIUnwindV2Start (SMLoc Loc=SMLoc())
virtual void
emitWinCFIUnwindVersion (uint8_t Version, SMLoc Loc=SMLoc())
virtual void
emitWinEHHandler (const MCSymbol *Sym, bool Unwind, bool Except, SMLoc Loc=SMLoc())
virtual void
emitWinEHHandlerData (SMLoc Loc=SMLoc())
virtual void
emitCGProfileEntry (const MCSymbolRefExpr *From, const MCSymbolRefExpr *To, uint64_t Count)
getAssociatedPDataSection (const MCSection *TextSec)
Get the .pdata section used for the given section.
getAssociatedXDataSection (const MCSection *TextSec)
Get the .xdata section used for the given section.
virtual void
virtual void
emitPseudoProbe (uint64_t Guid, uint64_t Index, uint64_t Type, uint64_t Attr, uint64_t Discriminator, const MCPseudoProbeInlineStack &InlineStack, MCSymbol *FnSym)
Emit the a pseudo probe into the current section.
void
emitRawText (const Twine &String)
If this file is backed by a assembly streamer, this dumps the specified string in the output .s file.
void
Finish emission of machine code.
void
Emit a special value of 0xffffffff if producing 64-bit debugging info.
virtual void
emitDwarfUnitLength (uint64_t Length, const Twine &Comment)
Emit a unit length field.
virtual MCSymbol *
emitDwarfUnitLength (const Twine &Prefix, const Twine &Comment)
Emit a unit length field.
virtual void
emitDwarfLineStartLabel (MCSymbol *StartSym)
Emit the debug line start label.
virtual bool
Return true if this streamer supports verbose assembly and if it is enabled.
virtual bool
Return true if this asm streamer supports emitting unformatted text to the .s file with EmitRawText.
virtual void
AddComment (const Twine &T, bool EOL=true)
Add a textual comment.
virtual raw_ostream &
getCommentOS ()
Return a raw_ostream that comments can be written to.
virtual void
emitRawComment (const Twine &T, bool TabPrefix=true)
Print T and prefix it with the comment string (normally #) and optionally a tab.
virtual void
addExplicitComment (const Twine &T)
Add explicit comment T.
virtual void
Emit added explicit comments.
virtual void
addBlankLine ()
Emit a blank line to a .s file to pretty it up.
Return the current section that the streamer is emitting code to.
getCurrentSectionOnly () const
Return the previous section that the streamer is emitting code to.
size_t
void
pushSection ()
Save the current and previous section on the section stack.
virtual bool
popSection ()
Restore the current and previous section from the section stack.
virtual void
switchSection (MCSection *Section, uint32_t Subsec=0)
Set the current section where code is being emitted to Section.
switchSection (MCSection *Section, const MCExpr *)
void
switchSectionNoPrint (MCSection *Section)
Similar to switchSection, but does not print the section directive.
virtual void
initSections (bool NoExecStack, const MCSubtargetInfo &STI)
Create the default sections and set the initial one.
MCSymbol *
endSection (MCSection *Section)
virtual StringRef
getMnemonic (const MCInst &MI) const
Returns the mnemonic for MI, if the streamer has access to a instruction printer and returns an empty string otherwise.
virtual void
emitEHSymAttributes (const MCSymbol *Symbol, MCSymbol *EHSymbol)
virtual void
Emit a .subsection_via_symbols directive.
virtual void
emitLinkerOptions (ArrayRef< std::string > Kind)
Emit the given list Options of strings as linker options into the output.
virtual void
emitDataRegion (MCDataRegionType Kind)
Note in the output the specified region Kind.
virtual void
emitVersionMin (MCVersionMinType Type, unsigned Major, unsigned Minor, unsigned Update, VersionTuple SDKVersion)
Specify the Mach-O minimum deployment target version.
virtual void
emitBuildVersion (unsigned Platform, unsigned Major, unsigned Minor, unsigned Update, VersionTuple SDKVersion)
Emit/Specify Mach-O build version command.
virtual void
emitDarwinTargetVariantBuildVersion (unsigned Platform, unsigned Major, unsigned Minor, unsigned Update, VersionTuple SDKVersion)
void
emitVersionForTarget (const Triple &Target, const VersionTuple &SDKVersion, const Triple *DarwinTargetVariantTriple, const VersionTuple &DarwinTargetVariantSDKVersion)
virtual void
emitSymbolDesc (MCSymbol *Symbol, unsigned DescValue)
Set the DescValue for the Symbol.
virtual void
beginCOFFSymbolDef (const MCSymbol *Symbol)
Start emitting COFF symbol definition.
virtual void
emitCOFFSymbolStorageClass (int StorageClass)
Emit the storage class of the symbol.
virtual void
emitCOFFSymbolType (int Type)
Emit the type of the symbol.
virtual void
Marks the end of the symbol definition.
virtual void
emitCOFFSafeSEH (MCSymbol const *Symbol)
virtual void
emitCOFFSymbolIndex (MCSymbol const *Symbol)
Emits the symbol table index of a Symbol into the current section.
virtual void
emitCOFFSectionIndex (MCSymbol const *Symbol)
Emits a COFF section index.
virtual void
emitCOFFSecRel32 (MCSymbol const *Symbol, uint64_t Offset)
Emits a COFF section relative relocation.
virtual void
emitCOFFImgRel32 (MCSymbol const *Symbol, int64_t Offset)
Emits a COFF image relative relocation.
virtual void
emitCOFFSecNumber (MCSymbol const *Symbol)
Emits the physical number of the section containing the given symbol as assigned during object writing (i.e., this is not a runtime relocation).
virtual void
emitCOFFSecOffset (MCSymbol const *Symbol)
Emits the offset of the symbol from the beginning of the section during object writing (i.e., this is not a runtime relocation).
virtual void
emitXCOFFLocalCommonSymbol (MCSymbol *LabelSym, uint64_t Size, MCSymbol *CsectSym, Align Alignment)
Emits an lcomm directive with XCOFF csect information.
virtual void
emitXCOFFSymbolLinkageWithVisibility (MCSymbol *Symbol, MCSymbolAttr Linkage, MCSymbolAttr Visibility)
Emit a symbol's linkage and visibility with a linkage directive for XCOFF.
virtual void
emitXCOFFRenameDirective (const MCSymbol *Name, StringRef Rename)
Emit a XCOFF .rename directive which creates a synonym for an illegal or undesirable name.
virtual void
emitXCOFFExceptDirective (const MCSymbol *Symbol, const MCSymbol *Trap, unsigned Lang, unsigned Reason, unsigned FunctionSize, bool hasDebug)
Emit an XCOFF .except directive which adds information about a trap instruction to the object file exception section.
virtual void
emitXCOFFRefDirective (const MCSymbol *Symbol)
Emit a XCOFF .ref directive which creates R_REF type entry in the relocation table for one or more symbols.
virtual void
emitXCOFFCInfoSym (StringRef Name, StringRef Metadata)
Emit a C_INFO symbol with XCOFF embedded metadata to the .info section.
virtual void
emitELFSize (MCSymbol *Symbol, const MCExpr *Value)
Emit an ELF .size directive.
virtual void
emitELFSymverDirective (const MCSymbol *OriginalSym, StringRef Name, bool KeepOriginalSym)
Emit an ELF .symver directive.
virtual void
emitLOHDirective (MCLOHType Kind, const MCLOHArgs &Args)
Emit a Linker Optimization Hint (LOH) directive.
virtual void
emitGNUAttribute (unsigned Tag, unsigned Value)
Emit a .gnu_attribute directive.
virtual void
emitLocalCommonSymbol (MCSymbol *Symbol, uint64_t Size, Align ByteAlignment)
Emit a local common (.lcomm) symbol.
virtual void
emitZerofill (MCSection *Section, MCSymbol *Symbol=nullptr, uint64_t Size=0, Align ByteAlignment=Align(1), SMLoc Loc=SMLoc())
Emit the zerofill section and an optional symbol.
virtual void
emitTBSSSymbol (MCSection *Section, MCSymbol *Symbol, uint64_t Size, Align ByteAlignment=Align(1))
Emit a thread local bss (.tbss) symbol.
virtual void
emitBinaryData (StringRef Data)
Functionally identical to EmitBytes.
void
emitValue (const MCExpr *Value, unsigned Size, SMLoc Loc=SMLoc())
virtual void
emitIntValue (uint64_t Value, unsigned Size)
Special case of EmitValue that avoids the client having to pass in a MCExpr for constant integers.
virtual void
emitIntValue (const APInt &Value)
virtual void
emitIntValueInHex (uint64_t Value, unsigned Size)
Special case of EmitValue that avoids the client having to pass in a MCExpr for constant integers & prints in Hex format for certain modes.
void
void
void
void
virtual void
emitIntValueInHexWithPadding (uint64_t Value, unsigned Size)
Special case of EmitValue that avoids the client having to pass in a MCExpr for constant integers & prints in Hex format for certain modes, pads the field with leading zeros to Size width.
emitULEB128IntValue (uint64_t Value, unsigned PadTo=0)
Special case of EmitULEB128Value that avoids the client having to pass in a MCExpr for constant integers.
emitSLEB128IntValue (int64_t Value)
Special case of EmitSLEB128Value that avoids the client having to pass in a MCExpr for constant integers.
void
emitSymbolValue (const MCSymbol *Sym, unsigned Size, bool IsSectionRelative=false)
Special case of EmitValue that avoids the client having to pass in a MCExpr for MCSymbols.
void
emitFill (uint64_t NumBytes, uint8_t FillValue)
Emit NumBytes bytes worth of the value specified by FillValue.
void
Emit NumBytes worth of zeros.
Definition at line 18 of file MCGOFFStreamer.h.