class MCAsmBackend
Declaration
class MCAsmBackend { /* full declaration omitted */ };
Description
Generic interface to target specific assembler backends.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:38
Member Variables
- public const support::endianness Endian
Method Overview
- public MCAsmBackend(const llvm::MCAsmBackend &)
- protected MCAsmBackend(support::endianness Endian)
- public virtual void alignBranchesBegin(llvm::MCObjectStreamer & OS, const llvm::MCInst & Inst)
- public virtual void alignBranchesEnd(llvm::MCObjectStreamer & OS, const llvm::MCInst & Inst)
- public virtual bool allowAutoPadding() 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 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 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 void relaxInstruction(const llvm::MCInst & Inst, const llvm::MCSubtargetInfo & STI, llvm::MCInst & Res) const
- public virtual bool requiresDiffExpressionRelocations() 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
- public virtual ~MCAsmBackend()
Methods
¶MCAsmBackend(const llvm::MCAsmBackend&)
MCAsmBackend(const llvm::MCAsmBackend&)
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:43
Parameters
- const llvm::MCAsmBackend&
¶MCAsmBackend(support::endianness Endian)
MCAsmBackend(support::endianness Endian)
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:40
Parameters
- support::endianness Endian
¶virtual void alignBranchesBegin(
llvm::MCObjectStreamer& OS,
const llvm::MCInst& Inst)
virtual void alignBranchesBegin(
llvm::MCObjectStreamer& OS,
const llvm::MCInst& Inst)
Description
Give the target a chance to manipulate state related to instruction alignment (e.g. padding for optimization) before and after actually emitting the instruction.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:56
Parameters
- llvm::MCObjectStreamer& OS
- const llvm::MCInst& Inst
¶virtual void alignBranchesEnd(
llvm::MCObjectStreamer& OS,
const llvm::MCInst& Inst)
virtual void alignBranchesEnd(
llvm::MCObjectStreamer& OS,
const llvm::MCInst& Inst)
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:57
Parameters
- llvm::MCObjectStreamer& OS
- const llvm::MCInst& Inst
¶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:51
¶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:125
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:71
Parameters
¶virtual std::unique_ptr<MCObjectTargetWriter>
createObjectTargetWriter() const
virtual std::unique_ptr<MCObjectTargetWriter>
createObjectTargetWriter() const
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:74
¶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:65
Parameters
¶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:111
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:184
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:156
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:149
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:192
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:83
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:86
Parameters
- llvm::MCFixupKind Kind
¶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:175
¶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:80
¶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:188
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:197
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:144
Parameters
- const llvm::MCInst& Inst
- - The instruction to test.
- const llvm::MCSubtargetInfo& STI
- - The MCSubtargetInfo in effect when the instruction was encoded.
¶virtual void relaxInstruction(
const llvm::MCInst& Inst,
const llvm::MCSubtargetInfo& STI,
llvm::MCInst& Res) const
virtual void relaxInstruction(
const llvm::MCInst& Inst,
const llvm::MCSubtargetInfo& STI,
llvm::MCInst& Res) const
Description
Relax the instruction in the given fragment to the next wider instruction.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:166
Parameters
- const llvm::MCInst& Inst
- The instruction to relax, which may be the same as the output.
- const llvm::MCSubtargetInfo& STI
- the subtarget information for the associated instruction.
- llvm::MCInst& Res
- On return, the relaxed instruction.
¶virtual bool requiresDiffExpressionRelocations()
const
virtual bool requiresDiffExpressionRelocations()
const
Description
Check whether the given target requires emitting differences of two symbols as a set of relocations.
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:132
¶virtual void reset()
virtual void reset()
Description
lifetime management
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:60
¶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:89
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:98
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:105
Parameters
- llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
- llvm::MCAlignFragment& AF
¶virtual bool writeNopData(llvm::raw_ostream& OS,
uint64_t Count) const
virtual bool writeNopData(llvm::raw_ostream& OS,
uint64_t Count) 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:181
Parameters
- llvm::raw_ostream& OS
- uint64_t Count
Returns
- True on success.
¶virtual ~MCAsmBackend()
virtual ~MCAsmBackend()
Declared at: llvm/include/llvm/MC/MCAsmBackend.h:45