LLVM  3.7.0
Public Member Functions | Protected Member Functions | List of all members
llvm::MCObjectStreamer Class Referenceabstract

Streaming object file generation interface. More...

#include <MCObjectStreamer.h>

Inheritance diagram for llvm::MCObjectStreamer:
[legend]
Collaboration diagram for llvm::MCObjectStreamer:
[legend]

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
 
MCAssemblergetAssembler ()
 
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)
 
MCContextgetContext () const
 
MCTargetStreamergetTargetStreamer ()
 
unsigned getNumFrameInfos ()
 
ArrayRef< MCDwarfFrameInfogetDwarfFrameInfos () 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 MCSymbolgetDwarfLineTableSymbol (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_ostreamGetCommentOS ()
 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...
 
MCSectiongetCurrentSectionOnly () 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...
 
MCSymbolendSection (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
 
MCFragmentgetCurrentFragment () const
 
void insert (MCFragment *F)
 
MCDataFragmentgetOrCreateDataFragment ()
 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::FrameInfogetCurrentWinFrameInfo ()
 
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...
 

Detailed Description

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.

Constructor & Destructor Documentation

MCObjectStreamer::MCObjectStreamer ( MCContext Context,
MCAsmBackend TAB,
raw_pwrite_stream OS,
MCCodeEmitter Emitter 
)
protected

Definition at line 26 of file MCObjectStreamer.cpp.

MCObjectStreamer::~MCObjectStreamer ( )
overrideprotected

Member Function Documentation

void MCObjectStreamer::ChangeSection ( MCSection ,
const MCExpr  
)
overridevirtual

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().

bool MCObjectStreamer::changeSectionImpl ( MCSection Section,
const MCExpr Subsection 
)
protected
void MCObjectStreamer::emitAbsoluteSymbolDiff ( const MCSymbol Hi,
const MCSymbol Lo,
unsigned  Size 
)
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.

Precondition
Offset of 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().

void MCObjectStreamer::EmitAssignment ( MCSymbol Symbol,
const MCExpr Value 
)
overridevirtual

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.

Parameters
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().

void MCObjectStreamer::EmitBundleAlignMode ( unsigned  AlignPow2)
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.

void MCObjectStreamer::EmitBundleLock ( bool  AlignToEnd)
overridevirtual

The following instructions are a bundle-locked group.

Parameters
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.

void MCObjectStreamer::EmitBundleUnlock ( )
overridevirtual

Ends a bundle-locked group.

Reimplemented from llvm::MCStreamer.

Definition at line 296 of file MCObjectStreamer.cpp.

References BundlingNotImplementedMsg, and llvm_unreachable.

void MCObjectStreamer::EmitBytes ( StringRef  Data)
overridevirtual
void MCObjectStreamer::EmitCFISections ( bool  EH,
bool  Debug 
)
overridevirtual

Reimplemented from llvm::MCStreamer.

Definition at line 117 of file MCObjectStreamer.cpp.

References Debug, and llvm::MCStreamer::EmitCFISections().

void MCObjectStreamer::EmitCodeAlignment ( unsigned  ByteAlignment,
unsigned  MaxBytesToEmit = 0 
)
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.

Parameters
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 
)
void MCObjectStreamer::EmitDwarfAdvanceLineAddr ( int64_t  LineDelta,
const MCSymbol LastLabel,
const MCSymbol Label,
unsigned  PointerSize 
)
void MCObjectStreamer::EmitDwarfLocDirective ( unsigned  FileNo,
unsigned  Line,
unsigned  Column,
unsigned  Flags,
unsigned  Isa,
unsigned  Discriminator,
StringRef  FileName 
)
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().

void MCObjectStreamer::EmitFill ( uint64_t  NumBytes,
uint8_t  FillValue 
)
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)
void MCObjectStreamer::EmitGPRel32Value ( const MCExpr Value)
overridevirtual

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().

void MCObjectStreamer::EmitGPRel64Value ( const MCExpr Value)
overridevirtual

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().

void MCObjectStreamer::EmitInstruction ( const MCInst Inst,
const MCSubtargetInfo STI 
)
overridevirtual
void MCObjectStreamer::EmitInstToFragment ( const MCInst Inst,
const MCSubtargetInfo STI 
)
virtual
void MCObjectStreamer::EmitLabel ( MCSymbol Symbol)
overridevirtual

Emit a label for Symbol into the current section.

This corresponds to an assembler statement such as: foo:

Parameters
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().

void MCObjectStreamer::EmitSLEB128Value ( const MCExpr Value)
overridevirtual

Reimplemented from llvm::MCStreamer.

Definition at line 182 of file MCObjectStreamer.cpp.

References llvm::MCStreamer::EmitSLEB128IntValue(), getAssembler(), and insert().

void MCObjectStreamer::EmitULEB128Value ( const MCExpr Value)
overridevirtual

Reimplemented from llvm::MCStreamer.

Definition at line 173 of file MCObjectStreamer.cpp.

References llvm::MCStreamer::EmitULEB128IntValue(), getAssembler(), and insert().

void MCObjectStreamer::EmitValueImpl ( const MCExpr Value,
unsigned  Size,
const SMLoc Loc = SMLoc() 
)
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.

Parameters
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().

void MCObjectStreamer::EmitValueToAlignment ( unsigned  ByteAlignment,
int64_t  Value = 0,
unsigned  ValueSize = 1,
unsigned  MaxBytesToEmit = 0 
)
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.

Parameters
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().

bool MCObjectStreamer::EmitValueToOffset ( const MCExpr Offset,
unsigned char  Value 
)
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.

Parameters
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.
Returns
false on success, true if the offset was invalid.

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.

void MCObjectStreamer::EmitWeakReference ( MCSymbol Alias,
const MCSymbol Symbol 
)
overridevirtual

Emit an weak reference from Alias to Symbol.

This corresponds to an assembler statement such as: .weakref alias, symbol

Parameters
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().

void MCObjectStreamer::EmitZeros ( uint64_t  NumBytes)
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().

void MCObjectStreamer::FinishImpl ( )
overridevirtual
void MCObjectStreamer::flushPendingLabels ( MCFragment F,
uint64_t  FOffset = 0 
)
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().

MCAssembler& llvm::MCObjectStreamer::getAssembler ( )
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().

MCFragment * MCObjectStreamer::getCurrentFragment ( ) const
protected
MCDataFragment * MCObjectStreamer::getOrCreateDataFragment ( )
protected
void llvm::MCObjectStreamer::insert ( MCFragment F)
inlineprotected
bool llvm::MCObjectStreamer::isIntegratedAssemblerRequired ( ) const
inlineoverridevirtual

Object streamers require the integrated assembler.

Reimplemented from llvm::MCStreamer.

Definition at line 57 of file MCObjectStreamer.h.

bool MCObjectStreamer::mayHaveInstructions ( MCSection Sec) const
overridevirtual

Reimplemented from llvm::MCStreamer.

Definition at line 224 of file MCObjectStreamer.cpp.

References llvm::MCSection::hasInstructions().

void MCObjectStreamer::reset ( )
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().

void MCObjectStreamer::visitUsedSymbol ( const MCSymbol Sym)
overridevirtual

Reimplemented from llvm::MCStreamer.

Definition at line 113 of file MCObjectStreamer.cpp.

References llvm::MCAssembler::registerSymbol().


The documentation for this class was generated from the following files: