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

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

Parameters

const llvm::MCAsmBackend&

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)

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)

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

Parameters

llvm::MCObjectStreamer& OS
const llvm::MCInst& Inst

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

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

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

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:74

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

llvm::raw_pwrite_stream& OS

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

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

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

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

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

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

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

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

Description

Get the number of target specific fixup kinds.

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

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

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

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

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

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

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)

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)

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)

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

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

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