LLVM 22.0.0git
|
Utilities for manipulating generated AVR machine code. More...
#include "Target/AVR/MCTargetDesc/AVRAsmBackend.h"
Public Member Functions | |
AVRAsmBackend (Triple::OSType OSType) | |
void | adjustFixupValue (const MCFixup &Fixup, const MCValue &Target, uint64_t &Value, MCContext *Ctx=nullptr) const |
std::unique_ptr< MCObjectTargetWriter > | createObjectTargetWriter () const override |
void | applyFixup (const MCFragment &, const MCFixup &, const MCValue &Target, uint8_t *Data, uint64_t Value, bool IsResolved) override |
std::optional< MCFixupKind > | getFixupKind (StringRef Name) const override |
Map a relocation name used in .reloc to a fixup kind. | |
MCFixupKindInfo | getFixupKindInfo (MCFixupKind Kind) const override |
Get information on a fixup kind. | |
bool | writeNopData (raw_ostream &OS, uint64_t Count, const MCSubtargetInfo *STI) const override |
Write an (optimal) nop sequence of Count bytes to the given output. | |
bool | forceRelocation (const MCFragment &F, const MCFixup &Fixup, const MCValue &Target) |
![]() | |
MCAsmBackend (const MCAsmBackend &)=delete | |
MCAsmBackend & | operator= (const MCAsmBackend &)=delete |
virtual | ~MCAsmBackend () |
void | setAssembler (MCAssembler *A) |
MCContext & | getContext () const |
bool | allowAutoPadding () const |
Return true if this target might automatically pad instructions and thus need to emit padding enable/disable directives around sensative code. | |
bool | allowEnhancedRelaxation () const |
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. | |
virtual void | reset () |
lifetime management | |
std::unique_ptr< MCObjectWriter > | createObjectWriter (raw_pwrite_stream &OS) const |
Create a new MCObjectWriter instance for use by the assembler backend to emit the final object file. | |
std::unique_ptr< MCObjectWriter > | createDwoObjectWriter (raw_pwrite_stream &OS, raw_pwrite_stream &DwoOS) const |
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. | |
virtual std::unique_ptr< MCObjectTargetWriter > | createObjectTargetWriter () const =0 |
virtual unsigned | getMinimumNopSize () const |
Returns the minimum size of a nop in bytes on this target. | |
virtual unsigned | getMaximumNopSize (const MCSubtargetInfo &STI) const |
Returns the maximum size of a nop in bytes on this target. | |
virtual bool | writeNopData (raw_ostream &OS, uint64_t Count, const MCSubtargetInfo *STI) const =0 |
Write an (optimal) nop sequence of Count bytes to the given output. | |
virtual bool | finishLayout (const MCAssembler &Asm) const |
virtual uint64_t | generateCompactUnwindEncoding (const MCDwarfFrameInfo *FI, const MCContext *Ctxt) const |
Generate the compact unwind encoding for the CFI instructions. | |
bool | isDarwinCanonicalPersonality (const MCSymbol *Sym) const |
virtual std::optional< bool > | evaluateFixup (const MCFragment &, MCFixup &, MCValue &, uint64_t &) |
void | maybeAddReloc (const MCFragment &, const MCFixup &, const MCValue &, uint64_t &Value, bool IsResolved) |
virtual bool | mayNeedRelaxation (unsigned Opcode, ArrayRef< MCOperand > Operands, const MCSubtargetInfo &STI) const |
Check whether the given instruction (encoded as Opcode+Operands) may need relaxation. | |
virtual bool | fixupNeedsRelaxationAdvanced (const MCFragment &, const MCFixup &, const MCValue &, uint64_t, bool Resolved) const |
Target specific predicate for whether a given fixup requires the associated instruction to be relaxed. | |
virtual bool | fixupNeedsRelaxation (const MCFixup &Fixup, uint64_t Value) const |
Simple predicate for targets where !Resolved implies requiring relaxation. | |
virtual void | relaxInstruction (MCInst &Inst, const MCSubtargetInfo &STI) const |
Relax the instruction in the given fragment to the next wider instruction. | |
virtual bool | relaxAlign (MCFragment &F, unsigned &Size) |
virtual bool | relaxDwarfLineAddr (MCFragment &) const |
virtual bool | relaxDwarfCFA (MCFragment &) const |
virtual std::pair< bool, bool > | relaxLEB128 (MCFragment &, int64_t &Value) const |
Additional Inherited Members | |
![]() | |
static const MCSubtargetInfo * | getSubtargetInfo (const MCFragment &F) |
![]() | |
const llvm::endianness | Endian |
![]() | |
MCAsmBackend (llvm::endianness Endian) | |
![]() | |
MCAssembler * | Asm = nullptr |
bool | AllowAutoPadding = false |
bool | AllowEnhancedRelaxation = false |
Utilities for manipulating generated AVR machine code.
Definition at line 29 of file AVRAsmBackend.h.
|
inline |
Definition at line 31 of file AVRAsmBackend.h.
void llvm::AVRAsmBackend::adjustFixupValue | ( | const MCFixup & | Fixup, |
const MCValue & | Target, | ||
uint64_t & | Value, | ||
MCContext * | Ctx = nullptr |
||
) | const |
Definition at line 248 of file AVRAsmBackend.cpp.
References adjust::ldi::fixup(), Fixup, adjust::fixup_13_pcrel(), llvm::AVR::fixup_13_pcrel, llvm::AVR::fixup_16, llvm::AVR::fixup_16_pm, adjust::fixup_6(), llvm::AVR::fixup_6, adjust::fixup_6_adiw(), llvm::AVR::fixup_6_adiw, adjust::fixup_7_pcrel(), llvm::AVR::fixup_7_pcrel, adjust::fixup_call(), llvm::AVR::fixup_call, llvm::AVR::fixup_hh8_ldi, llvm::AVR::fixup_hh8_ldi_neg, llvm::AVR::fixup_hh8_ldi_pm, llvm::AVR::fixup_hh8_ldi_pm_neg, llvm::AVR::fixup_hi8_ldi, llvm::AVR::fixup_hi8_ldi_gs, llvm::AVR::fixup_hi8_ldi_neg, llvm::AVR::fixup_hi8_ldi_pm, llvm::AVR::fixup_hi8_ldi_pm_neg, llvm::AVR::fixup_ldi, adjust::fixup_lds_sts_16(), llvm::AVR::fixup_lds_sts_16, llvm::AVR::fixup_lo8_ldi, llvm::AVR::fixup_lo8_ldi_gs, llvm::AVR::fixup_lo8_ldi_neg, llvm::AVR::fixup_lo8_ldi_pm, llvm::AVR::fixup_lo8_ldi_pm_neg, llvm::AVR::fixup_ms8_ldi, llvm::AVR::fixup_ms8_ldi_neg, adjust::fixup_port5(), llvm::AVR::fixup_port5, adjust::fixup_port6(), llvm::AVR::fixup_port6, llvm::FK_Data_1, llvm::FK_Data_2, llvm::FK_Data_4, llvm::FK_Data_8, getFixupKindInfo(), adjust::ldi::hh8(), adjust::ldi::hi8(), llvm_unreachable, adjust::ldi::lo8(), adjust::ldi::ms8(), adjust::ldi::neg(), adjust::pm(), Size, llvm::MCFixupKindInfo::TargetSize, and adjust::unsigned_width().
Referenced by applyFixup().
|
overridevirtual |
Implements llvm::MCAsmBackend.
Definition at line 370 of file AVRAsmBackend.cpp.
References adjustFixupValue(), llvm::MCAsmBackend::Asm, assert(), llvm::Data, F, Fixup, forceRelocation(), llvm::MCValue::get(), llvm::MCAsmBackend::getContext(), getFixupKindInfo(), llvm::MCAssembler::getWriter(), Info, llvm::mc::isRelocation(), and llvm::MCObjectWriter::recordRelocation().
|
overridevirtual |
Implements llvm::MCAsmBackend.
Definition at line 366 of file AVRAsmBackend.cpp.
References llvm::createAVRELFObjectWriter(), and llvm::MCELFObjectTargetWriter::getOSABI().
bool llvm::AVRAsmBackend::forceRelocation | ( | const MCFragment & | F, |
const MCFixup & | Fixup, | ||
const MCValue & | Target | ||
) |
Definition at line 509 of file AVRAsmBackend.cpp.
References Fixup, llvm::AVR::fixup_13_pcrel, llvm::AVR::fixup_7_pcrel, and llvm::AVR::fixup_call.
Referenced by applyFixup().
|
overridevirtual |
Map a relocation name used in .reloc to a fixup kind.
Reimplemented from llvm::MCAsmBackend.
Definition at line 410 of file AVRAsmBackend.cpp.
References llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Default(), llvm::FirstLiteralRelocationKind, and Name.
|
overridevirtual |
Get information on a fixup kind.
Reimplemented from llvm::MCAsmBackend.
Definition at line 425 of file AVRAsmBackend.cpp.
References assert(), llvm::FirstTargetFixupKind, llvm::MCAsmBackend::getFixupKindInfo(), llvm::mc::isRelocation(), and llvm::AVR::NumTargetFixupKinds.
Referenced by adjustFixupValue(), and applyFixup().
|
overridevirtual |
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.
Implements llvm::MCAsmBackend.
Definition at line 498 of file AVRAsmBackend.cpp.