|
LLVM
4.0.0
|
#include <MipsELFStreamer.h>
Public Member Functions | |
| MipsELFStreamer (MCContext &Context, MCAsmBackend &MAB, raw_pwrite_stream &OS, MCCodeEmitter *Emitter) | |
| void | EmitInstruction (const MCInst &Inst, const MCSubtargetInfo &STI) override |
Overriding this function allows us to add arbitrary behaviour before the Inst is actually emitted. More... | |
| void | EmitLabel (MCSymbol *Symbol) override |
| Overriding this function allows us to record all labels that should be marked as microMIPS. More... | |
| void | SwitchSection (MCSection *Section, const MCExpr *Subsection=nullptr) override |
| Overriding this function allows us to dismiss all labels that are candidates for marking as microMIPS when .section directive is processed. More... | |
| void | EmitValueImpl (const MCExpr *Value, unsigned Size, SMLoc Loc) override |
| Overriding this function allows us to dismiss all labels that are candidates for marking as microMIPS when .word directive is emitted. More... | |
| void | EmitMipsOptionRecords () |
| Emits all the option records stored up until the point it's called. More... | |
| void | createPendingLabelRelocs () |
| Mark labels as microMIPS, if necessary for the subtarget. More... | |
Public Member Functions inherited from llvm::MCELFStreamer | |
| MCELFStreamer (MCContext &Context, MCAsmBackend &TAB, raw_pwrite_stream &OS, MCCodeEmitter *Emitter) | |
| ~MCELFStreamer () override | |
| void | reset () override |
| state management More... | |
| void | InitSections (bool NoExecStack) override |
| Create the default sections and set the initial one. More... | |
| void | ChangeSection (MCSection *Section, const MCExpr *Subsection) override |
| Update streamer for a new active section. More... | |
| void | EmitAssemblerFlag (MCAssemblerFlag Flag) override |
Note in the output the specified Flag. More... | |
| void | EmitThumbFunc (MCSymbol *Func) override |
Note in the output that the specified Func is a Thumb mode function (ARM target only). More... | |
| void | EmitWeakReference (MCSymbol *Alias, const MCSymbol *Symbol) override |
Emit an weak reference from Alias to Symbol. More... | |
| bool | EmitSymbolAttribute (MCSymbol *Symbol, MCSymbolAttr Attribute) override |
Add the given Attribute to Symbol. More... | |
| void | EmitSymbolDesc (MCSymbol *Symbol, unsigned DescValue) override |
Set the DescValue for the Symbol. More... | |
| void | EmitCommonSymbol (MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment) override |
| Emit a common symbol. More... | |
| void | BeginCOFFSymbolDef (const MCSymbol *Symbol) override |
| Start emitting COFF symbol definition. More... | |
| void | EmitCOFFSymbolStorageClass (int StorageClass) override |
| Emit the storage class of the symbol. More... | |
| void | EmitCOFFSymbolType (int Type) override |
| Emit the type of the symbol. More... | |
| void | EndCOFFSymbolDef () override |
| Marks the end of the symbol definition. More... | |
| void | emitELFSize (MCSymbol *Symbol, const MCExpr *Value) override |
| Emit an ELF .size directive. More... | |
| void | EmitLocalCommonSymbol (MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment) override |
| Emit a local common (.lcomm) symbol. More... | |
| void | EmitZerofill (MCSection *Section, MCSymbol *Symbol=nullptr, uint64_t Size=0, unsigned ByteAlignment=0) override |
| Emit the zerofill section and an optional symbol. More... | |
| void | EmitTBSSSymbol (MCSection *Section, MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment=0) override |
| Emit a thread local bss (.tbss) symbol. More... | |
| void | EmitFileDirective (StringRef Filename) override |
| Switch to a new logical file. More... | |
| void | EmitIdent (StringRef IdentString) override |
| Emit the "identifiers" directive. More... | |
| void | EmitValueToAlignment (unsigned, int64_t, unsigned, unsigned) override |
Emit some number of copies of Value until the byte alignment ByteAlignment is reached. More... | |
| void | FinishImpl () override |
| Streamer specific finalization. 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... | |
Public Member Functions inherited from llvm::MCObjectStreamer | |
| 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 |
| 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... | |
| void | visitUsedSymbol (const MCSymbol &Sym) override |
| MCAssembler & | getAssembler () |
| void | EmitAssignment (MCSymbol *Symbol, const MCExpr *Value) override |
Emit an assignment of Value to Symbol. 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 | 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... | |
| void | emitValueToOffset (const MCExpr *Offset, unsigned char Value, SMLoc Loc) 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 | 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. More... | |
| void | EmitCVLinetableDirective (unsigned FunctionId, const MCSymbol *Begin, const MCSymbol *End) override |
| This implements the CodeView '.cv_linetable' assembler directive. More... | |
| void | EmitCVInlineLinetableDirective (unsigned PrimaryFunctionId, unsigned SourceFileId, unsigned SourceLineNum, const MCSymbol *FnStartSym, const MCSymbol *FnEndSym) override |
| This implements the CodeView '.cv_inline_linetable' assembler directive. More... | |
| void | EmitCVDefRangeDirective (ArrayRef< std::pair< const MCSymbol *, const MCSymbol * >> Ranges, StringRef FixedSizePortion) override |
| This implements the CodeView '.cv_def_range' assembler directive. More... | |
| void | EmitCVStringTableDirective () override |
| This implements the CodeView '.cv_stringtable' assembler directive. More... | |
| void | EmitCVFileChecksumsDirective () override |
| This implements the CodeView '.cv_filechecksums' assembler directive. More... | |
| void | EmitDTPRel32Value (const MCExpr *Value) override |
Emit the expression Value into the output as a dtprel (32-bit DTP relative) value. More... | |
| void | EmitDTPRel64Value (const MCExpr *Value) override |
Emit the expression Value into the output as a dtprel (64-bit DTP relative) value. More... | |
| void | EmitTPRel32Value (const MCExpr *Value) override |
Emit the expression Value into the output as a tprel (32-bit TP relative) value. More... | |
| void | EmitTPRel64Value (const MCExpr *Value) override |
Emit the expression Value into the output as a tprel (64-bit TP relative) value. More... | |
| 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... | |
| bool | EmitRelocDirective (const MCExpr &Offset, StringRef Name, const MCExpr *Expr, SMLoc Loc) override |
| Emit a .reloc directive. More... | |
| void | emitFill (uint64_t NumBytes, uint8_t FillValue) override |
| Emit NumBytes bytes worth of the value specified by FillValue. More... | |
| void | emitFill (const MCExpr &NumBytes, uint64_t FillValue, SMLoc Loc=SMLoc()) override |
Emit Size bytes worth of the value specified by FillValue. More... | |
| void | emitFill (const MCExpr &NumValues, int64_t Size, int64_t Expr, SMLoc Loc=SMLoc()) override |
| 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 |
| bool | hasUnfinishedDwarfFrameInfo () |
| unsigned | getNumWinFrameInfos () |
| ArrayRef< WinEH::FrameInfo * > | getWinFrameInfos () const |
| void | generateCompactUnwindEncodings (MCAsmBackend *MAB) |
| virtual unsigned | EmitDwarfFileDirective (unsigned FileNo, StringRef Directory, StringRef Filename, unsigned CUID=0) |
| Associate a filename with a specified logical file number. More... | |
| virtual bool | EmitCVFileDirective (unsigned FileNo, StringRef Filename) |
| Associate a filename with a specified logical file number. More... | |
| virtual bool | EmitCVFuncIdDirective (unsigned FunctionId) |
| Introduces a function id for use with .cv_loc. More... | |
| 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. 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 | EmitCFIGnuArgsSize (int64_t Size) |
| 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 () |
| MCSection * | getAssociatedPDataSection (const MCSection *TextSec) |
| Get the .pdata section used for the given section. More... | |
| MCSection * | getAssociatedXDataSection (const MCSection *TextSec) |
| Get the .xdata section used for the given section. More... | |
| virtual void | EmitSyntaxDirective () |
| 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... | |
| 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, bool EOL=true) |
| Add a textual comment. 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 | addExplicitComment (const Twine &T) |
| Add explicit comment T. More... | |
| virtual void | emitExplicitComments () |
| Emit added explicit comments. 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) |
| void | SwitchSectionNoChange (MCSection *Section, const MCExpr *Subsection=nullptr) |
Set the current section where code is being emitted to Section. More... | |
| MCSymbol * | endSection (MCSection *Section) |
| void | AssignFragment (MCSymbol *Symbol, MCFragment *Fragment) |
| Sets the symbol's section. More... | |
| virtual void | EmitEHSymAttributes (const MCSymbol *Symbol, MCSymbol *EHSymbol) |
| 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 | EmitCOFFSafeSEH (MCSymbol const *Symbol) |
| virtual void | EmitCOFFSectionIndex (MCSymbol const *Symbol) |
| Emits a COFF section index. More... | |
| virtual void | EmitCOFFSecRel32 (MCSymbol const *Symbol, uint64_t Offset) |
| Emits a COFF section relative relocation. More... | |
| virtual void | EmitLOHDirective (MCLOHType Kind, const MCLOHArgs &Args) |
| Emit a Linker Optimization Hint (LOH) directive. More... | |
| virtual void | EmitBinaryData (StringRef Data) |
| Functionally identical to EmitBytes. More... | |
| 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. 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... | |
| virtual void | emitFill (uint64_t NumValues, int64_t Size, int64_t Expr) |
Emit NumValues copies of Size bytes. More... | |
| void | EmitZeros (uint64_t NumBytes) |
| Emit NumBytes worth of zeros. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from llvm::MCObjectStreamer | |
| MCObjectStreamer (MCContext &Context, MCAsmBackend &TAB, raw_pwrite_stream &OS, MCCodeEmitter *Emitter) | |
| ~MCObjectStreamer () override | |
| 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... | |
Definition at line 29 of file MipsELFStreamer.h.
|
inline |
Definition at line 36 of file MipsELFStreamer.h.
| void MipsELFStreamer::createPendingLabelRelocs | ( | ) |
Mark labels as microMIPS, if necessary for the subtarget.
Definition at line 38 of file MipsELFStreamer.cpp.
References llvm::MCObjectStreamer::getAssembler(), llvm::MCStreamer::getTargetStreamer(), llvm::MipsTargetELFStreamer::isMicroMipsEnabled(), L, llvm::MCAssembler::registerSymbol(), and llvm::ELF::STO_MIPS_MICROMIPS.
Referenced by llvm::MipsTargetELFStreamer::emitDirectiveInsn(), and EmitInstruction().
|
overridevirtual |
Overriding this function allows us to add arbitrary behaviour before the Inst is actually emitted.
For example, we can inspect the operands and gather sufficient information that allows us to reason about the register usage for the translation unit.
Reimplemented from llvm::MCObjectStreamer.
Definition at line 18 of file MipsELFStreamer.cpp.
References Context, createPendingLabelRelocs(), llvm::MCObjectStreamer::EmitInstruction(), llvm::MCStreamer::getContext(), llvm::MCInst::getNumOperands(), llvm::MCInst::getOperand(), llvm::MCOperand::getReg(), llvm::MCContext::getRegisterInfo(), llvm::MCOperand::isReg(), and llvm::MipsRegInfoRecord::SetPhysRegUsed().
|
overridevirtual |
Overriding this function allows us to record all labels that should be marked as microMIPS.
Based on this data marking is done in EmitInstruction.
Reimplemented from llvm::MCELFStreamer.
Definition at line 54 of file MipsELFStreamer.cpp.
References llvm::MCELFStreamer::EmitLabel().
| void MipsELFStreamer::EmitMipsOptionRecords | ( | ) |
Emits all the option records stored up until the point it's called.
Definition at line 71 of file MipsELFStreamer.cpp.
References I.
Referenced by llvm::MipsTargetELFStreamer::finish().
|
overridevirtual |
Overriding this function allows us to dismiss all labels that are candidates for marking as microMIPS when .word directive is emitted.
Reimplemented from llvm::MCELFStreamer.
Definition at line 65 of file MipsELFStreamer.cpp.
References llvm::MCELFStreamer::EmitValueImpl().
|
overridevirtual |
Overriding this function allows us to dismiss all labels that are candidates for marking as microMIPS when .section directive is processed.
Reimplemented from llvm::MCStreamer.
Definition at line 59 of file MipsELFStreamer.cpp.
References llvm::MCStreamer::SwitchSection().
Referenced by llvm::MipsRegInfoRecord::EmitMipsOptionRecord().
1.8.6