class MCAsmBackend
Declaration
class MCAsmBackend { /* full declaration omitted */ };
Description
Generic interface to target specific assembler backends.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:42
Member Variables
- public const support::endianness Endian
Method Overview
- public MCAsmBackend(const llvm::MCAsmBackend &)
- protected MCAsmBackend(support::endianness Endian)
- public virtual bool allowAutoPadding() const
- public virtual bool allowEnhancedRelaxation() const
- public virtual void applyFixup(const llvm::MCAssembler & Asm, const llvm::MCFixup & Fixup, const llvm::MCValue & Target, MutableArrayRef<char> Data, uint64_t Value, bool IsResolved, const llvm::MCSubtargetInfo * STI) const
- public std::unique_ptr<MCObjectWriter> createDwoObjectWriter(llvm::raw_pwrite_stream & OS, llvm::raw_pwrite_stream & DwoOS) const
- public virtual std::unique_ptr<MCObjectTargetWriter> createObjectTargetWriter() const
- public std::unique_ptr<MCObjectWriter> createObjectWriter(llvm::raw_pwrite_stream & OS) const
- public virtual void emitInstructionBegin(llvm::MCObjectStreamer & OS, const llvm::MCInst & Inst, const llvm::MCSubtargetInfo & STI)
- public virtual void emitInstructionEnd(llvm::MCObjectStreamer & OS, const llvm::MCInst & Inst)
- public virtual bool evaluateTargetFixup(const llvm::MCAssembler & Asm, const llvm::MCAsmLayout & Layout, const llvm::MCFixup & Fixup, const llvm::MCFragment * DF, const llvm::MCValue & Target, uint64_t & Value, bool & WasForced)
- public virtual void finishLayout(const llvm::MCAssembler & Asm, llvm::MCAsmLayout & Layout) const
- public virtual bool fixupNeedsRelaxation(const llvm::MCFixup & Fixup, uint64_t Value, const llvm::MCRelaxableFragment * DF, const llvm::MCAsmLayout & Layout) const
- public virtual bool fixupNeedsRelaxationAdvanced(const llvm::MCFixup & Fixup, bool Resolved, uint64_t Value, const llvm::MCRelaxableFragment * DF, const llvm::MCAsmLayout & Layout, const bool WasForced) const
- public virtual uint32_t generateCompactUnwindEncoding(ArrayRef<llvm::MCCFIInstruction>) const
- public virtual Optional<llvm::MCFixupKind> getFixupKind(llvm::StringRef Name) const
- public virtual const llvm::MCFixupKindInfo & getFixupKindInfo(llvm::MCFixupKind Kind) const
- public virtual unsigned int getMaximumNopSize(const llvm::MCSubtargetInfo & STI) const
- public virtual unsigned int getMinimumNopSize() const
- public virtual unsigned int getNumFixupKinds() const
- public virtual void handleAssemblerFlag(llvm::MCAssemblerFlag Flag)
- public virtual bool isMicroMips(const llvm::MCSymbol * Sym) const
- public virtual bool mayNeedRelaxation(const llvm::MCInst & Inst, const llvm::MCSubtargetInfo & STI) const
- public virtual bool relaxDwarfCFA(llvm::MCDwarfCallFrameFragment & DF, llvm::MCAsmLayout & Layout, bool & WasRelaxed) const
- public virtual bool relaxDwarfLineAddr(llvm::MCDwarfLineAddrFragment & DF, llvm::MCAsmLayout & Layout, bool & WasRelaxed) const
- public virtual void relaxInstruction(llvm::MCInst & Inst, const llvm::MCSubtargetInfo & STI) const
- public virtual void reset()
- public virtual bool shouldForceRelocation(const llvm::MCAssembler & Asm, const llvm::MCFixup & Fixup, const llvm::MCValue & Target)
- public virtual bool shouldInsertExtraNopBytesForCodeAlign(const llvm::MCAlignFragment & AF, unsigned int & Size)
- public virtual bool shouldInsertFixupForCodeAlign(llvm::MCAssembler & Asm, const llvm::MCAsmLayout & Layout, llvm::MCAlignFragment & AF)
- public virtual bool writeNopData(llvm::raw_ostream & OS, uint64_t Count, const llvm::MCSubtargetInfo * STI) const
- public virtual ~MCAsmBackend()
Methods
¶MCAsmBackend(const llvm::MCAsmBackend&)
MCAsmBackend(const llvm::MCAsmBackend&)
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:47
Parameters
- const llvm::MCAsmBackend&
¶MCAsmBackend(support::endianness Endian)
MCAsmBackend(support::endianness Endian)
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:44
Parameters
- support::endianness Endian
¶virtual bool allowAutoPadding() const
virtual bool allowAutoPadding() const
Description
Return true if this target might automatically pad instructions and thus need to emit padding enable/disable directives around sensative code.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:55
¶virtual bool allowEnhancedRelaxation() const
virtual bool allowEnhancedRelaxation() const
Description
Return true if this target allows an unrelaxable instruction to be emitted into RelaxableFragment and then we can increase its size in a tricky way for optimization.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:59
¶virtual void applyFixup(
const llvm::MCAssembler& Asm,
const llvm::MCFixup& Fixup,
const llvm::MCValue& Target,
MutableArrayRef<char> Data,
uint64_t Value,
bool IsResolved,
const llvm::MCSubtargetInfo* STI) const
virtual void applyFixup(
const llvm::MCAssembler& Asm,
const llvm::MCFixup& Fixup,
const llvm::MCValue& Target,
MutableArrayRef<char> Data,
uint64_t Value,
bool IsResolved,
const llvm::MCSubtargetInfo* STI) const
Description
Apply the \p Value for given \p Fixup into the provided data fragment, at the offset specified by the fixup and following the fixup kind as appropriate. Errors (such as an out of range fixup value) should be reported via \p Ctx. The \p STI is present only for fragments of type MCRelaxableFragment and MCDataFragment with hasInstructions() == true.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:134
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCFixup& Fixup
- const llvm::MCValue& Target
- MutableArrayRef<char> Data
- uint64_t Value
- bool IsResolved
- const llvm::MCSubtargetInfo* STI
¶std::unique_ptr<MCObjectWriter>
createDwoObjectWriter(
llvm::raw_pwrite_stream& OS,
llvm::raw_pwrite_stream& DwoOS) const
std::unique_ptr<MCObjectWriter>
createDwoObjectWriter(
llvm::raw_pwrite_stream& OS,
llvm::raw_pwrite_stream& DwoOS) const
Description
Create an MCObjectWriter that writes two object files: a .o file which is linked into the final program and a .dwo file which is used by debuggers. This function is only supported with ELF targets.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:80
Parameters
¶virtual std::unique_ptr<MCObjectTargetWriter>
createObjectTargetWriter() const
virtual std::unique_ptr<MCObjectTargetWriter>
createObjectTargetWriter() const
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:83
¶std::unique_ptr<MCObjectWriter>
createObjectWriter(
llvm::raw_pwrite_stream& OS) const
std::unique_ptr<MCObjectWriter>
createObjectWriter(
llvm::raw_pwrite_stream& OS) const
Description
Create a new MCObjectWriter instance for use by the assembler backend to emit the final object file.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:74
Parameters
¶virtual void emitInstructionBegin(
llvm::MCObjectStreamer& OS,
const llvm::MCInst& Inst,
const llvm::MCSubtargetInfo& STI)
virtual void emitInstructionBegin(
llvm::MCObjectStreamer& OS,
const llvm::MCInst& Inst,
const llvm::MCSubtargetInfo& STI)
Description
Give the target a chance to manipulate state related to instruction alignment (e.g. padding for optimization), instruction relaxablility, etc. before and after actually emitting the instruction.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:64
Parameters
- llvm::MCObjectStreamer& OS
- const llvm::MCInst& Inst
- const llvm::MCSubtargetInfo& STI
¶virtual void emitInstructionEnd(
llvm::MCObjectStreamer& OS,
const llvm::MCInst& Inst)
virtual void emitInstructionEnd(
llvm::MCObjectStreamer& OS,
const llvm::MCInst& Inst)
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:66
Parameters
- llvm::MCObjectStreamer& OS
- const llvm::MCInst& Inst
¶virtual bool evaluateTargetFixup(
const llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFixup& Fixup,
const llvm::MCFragment* DF,
const llvm::MCValue& Target,
uint64_t& Value,
bool& WasForced)
virtual bool evaluateTargetFixup(
const llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFixup& Fixup,
const llvm::MCFragment* DF,
const llvm::MCValue& Target,
uint64_t& Value,
bool& WasForced)
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:120
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
- const llvm::MCFixup& Fixup
- const llvm::MCFragment* DF
- const llvm::MCValue& Target
- uint64_t& Value
- bool& WasForced
¶virtual void finishLayout(
const llvm::MCAssembler& Asm,
llvm::MCAsmLayout& Layout) const
virtual void finishLayout(
const llvm::MCAssembler& Asm,
llvm::MCAsmLayout& Layout) const
Description
Give backend an opportunity to finish layout after relaxation
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:207
Parameters
- const llvm::MCAssembler& Asm
- llvm::MCAsmLayout& Layout
¶virtual bool fixupNeedsRelaxation(
const llvm::MCFixup& Fixup,
uint64_t Value,
const llvm::MCRelaxableFragment* DF,
const llvm::MCAsmLayout& Layout) const
virtual bool fixupNeedsRelaxation(
const llvm::MCFixup& Fixup,
uint64_t Value,
const llvm::MCRelaxableFragment* DF,
const llvm::MCAsmLayout& Layout) const
Description
Simple predicate for targets where !Resolved implies requiring relaxation
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:163
Parameters
- const llvm::MCFixup& Fixup
- uint64_t Value
- const llvm::MCRelaxableFragment* DF
- const llvm::MCAsmLayout& Layout
¶virtual bool fixupNeedsRelaxationAdvanced(
const llvm::MCFixup& Fixup,
bool Resolved,
uint64_t Value,
const llvm::MCRelaxableFragment* DF,
const llvm::MCAsmLayout& Layout,
const bool WasForced) const
virtual bool fixupNeedsRelaxationAdvanced(
const llvm::MCFixup& Fixup,
bool Resolved,
uint64_t Value,
const llvm::MCRelaxableFragment* DF,
const llvm::MCAsmLayout& Layout,
const bool WasForced) const
Description
Target specific predicate for whether a given fixup requires the associated instruction to be relaxed.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:156
Parameters
- const llvm::MCFixup& Fixup
- bool Resolved
- uint64_t Value
- const llvm::MCRelaxableFragment* DF
- const llvm::MCAsmLayout& Layout
- const bool WasForced
¶virtual uint32_t generateCompactUnwindEncoding(
ArrayRef<llvm::MCCFIInstruction>) const
virtual uint32_t generateCompactUnwindEncoding(
ArrayRef<llvm::MCCFIInstruction>) const
Description
Generate the compact unwind encoding for the CFI instructions.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:215
Parameters
- ArrayRef<llvm::MCCFIInstruction>
¶virtual Optional<llvm::MCFixupKind> getFixupKind(
llvm::StringRef Name) const
virtual Optional<llvm::MCFixupKind> getFixupKind(
llvm::StringRef Name) const
Description
Map a relocation name used in .reloc to a fixup kind.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:92
Parameters
- llvm::StringRef Name
¶virtual const llvm::MCFixupKindInfo&
getFixupKindInfo(llvm::MCFixupKind Kind) const
virtual const llvm::MCFixupKindInfo&
getFixupKindInfo(llvm::MCFixupKind Kind) const
Description
Get information on a fixup kind.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:95
Parameters
- llvm::MCFixupKind Kind
¶virtual unsigned int getMaximumNopSize(
const llvm::MCSubtargetInfo& STI) const
virtual unsigned int getMaximumNopSize(
const llvm::MCSubtargetInfo& STI) const
Description
Returns the maximum size of a nop in bytes on this target.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:195
Parameters
- const llvm::MCSubtargetInfo& STI
¶virtual unsigned int getMinimumNopSize() const
virtual unsigned int getMinimumNopSize() const
Description
Returns the minimum size of a nop in bytes on this target. The assembler will use this to emit excess padding in situations where the padding required for simple alignment would be less than the minimum nop size.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:191
¶virtual unsigned int getNumFixupKinds() const
virtual unsigned int getNumFixupKinds() const
Description
Get the number of target specific fixup kinds.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:89
¶virtual void handleAssemblerFlag(
llvm::MCAssemblerFlag Flag)
virtual void handleAssemblerFlag(
llvm::MCAssemblerFlag Flag)
Description
Handle any target-specific assembler flags. By default, do nothing.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:211
Parameters
- llvm::MCAssemblerFlag Flag
¶virtual bool isMicroMips(
const llvm::MCSymbol* Sym) const
virtual bool isMicroMips(
const llvm::MCSymbol* Sym) const
Description
Check whether a given symbol has been flagged with MICROMIPS flag.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:220
Parameters
- const llvm::MCSymbol* Sym
¶virtual bool mayNeedRelaxation(
const llvm::MCInst& Inst,
const llvm::MCSubtargetInfo& STI) const
virtual bool mayNeedRelaxation(
const llvm::MCInst& Inst,
const llvm::MCSubtargetInfo& STI) const
Description
Check whether the given instruction may need relaxation.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:149
Parameters
- const llvm::MCInst& Inst
- - The instruction to test.
- const llvm::MCSubtargetInfo& STI
- - The MCSubtargetInfo in effect when the instruction was encoded.
¶virtual bool relaxDwarfCFA(
llvm::MCDwarfCallFrameFragment& DF,
llvm::MCAsmLayout& Layout,
bool& WasRelaxed) const
virtual bool relaxDwarfCFA(
llvm::MCDwarfCallFrameFragment& DF,
llvm::MCAsmLayout& Layout,
bool& WasRelaxed) const
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:180
Parameters
- llvm::MCDwarfCallFrameFragment& DF
- llvm::MCAsmLayout& Layout
- bool& WasRelaxed
¶virtual bool relaxDwarfLineAddr(
llvm::MCDwarfLineAddrFragment& DF,
llvm::MCAsmLayout& Layout,
bool& WasRelaxed) const
virtual bool relaxDwarfLineAddr(
llvm::MCDwarfLineAddrFragment& DF,
llvm::MCAsmLayout& Layout,
bool& WasRelaxed) const
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:175
Parameters
- llvm::MCDwarfLineAddrFragment& DF
- llvm::MCAsmLayout& Layout
- bool& WasRelaxed
¶virtual void relaxInstruction(
llvm::MCInst& Inst,
const llvm::MCSubtargetInfo& STI) const
virtual void relaxInstruction(
llvm::MCInst& Inst,
const llvm::MCSubtargetInfo& STI) const
Description
Relax the instruction in the given fragment to the next wider instruction.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:172
Parameters
- llvm::MCInst& Inst
- The instruction to relax, which is also the relaxed instruction.
- const llvm::MCSubtargetInfo& STI
- the subtarget information for the associated instruction.
¶virtual void reset()
virtual void reset()
Description
lifetime management
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:69
¶virtual bool shouldForceRelocation(
const llvm::MCAssembler& Asm,
const llvm::MCFixup& Fixup,
const llvm::MCValue& Target)
virtual bool shouldForceRelocation(
const llvm::MCAssembler& Asm,
const llvm::MCFixup& Fixup,
const llvm::MCValue& Target)
Description
Hook to check if a relocation is needed for some target specific reason.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:98
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCFixup& Fixup
- const llvm::MCValue& Target
¶virtual bool
shouldInsertExtraNopBytesForCodeAlign(
const llvm::MCAlignFragment& AF,
unsigned int& Size)
virtual bool
shouldInsertExtraNopBytesForCodeAlign(
const llvm::MCAlignFragment& AF,
unsigned int& Size)
Description
Hook to check if extra nop bytes must be inserted for alignment directive. For some targets this may be necessary in order to support linker relaxation. The number of bytes to insert are returned in Size.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:107
Parameters
- const llvm::MCAlignFragment& AF
- unsigned int& Size
¶virtual bool shouldInsertFixupForCodeAlign(
llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
llvm::MCAlignFragment& AF)
virtual bool shouldInsertFixupForCodeAlign(
llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
llvm::MCAlignFragment& AF)
Description
Hook which indicates if the target requires a fixup to be generated when handling an align directive in an executable section
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:114
Parameters
- llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
- llvm::MCAlignFragment& AF
¶virtual bool writeNopData(
llvm::raw_ostream& OS,
uint64_t Count,
const llvm::MCSubtargetInfo* STI) const
virtual bool writeNopData(
llvm::raw_ostream& OS,
uint64_t Count,
const llvm::MCSubtargetInfo* STI) const
Description
Write an (optimal) nop sequence of Count bytes to the given output. If the target cannot generate such a sequence, it should return an error.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:203
Parameters
- llvm::raw_ostream& OS
- uint64_t Count
- const llvm::MCSubtargetInfo* STI
Returns
- True on success.
¶virtual ~MCAsmBackend()
virtual ~MCAsmBackend()
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:49