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&)

Declared at: llvm/include/llvm/MC/MCAsmBackend.h:47

Parameters

const llvm::MCAsmBackend&

MCAsmBackend(support::endianness Endian)

Declared at: llvm/include/llvm/MC/MCAsmBackend.h:44

Parameters

support::endianness Endian

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

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

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

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

llvm::raw_pwrite_stream& OS
llvm::raw_pwrite_stream& DwoOS

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

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

llvm::raw_pwrite_stream& OS

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)

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)

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

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

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

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

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

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

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

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

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

Description

Get the number of target specific fixup kinds.

Declared at: llvm/include/llvm/MC/MCAsmBackend.h:89

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

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

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

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

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

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

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)

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)

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)

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

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

Declared at: llvm/include/llvm/MC/MCAsmBackend.h:49