|
LLVM
3.7.0
|
Streaming object file generation interface. More...
#include <MCObjectStreamer.h>
Public Member Functions | |
| void | reset () override |
| state management More... | |
| bool | isIntegratedAssemblerRequired () const override |
| Object streamers require the integrated assembler. More... | |
| void | EmitFrames (MCAsmBackend *MAB) |
| void | EmitCFISections (bool EH, bool Debug) override |
| void | visitUsedSymbol (const MCSymbol &Sym) override |
| MCAssembler & | getAssembler () |
MCStreamer Interface | |
| void | EmitLabel (MCSymbol *Symbol) override |
Emit a label for Symbol into the current section. More... | |
| void | EmitAssignment (MCSymbol *Symbol, const MCExpr *Value) override |
Emit an assignment of Value to Symbol. More... | |
| void | EmitValueImpl (const MCExpr *Value, unsigned Size, const SMLoc &Loc=SMLoc()) override |
Emit the expression Value into the output as a native integer of the given Size bytes. More... | |
| void | EmitULEB128Value (const MCExpr *Value) override |
| void | EmitSLEB128Value (const MCExpr *Value) override |
| void | EmitWeakReference (MCSymbol *Alias, const MCSymbol *Symbol) override |
Emit an weak reference from Alias to Symbol. More... | |
| void | ChangeSection (MCSection *Section, const MCExpr *Subsection) override |
| Update streamer for a new active section. More... | |
| void | EmitInstruction (const MCInst &Inst, const MCSubtargetInfo &STI) override |
Emit the given Instruction into the current section. More... | |
| virtual void | EmitInstToFragment (const MCInst &Inst, const MCSubtargetInfo &) |
| Emit an instruction to a special fragment, because this instruction can change its size during relaxation. More... | |
| void | EmitBundleAlignMode (unsigned AlignPow2) override |
| Set the bundle alignment mode from now on in the section. More... | |
| void | EmitBundleLock (bool AlignToEnd) override |
| The following instructions are a bundle-locked group. More... | |
| void | EmitBundleUnlock () override |
| Ends a bundle-locked group. More... | |
| void | EmitBytes (StringRef Data) override |
Emit the bytes in Data into the output. More... | |
| void | EmitValueToAlignment (unsigned ByteAlignment, int64_t Value=0, unsigned ValueSize=1, unsigned MaxBytesToEmit=0) override |
Emit some number of copies of Value until the byte alignment ByteAlignment is reached. More... | |
| void | EmitCodeAlignment (unsigned ByteAlignment, unsigned MaxBytesToEmit=0) override |
Emit nops until the byte alignment ByteAlignment is reached. More... | |
| bool | EmitValueToOffset (const MCExpr *Offset, unsigned char Value) override |
Emit some number of copies of Value until the byte offset Offset is reached. More... | |
| void | EmitDwarfLocDirective (unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, unsigned Discriminator, StringRef FileName) override |
| This implements the DWARF2 '.loc fileno lineno ...' assembler directive. More... | |
| void | EmitDwarfAdvanceLineAddr (int64_t LineDelta, const MCSymbol *LastLabel, const MCSymbol *Label, unsigned PointerSize) |
| void | EmitDwarfAdvanceFrameAddr (const MCSymbol *LastLabel, const MCSymbol *Label) |
| void | EmitGPRel32Value (const MCExpr *Value) override |
Emit the expression Value into the output as a gprel32 (32-bit GP relative) value. More... | |
| void | EmitGPRel64Value (const MCExpr *Value) override |
Emit the expression Value into the output as a gprel64 (64-bit GP relative) value. More... | |
| void | EmitFill (uint64_t NumBytes, uint8_t FillValue) override |
| Emit NumBytes bytes worth of the value specified by FillValue. More... | |
| void | EmitZeros (uint64_t NumBytes) override |
| Emit NumBytes worth of zeros. More... | |
| void | FinishImpl () override |
| Streamer specific finalization. More... | |
| void | emitAbsoluteSymbolDiff (const MCSymbol *Hi, const MCSymbol *Lo, unsigned Size) override |
| Emit the absolute difference between two symbols if possible. More... | |
| bool | mayHaveInstructions (MCSection &Sec) const override |
Public Member Functions inherited from llvm::MCStreamer | |
| virtual | ~MCStreamer () |
| void | visitUsedExpr (const MCExpr &Expr) |
| void | setTargetStreamer (MCTargetStreamer *TS) |
| MCContext & | getContext () const |
| MCTargetStreamer * | getTargetStreamer () |
| unsigned | getNumFrameInfos () |
| ArrayRef< MCDwarfFrameInfo > | getDwarfFrameInfos () const |
| unsigned | getNumWinFrameInfos () |
| ArrayRef< WinEH::FrameInfo * > | getWinFrameInfos () const |
| void | generateCompactUnwindEncodings (MCAsmBackend *MAB) |
| virtual void | EmitFileDirective (StringRef Filename) |
| Switch to a new logical file. More... | |
| virtual void | EmitIdent (StringRef IdentString) |
| Emit the "identifiers" directive. More... | |
| virtual unsigned | EmitDwarfFileDirective (unsigned FileNo, StringRef Directory, StringRef Filename, unsigned CUID=0) |
| Associate a filename with a specified logical file number. More... | |
| virtual MCSymbol * | getDwarfLineTableSymbol (unsigned CUID) |
| void | EmitCFIStartProc (bool IsSimple) |
| void | EmitCFIEndProc () |
| virtual void | EmitCFIDefCfa (int64_t Register, int64_t Offset) |
| virtual void | EmitCFIDefCfaOffset (int64_t Offset) |
| virtual void | EmitCFIDefCfaRegister (int64_t Register) |
| virtual void | EmitCFIOffset (int64_t Register, int64_t Offset) |
| virtual void | EmitCFIPersonality (const MCSymbol *Sym, unsigned Encoding) |
| virtual void | EmitCFILsda (const MCSymbol *Sym, unsigned Encoding) |
| virtual void | EmitCFIRememberState () |
| virtual void | EmitCFIRestoreState () |
| virtual void | EmitCFISameValue (int64_t Register) |
| virtual void | EmitCFIRestore (int64_t Register) |
| virtual void | EmitCFIRelOffset (int64_t Register, int64_t Offset) |
| virtual void | EmitCFIAdjustCfaOffset (int64_t Adjustment) |
| virtual void | EmitCFIEscape (StringRef Values) |
| virtual void | EmitCFISignalFrame () |
| virtual void | EmitCFIUndefined (int64_t Register) |
| virtual void | EmitCFIRegister (int64_t Register1, int64_t Register2) |
| virtual void | EmitCFIWindowSave () |
| virtual void | EmitWinCFIStartProc (const MCSymbol *Symbol) |
| virtual void | EmitWinCFIEndProc () |
| virtual void | EmitWinCFIStartChained () |
| virtual void | EmitWinCFIEndChained () |
| virtual void | EmitWinCFIPushReg (unsigned Register) |
| virtual void | EmitWinCFISetFrame (unsigned Register, unsigned Offset) |
| virtual void | EmitWinCFIAllocStack (unsigned Size) |
| virtual void | EmitWinCFISaveReg (unsigned Register, unsigned Offset) |
| virtual void | EmitWinCFISaveXMM (unsigned Register, unsigned Offset) |
| virtual void | EmitWinCFIPushFrame (bool Code) |
| virtual void | EmitWinCFIEndProlog () |
| virtual void | EmitWinEHHandler (const MCSymbol *Sym, bool Unwind, bool Except) |
| virtual void | EmitWinEHHandlerData () |
| void | EmitRawText (const Twine &String) |
| If this file is backed by a assembly streamer, this dumps the specified string in the output .s file. More... | |
| virtual void | Flush () |
| Causes any cached state to be written out. More... | |
| void | Finish () |
| Finish emission of machine code. More... | |
| virtual bool | isVerboseAsm () const |
| Return true if this streamer supports verbose assembly and if it is enabled. More... | |
| virtual bool | hasRawTextSupport () const |
| Return true if this asm streamer supports emitting unformatted text to the .s file with EmitRawText. More... | |
| virtual void | AddComment (const Twine &T) |
| Add a textual command. More... | |
| virtual raw_ostream & | GetCommentOS () |
| Return a raw_ostream that comments can be written to. More... | |
| virtual void | emitRawComment (const Twine &T, bool TabPrefix=true) |
| Print T and prefix it with the comment string (normally #) and optionally a tab. More... | |
| virtual void | AddBlankLine () |
| AddBlankLine - Emit a blank line to a .s file to pretty it up. More... | |
| MCSectionSubPair | getCurrentSection () const |
| Return the current section that the streamer is emitting code to. More... | |
| MCSection * | getCurrentSectionOnly () const |
| MCSectionSubPair | getPreviousSection () const |
| Return the previous section that the streamer is emitting code to. More... | |
| unsigned | GetSymbolOrder (const MCSymbol *Sym) const |
| Returns an index to represent the order a symbol was emitted in. More... | |
| void | PushSection () |
| Save the current and previous section on the section stack. More... | |
| bool | PopSection () |
| Restore the current and previous section from the section stack. More... | |
| bool | SubSection (const MCExpr *Subsection) |
| virtual void | SwitchSection (MCSection *Section, const MCExpr *Subsection=nullptr) |
Set the current section where code is being emitted to Section. More... | |
| void | SwitchSectionNoChange (MCSection *Section, const MCExpr *Subsection=nullptr) |
Set the current section where code is being emitted to Section. More... | |
| virtual void | InitSections (bool NoExecStack) |
| Create the default sections and set the initial one. More... | |
| MCSymbol * | endSection (MCSection *Section) |
| void | AssignSection (MCSymbol *Symbol, MCSection *Section) |
| Sets the symbol's section. More... | |
| virtual void | EmitEHSymAttributes (const MCSymbol *Symbol, MCSymbol *EHSymbol) |
| virtual void | EmitAssemblerFlag (MCAssemblerFlag Flag) |
Note in the output the specified Flag. More... | |
| virtual void | EmitLinkerOptions (ArrayRef< std::string > Kind) |
Emit the given list Options of strings as linker options into the output. More... | |
| virtual void | EmitDataRegion (MCDataRegionType Kind) |
Note in the output the specified region Kind. More... | |
| virtual void | EmitVersionMin (MCVersionMinType, unsigned Major, unsigned Minor, unsigned Update) |
| Specify the MachO minimum deployment target version. More... | |
| virtual void | EmitThumbFunc (MCSymbol *Func) |
Note in the output that the specified Func is a Thumb mode function (ARM target only). More... | |
| virtual bool | EmitSymbolAttribute (MCSymbol *Symbol, MCSymbolAttr Attribute)=0 |
Add the given Attribute to Symbol. More... | |
| virtual void | EmitSymbolDesc (MCSymbol *Symbol, unsigned DescValue) |
Set the DescValue for the Symbol. More... | |
| virtual void | BeginCOFFSymbolDef (const MCSymbol *Symbol) |
| Start emitting COFF symbol definition. More... | |
| virtual void | EmitCOFFSymbolStorageClass (int StorageClass) |
| Emit the storage class of the symbol. More... | |
| virtual void | EmitCOFFSymbolType (int Type) |
| Emit the type of the symbol. More... | |
| virtual void | EndCOFFSymbolDef () |
| Marks the end of the symbol definition. More... | |
| virtual void | EmitCOFFSafeSEH (MCSymbol const *Symbol) |
| virtual void | EmitCOFFSectionIndex (MCSymbol const *Symbol) |
| Emits a COFF section index. More... | |
| virtual void | EmitCOFFSecRel32 (MCSymbol const *Symbol) |
| Emits a COFF section relative relocation. More... | |
| virtual void | emitELFSize (MCSymbolELF *Symbol, const MCExpr *Value) |
| Emit an ELF .size directive. More... | |
| virtual void | EmitLOHDirective (MCLOHType Kind, const MCLOHArgs &Args) |
| Emit a Linker Optimization Hint (LOH) directive. More... | |
| virtual void | EmitCommonSymbol (MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment)=0 |
| Emit a common symbol. More... | |
| virtual void | EmitLocalCommonSymbol (MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment) |
| Emit a local common (.lcomm) symbol. More... | |
| virtual void | EmitZerofill (MCSection *Section, MCSymbol *Symbol=nullptr, uint64_t Size=0, unsigned ByteAlignment=0)=0 |
| Emit the zerofill section and an optional symbol. More... | |
| virtual void | EmitTBSSSymbol (MCSection *Section, MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment=0) |
| Emit a thread local bss (.tbss) symbol. More... | |
| void | EmitValue (const MCExpr *Value, unsigned Size, const 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. More... | |
| void | EmitULEB128IntValue (uint64_t Value, unsigned Padding=0) |
| Special case of EmitULEB128Value that avoids the client having to pass in a MCExpr for constant integers. More... | |
| void | EmitSLEB128IntValue (int64_t Value) |
| Special case of EmitSLEB128Value that avoids the client having to pass in a MCExpr for constant integers. More... | |
| 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. More... | |
Protected Member Functions | |
| MCObjectStreamer (MCContext &Context, MCAsmBackend &TAB, raw_pwrite_stream &OS, MCCodeEmitter *Emitter) | |
| ~MCObjectStreamer () override | |
| MCFragment * | getCurrentFragment () const |
| void | insert (MCFragment *F) |
| MCDataFragment * | getOrCreateDataFragment () |
| Get a data fragment to write into, creating a new one if the current fragment is not a data fragment. More... | |
| bool | changeSectionImpl (MCSection *Section, const MCExpr *Subsection) |
| void | flushPendingLabels (MCFragment *F, uint64_t FOffset=0) |
| If any labels have been emitted but not assigned fragments, ensure that they get assigned, either to F if possible or to a new data fragment. More... | |
Protected Member Functions inherited from llvm::MCStreamer | |
| MCStreamer (MCContext &Ctx) | |
| WinEH::FrameInfo * | getCurrentWinFrameInfo () |
| virtual void | EmitWindowsUnwindTables () |
| virtual void | EmitRawTextImpl (StringRef String) |
| EmitRawText - If this file is backed by an assembly streamer, this dumps the specified string in the output .s file. More... | |
Streaming object file generation interface.
This class provides an implementation of the MCStreamer interface which is suitable for use with the assembler backend. Specific object file formats are expected to subclass this interface to implement directives specific to that file format or custom semantics expected by the object writer implementation.
Definition at line 36 of file MCObjectStreamer.h.
|
protected |
Definition at line 26 of file MCObjectStreamer.cpp.
|
overrideprotected |
Definition at line 34 of file MCObjectStreamer.cpp.
References llvm::MCAssembler::getBackend(), llvm::MCAssembler::getEmitter(), and llvm::MCAssembler::getWriter().
Update streamer for a new active section.
This is called by PopSection and SwitchSection, if the current section changes.
Reimplemented from llvm::MCStreamer.
Definition at line 196 of file MCObjectStreamer.cpp.
References changeSectionImpl().
Referenced by llvm::MCELFStreamer::ChangeSection().
|
protected |
Definition at line 201 of file MCObjectStreamer.cpp.
References flushPendingLabels(), getAssembler(), llvm::MCSection::getSubsectionInsertionPoint(), llvm::MCAssembler::registerSection(), and llvm::report_fatal_error().
Referenced by ChangeSection().
|
overridevirtual |
Emit the absolute difference between two symbols if possible.
Emit the absolute difference between Hi and Lo, as long as we can compute it. Currently, that requires that both symbols are in the same data fragment. Otherwise, do nothing and return false.
Hi is greater than the offset Lo. Reimplemented from llvm::MCStreamer.
Definition at line 57 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::emitAbsoluteSymbolDiff(), llvm::MCStreamer::EmitIntValue(), llvm::MCSymbol::getFragment(), and llvm::MCSymbol::getOffset().
Emit an assignment of Value to Symbol.
This corresponds to an assembler statement such as: symbol = value
The assignment generates no code, but has the side effect of binding the value in the current context. For the assembly streamer, this prints the binding into the .s file.
| Symbol | - The symbol being assigned to. |
| Value | - The value for the symbol. |
Reimplemented from llvm::MCStreamer.
Definition at line 219 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::EmitAssignment(), getAssembler(), and llvm::MCAssembler::registerSymbol().
|
overridevirtual |
Set the bundle alignment mode from now on in the section.
The argument is the power of 2 to which the alignment is set. The value 0 means turn the bundle alignment off.
Reimplemented from llvm::MCStreamer.
Definition at line 288 of file MCObjectStreamer.cpp.
References BundlingNotImplementedMsg, and llvm_unreachable.
|
overridevirtual |
The following instructions are a bundle-locked group.
| AlignToEnd | - If true, the bundle-locked group will be aligned to the end of a bundle. |
Reimplemented from llvm::MCStreamer.
Definition at line 292 of file MCObjectStreamer.cpp.
References BundlingNotImplementedMsg, and llvm_unreachable.
|
overridevirtual |
Ends a bundle-locked group.
Reimplemented from llvm::MCStreamer.
Definition at line 296 of file MCObjectStreamer.cpp.
References BundlingNotImplementedMsg, and llvm_unreachable.
|
overridevirtual |
Emit the bytes in Data into the output.
This is used to implement assembler directives such as .byte, .ascii, etc.
Reimplemented from llvm::MCStreamer.
Definition at line 364 of file MCObjectStreamer.cpp.
References llvm::SmallVectorImpl< T >::append(), llvm::StringRef::begin(), llvm::StringRef::end(), flushPendingLabels(), llvm::MCEncodedFragmentWithContents< ContentsSize >::getContents(), llvm::MCStreamer::getCurrentSection(), getOrCreateDataFragment(), llvm::MCLineEntry::Make(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by llvm::MCDwarfFrameEmitter::EmitAdvanceLoc(), llvm::MCWinCOFFStreamer::EmitCommonSymbol(), and llvm::MCELFStreamer::EmitIdent().
Reimplemented from llvm::MCStreamer.
Definition at line 117 of file MCObjectStreamer.cpp.
References Debug, and llvm::MCStreamer::EmitCFISections().
|
overridevirtual |
Emit nops until the byte alignment ByteAlignment is reached.
This used to align code where the alignment bytes may be executed. This can emit different bytes for different sizes to optimize execution.
| ByteAlignment | - The alignment to reach. This must be a power of two on some targets. |
| MaxBytesToEmit | - The maximum numbers of bytes to emit, or 0. If the alignment cannot be reached in this many bytes, no bytes are emitted. |
Reimplemented from llvm::MCStreamer.
Definition at line 385 of file MCObjectStreamer.cpp.
References EmitValueToAlignment(), and getCurrentFragment().
Referenced by llvm::MCWinCOFFStreamer::InitSections(), and llvm::MCELFStreamer::InitSections().
| void MCObjectStreamer::EmitDwarfAdvanceFrameAddr | ( | const MCSymbol * | LastLabel, |
| const MCSymbol * | Label | ||
| ) |
Definition at line 353 of file MCObjectStreamer.cpp.
References buildSymbolDiff(), llvm::MCDwarfFrameEmitter::EmitAdvanceLoc(), getAssembler(), and insert().
| void MCObjectStreamer::EmitDwarfAdvanceLineAddr | ( | int64_t | LineDelta, |
| const MCSymbol * | LastLabel, | ||
| const MCSymbol * | Label, | ||
| unsigned | PointerSize | ||
| ) |
Definition at line 336 of file MCObjectStreamer.cpp.
References buildSymbolDiff(), llvm::MCDwarfLineAddr::Emit(), emitDwarfSetLineAddr(), getAssembler(), and insert().
Referenced by EmitDwarfLineTable().
|
overridevirtual |
This implements the DWARF2 '.loc fileno lineno ...' assembler directive.
Reimplemented from llvm::MCStreamer.
Definition at line 300 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::EmitDwarfLocDirective(), llvm::MCStreamer::getCurrentSection(), and llvm::MCLineEntry::Make().
|
overridevirtual |
Emit NumBytes bytes worth of the value specified by FillValue.
EmitFill - Emit NumBytes bytes worth of the value specified by FillValue.
This implements directives such as '.space'.
Reimplemented from llvm::MCStreamer.
Definition at line 433 of file MCObjectStreamer.cpp.
References llvm::SmallVectorImpl< T >::append(), flushPendingLabels(), llvm::MCEncodedFragmentWithContents< ContentsSize >::getContents(), getOrCreateDataFragment(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by EmitValueToOffset().
| void MCObjectStreamer::EmitFrames | ( | MCAsmBackend * | MAB | ) |
Definition at line 81 of file MCObjectStreamer.cpp.
References llvm::MCDwarfFrameEmitter::Emit(), and llvm::MCStreamer::getNumFrameInfos().
Referenced by llvm::MCELFStreamer::FinishImpl().
Emit the expression Value into the output as a gprel32 (32-bit GP relative) value.
This is used to implement assembler directives such as .gprel32 on targets that support them.
Reimplemented from llvm::MCStreamer.
Definition at line 414 of file MCObjectStreamer.cpp.
References llvm::MCFixup::create(), llvm::FK_GPRel_4, flushPendingLabels(), llvm::MCEncodedFragmentWithContents< ContentsSize >::getContents(), llvm::MCEncodedFragmentWithFixups< ContentsSize, FixupsSize >::getFixups(), getOrCreateDataFragment(), llvm::SmallVectorImpl< T >::resize(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Emit the expression Value into the output as a gprel64 (64-bit GP relative) value.
This is used to implement assembler directives such as .gpdword on targets that support them.
Reimplemented from llvm::MCStreamer.
Definition at line 424 of file MCObjectStreamer.cpp.
References llvm::MCFixup::create(), llvm::FK_GPRel_4, flushPendingLabels(), llvm::MCEncodedFragmentWithContents< ContentsSize >::getContents(), llvm::MCEncodedFragmentWithFixups< ContentsSize, FixupsSize >::getFixups(), getOrCreateDataFragment(), llvm::SmallVectorImpl< T >::resize(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
|
overridevirtual |
Emit the given Instruction into the current section.
Reimplemented from llvm::MCStreamer.
Reimplemented in llvm::MipsELFStreamer, and llvm::HexagonMCELFStreamer.
Definition at line 228 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::EmitInstruction(), EmitInstToFragment(), getAssembler(), llvm::MCAssembler::getBackend(), llvm::MCStreamer::getCurrentSection(), llvm::MCStreamer::getCurrentSectionOnly(), llvm::MCAssembler::getRelaxAll(), llvm::MCSection::isBundleLocked(), llvm::MCAssembler::isBundlingEnabled(), llvm::MCLineEntry::Make(), llvm::MCAsmBackend::mayNeedRelaxation(), llvm::MCAsmBackend::relaxInstruction(), and llvm::MCSection::setHasInstructions().
Referenced by llvm::MipsTargetELFStreamer::emitDirectiveCpLoad(), llvm::MipsTargetELFStreamer::emitDirectiveCpsetup(), llvm::HexagonMCELFStreamer::EmitInstruction(), and llvm::MipsELFStreamer::EmitInstruction().
|
virtual |
Emit an instruction to a special fragment, because this instruction can change its size during relaxation.
Definition at line 265 of file MCObjectStreamer.cpp.
References llvm::SmallVectorImpl< T >::append(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::Code, llvm::MCCodeEmitter::encodeInstruction(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::raw_ostream::flush(), getAssembler(), llvm::MCEncodedFragmentWithContents< ContentsSize >::getContents(), llvm::MCAssembler::getEmitter(), llvm::MCEncodedFragmentWithFixups< ContentsSize, FixupsSize >::getFixups(), insert(), and llvm_unreachable.
Referenced by EmitInstruction().
|
overridevirtual |
Emit a label for Symbol into the current section.
This corresponds to an assembler statement such as: foo:
| Symbol | - The symbol to emit. A given symbol should only be emitted as a label once, and symbols emitted as a label should never be used in an assignment. |
Reimplemented from llvm::MCStreamer.
Reimplemented in llvm::MipsELFStreamer, and llvm::MCWinCOFFStreamer.
Definition at line 154 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::EmitLabel(), F(), getAssembler(), getCurrentFragment(), llvm::MCSymbol::getFragment(), llvm::MCAssembler::registerSymbol(), llvm::MCSymbol::setFragment(), and llvm::MCSymbol::setOffset().
Referenced by llvm::MCDwarfFrameEmitter::Emit(), llvm::MCDwarfLineTable::EmitCU(), llvm::MCWinCOFFStreamer::EmitLabel(), llvm::MCELFStreamer::EmitLabel(), EmitValueToOffset(), and llvm::MCLineEntry::Make().
Reimplemented from llvm::MCStreamer.
Definition at line 182 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::EmitSLEB128IntValue(), getAssembler(), and insert().
Reimplemented from llvm::MCStreamer.
Definition at line 173 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::EmitULEB128IntValue(), getAssembler(), and insert().
|
overridevirtual |
Emit the expression Value into the output as a native integer of the given Size bytes.
This is used to implement assembler directives such as .word, .quad, etc.
| Value | - The value to emit. |
| Size | - The size of the integer (in bytes) to emit. This must match a native machine width. |
| Loc | - The location of the expression for error reporting. |
Reimplemented from llvm::MCStreamer.
Reimplemented in llvm::MipsELFStreamer.
Definition at line 123 of file MCObjectStreamer.cpp.
References llvm::MCFixup::create(), llvm::MCStreamer::EmitIntValue(), llvm::MCStreamer::EmitValueImpl(), flushPendingLabels(), getAssembler(), llvm::MCEncodedFragmentWithContents< ContentsSize >::getContents(), llvm::MCStreamer::getCurrentSection(), llvm::MCEncodedFragmentWithFixups< ContentsSize, FixupsSize >::getFixups(), llvm::MCFixup::getKindForSize(), getOrCreateDataFragment(), llvm::MCLineEntry::Make(), llvm::SmallVectorImpl< T >::resize(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by llvm::MCELFStreamer::EmitValueImpl().
|
overridevirtual |
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
If the number of bytes need to emit for the alignment is not a multiple of ValueSize, then the contents of the emitted fill bytes is undefined.
This used to implement the .align assembler directive.
| ByteAlignment | - The alignment to reach. This must be a power of two on some targets. |
| Value | - The value to use when filling bytes. |
| ValueSize | - The size of the integer (in bytes) to emit for Value. This must match a native machine width. |
| MaxBytesToEmit | - The maximum numbers of bytes to emit, or 0. If the alignment cannot be reached in this many bytes, no bytes are emitted. |
Reimplemented from llvm::MCStreamer.
Definition at line 371 of file MCObjectStreamer.cpp.
References llvm::LCOMM::ByteAlignment, llvm::MCSection::getAlignment(), llvm::MCStreamer::getCurrentSection(), insert(), and llvm::MCSection::setAlignment().
Referenced by llvm::MCDwarfFrameEmitter::Emit(), EmitCodeAlignment(), and llvm::MCELFStreamer::EmitValueToAlignment().
|
overridevirtual |
Emit some number of copies of Value until the byte offset Offset is reached.
This is used to implement assembler directives such as .org.
| Offset | - The offset to reach. This may be an expression, but the expression must be associated with the current section. |
| Value | - The value to use when filling bytes. |
Reimplemented from llvm::MCStreamer.
Definition at line 391 of file MCObjectStreamer.cpp.
References llvm::MCSymbolRefExpr::create(), llvm::MCBinaryExpr::create(), llvm::MCContext::createTempSymbol(), EmitFill(), EmitLabel(), getAssembler(), llvm::MCStreamer::getContext(), insert(), llvm::MCBinaryExpr::Sub, and llvm::MCSymbolRefExpr::VK_None.
|
overridevirtual |
Emit an weak reference from Alias to Symbol.
This corresponds to an assembler statement such as: .weakref alias, symbol
| Alias | - The alias that is being created. |
| Symbol | - The symbol being aliased. |
Reimplemented from llvm::MCStreamer.
Definition at line 191 of file MCObjectStreamer.cpp.
References llvm::report_fatal_error().
|
overridevirtual |
Emit NumBytes worth of zeros.
The implementation in this class just redirects to EmitFill.
This function properly handles data in virtual sections.
Reimplemented from llvm::MCStreamer.
Definition at line 441 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::getCurrentSection(), insert(), and llvm::MCSection::isVirtualSection().
|
overridevirtual |
Streamer specific finalization.
Reimplemented from llvm::MCStreamer.
Reimplemented in llvm::MCWinCOFFStreamer.
Definition at line 448 of file MCObjectStreamer.cpp.
References llvm::MCDwarfLineTable::Emit(), llvm::MCGenDwarfInfo::Emit(), llvm::MCAssembler::Finish(), flushPendingLabels(), getAssembler(), and llvm::MCStreamer::getContext().
Referenced by llvm::MCWinCOFFStreamer::FinishImpl(), and llvm::MCELFStreamer::FinishImpl().
|
protected |
If any labels have been emitted but not assigned fragments, ensure that they get assigned, either to F if possible or to a new data fragment.
Optionally, it is also possible to provide an offset FOffset, which will be used as a symbol offset within the fragment.
Definition at line 41 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::getCurrentSectionOnly(), llvm::MCSection::getFragmentList(), llvm::iplist< NodeTy, Traits >::insert(), and llvm::MCFragment::setParent().
Referenced by changeSectionImpl(), EmitBytes(), EmitFill(), EmitGPRel32Value(), EmitGPRel64Value(), EmitValueImpl(), FinishImpl(), and insert().
|
inline |
Definition at line 87 of file MCObjectStreamer.h.
Referenced by llvm::MCELFStreamer::ChangeSection(), changeSectionImpl(), llvm::createELFStreamer(), llvm::MipsELFStreamer::createPendingLabelRelocs(), llvm::MCELFStreamer::EmitAssemblerFlag(), EmitAssignment(), llvm::MCELFStreamer::EmitBundleAlignMode(), llvm::MCELFStreamer::EmitBundleLock(), llvm::MCELFStreamer::EmitBundleUnlock(), llvm::MCWinCOFFStreamer::EmitCOFFSafeSEH(), llvm::MCWinCOFFStreamer::EmitCOFFSymbolStorageClass(), llvm::MCWinCOFFStreamer::EmitCOFFSymbolType(), llvm::MCELFStreamer::EmitCommonSymbol(), llvm::MCWinCOFFStreamer::EmitCommonSymbol(), llvm::MipsTargetELFStreamer::emitDirectiveAbiCalls(), llvm::MipsTargetELFStreamer::emitDirectiveCpLoad(), llvm::MipsTargetELFStreamer::emitDirectiveCpsetup(), llvm::MipsTargetELFStreamer::emitDirectiveEnd(), llvm::MipsTargetELFStreamer::emitDirectiveNaN2008(), llvm::MipsTargetELFStreamer::emitDirectiveNaNLegacy(), llvm::MipsTargetELFStreamer::emitDirectiveOptionPic0(), llvm::MipsTargetELFStreamer::emitDirectiveOptionPic2(), llvm::MipsTargetELFStreamer::emitDirectiveSetMicroMips(), llvm::MipsTargetELFStreamer::emitDirectiveSetMips16(), llvm::MipsTargetELFStreamer::emitDirectiveSetNoReorder(), EmitDwarfAdvanceFrameAddr(), EmitDwarfAdvanceLineAddr(), llvm::MCWinCOFFStreamer::EmitFileDirective(), llvm::MCELFStreamer::EmitFileDirective(), llvm::MipsTargetELFStreamer::emitFrame(), llvm::MCELFStreamer::EmitIdent(), EmitInstruction(), llvm::MCWinCOFFStreamer::EmitInstToData(), EmitInstToFragment(), EmitLabel(), llvm::MipsTargetELFStreamer::emitLabel(), llvm::MCWinCOFFStreamer::EmitLocalCommonSymbol(), llvm::MCELFStreamer::EmitLocalCommonSymbol(), llvm::MipsTargetELFStreamer::emitMipsAbiFlags(), llvm::MipsRegInfoRecord::EmitMipsOptionRecord(), EmitSLEB128Value(), llvm::MCWinCOFFStreamer::EmitSymbolAttribute(), llvm::MCELFStreamer::EmitSymbolAttribute(), EmitULEB128Value(), EmitValueImpl(), EmitValueToOffset(), llvm::MCELFStreamer::EmitWeakReference(), llvm::MipsTargetELFStreamer::finish(), llvm::MCELFStreamer::FinishImpl(), FinishImpl(), llvm::MCELFStreamer::Flush(), llvm::HexagonMCELFStreamer::HexagonMCEmitCommonSymbol(), llvm::HexagonMCELFStreamer::HexagonMCEmitLocalCommonSymbol(), and llvm::MipsTargetELFStreamer::MipsTargetELFStreamer().
|
protected |
Definition at line 92 of file MCObjectStreamer.cpp.
References llvm::sys::path::begin(), and llvm::MCStreamer::getCurrentSectionOnly().
Referenced by EmitCodeAlignment(), EmitLabel(), and getOrCreateDataFragment().
|
protected |
Get a data fragment to write into, creating a new one if the current fragment is not a data fragment.
Definition at line 101 of file MCObjectStreamer.cpp.
References F(), getCurrentFragment(), llvm::MCAssembler::getRelaxAll(), llvm::MCFragment::hasInstructions(), insert(), and llvm::MCAssembler::isBundlingEnabled().
Referenced by llvm::MCELFStreamer::EmitBundleUnlock(), EmitBytes(), llvm::MCWinCOFFStreamer::EmitCOFFSecRel32(), llvm::MCWinCOFFStreamer::EmitCOFFSectionIndex(), EmitFill(), EmitGPRel32Value(), EmitGPRel64Value(), llvm::MCWinCOFFStreamer::EmitInstToData(), and EmitValueImpl().
|
inlineprotected |
Definition at line 65 of file MCObjectStreamer.h.
References flushPendingLabels(), llvm::MCStreamer::getCurrentSectionOnly(), llvm::MCSection::getFragmentList(), llvm::iplist< NodeTy, Traits >::insert(), and llvm::MCFragment::setParent().
Referenced by EmitDwarfAdvanceFrameAddr(), EmitDwarfAdvanceLineAddr(), EmitInstToFragment(), EmitSLEB128Value(), EmitULEB128Value(), EmitValueToAlignment(), EmitValueToOffset(), EmitZeros(), and getOrCreateDataFragment().
|
inlineoverridevirtual |
Object streamers require the integrated assembler.
Reimplemented from llvm::MCStreamer.
Definition at line 57 of file MCObjectStreamer.h.
Reimplemented from llvm::MCStreamer.
Definition at line 224 of file MCObjectStreamer.cpp.
References llvm::MCSection::hasInstructions().
|
overridevirtual |
state management
Reimplemented from llvm::MCStreamer.
Reimplemented in llvm::MCWinCOFFStreamer.
Definition at line 71 of file MCObjectStreamer.cpp.
References llvm::MCStreamer::reset(), and llvm::MCAssembler::reset().
Referenced by llvm::MCWinCOFFStreamer::reset(), and llvm::MCELFStreamer::reset().
Reimplemented from llvm::MCStreamer.
Definition at line 113 of file MCObjectStreamer.cpp.
References llvm::MCAssembler::registerSymbol().
1.8.6