LLVM 22.0.0git
|
#include "Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h"
Public Member Functions | |
ARMAsmBackendDarwin (const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI) | |
std::unique_ptr< MCObjectTargetWriter > | createObjectTargetWriter () const override |
uint64_t | generateCompactUnwindEncoding (const MCDwarfFrameInfo *FI, const MCContext *Ctxt) const override |
Generate compact unwind encoding for the function based on the CFI instructions. | |
Public Member Functions inherited from llvm::ARMAsmBackend | |
ARMAsmBackend (const Target &T, llvm::endianness Endian) | |
bool | hasNOP (const MCSubtargetInfo *STI) const |
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 | shouldForceRelocation (const MCFixup &Fixup, const MCValue &Target) |
unsigned | adjustFixupValue (const MCAssembler &Asm, const MCFixup &Fixup, const MCValue &Target, uint64_t Value, bool IsResolved, MCContext &Ctx, const MCSubtargetInfo *STI) const |
std::optional< bool > | evaluateFixup (const MCFragment &, MCFixup &, MCValue &, uint64_t &) override |
void | applyFixup (const MCFragment &, const MCFixup &, const MCValue &Target, uint8_t *Data, uint64_t Value, bool IsResolved) override |
unsigned | getRelaxedOpcode (unsigned Op, const MCSubtargetInfo &STI) const |
bool | mayNeedRelaxation (unsigned Opcode, ArrayRef< MCOperand > Operands, const MCSubtargetInfo &STI) const override |
Check whether the given instruction (encoded as Opcode+Operands) may need relaxation. | |
const char * | reasonForFixupRelaxation (const MCFixup &Fixup, uint64_t Value) const |
bool | fixupNeedsRelaxationAdvanced (const MCFragment &, const MCFixup &, const MCValue &, uint64_t, bool) const override |
Target specific predicate for whether a given fixup requires the associated instruction to be relaxed. | |
void | relaxInstruction (MCInst &Inst, const MCSubtargetInfo &STI) const override |
Relax the instruction in the given fragment to the next wider instruction. | |
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. | |
unsigned | getPointerSize () const |
Public Member Functions inherited from llvm::MCAsmBackend | |
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 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 | finishLayout (const MCAssembler &Asm) const |
bool | isDarwinCanonicalPersonality (const MCSymbol *Sym) const |
void | maybeAddReloc (const MCFragment &, const MCFixup &, const MCValue &, uint64_t &Value, bool IsResolved) |
virtual bool | fixupNeedsRelaxation (const MCFixup &Fixup, uint64_t Value) const |
Simple predicate for targets where !Resolved implies requiring relaxation. | |
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 |
Public Attributes | |
const MachO::CPUSubTypeARM | Subtype |
Public Attributes inherited from llvm::MCAsmBackend | |
const llvm::endianness | Endian |
Additional Inherited Members | |
Static Public Member Functions inherited from llvm::MCAsmBackend | |
static const MCSubtargetInfo * | getSubtargetInfo (const MCFragment &F) |
Protected Member Functions inherited from llvm::MCAsmBackend | |
MCAsmBackend (llvm::endianness Endian) | |
Protected Attributes inherited from llvm::MCAsmBackend | |
MCAssembler * | Asm = nullptr |
bool | AllowAutoPadding = false |
bool | AllowEnhancedRelaxation = false |
Definition at line 18 of file ARMAsmBackendDarwin.h.
|
inline |
Definition at line 23 of file ARMAsmBackendDarwin.h.
References llvm::ARMAsmBackend::ARMAsmBackend(), llvm::cantFail(), getCPUSubType(), llvm::little, Subtype, and T.
|
inlineoverridevirtual |
Implements llvm::MCAsmBackend.
Definition at line 31 of file ARMAsmBackendDarwin.h.
References llvm::cantFail(), llvm::createARMMachObjectWriter(), llvm::MachO::getCPUType(), and Subtype.
|
overridevirtual |
Generate compact unwind encoding for the function based on the CFI instructions.
If the CFI instructions describe a frame that cannot be encoded in compact unwind, the method returns UNWIND_ARM_MODE_DWARF which tells the runtime to fallback and unwind using dwarf.
Reimplemented from llvm::MCAsmBackend.
Definition at line 1171 of file ARMAsmBackend.cpp.
References contains(), llvm::MachO::CPU_SUBTYPE_ARM_V7K, llvm::dbgs(), DEBUG_WITH_TYPE, llvm::MCContext::emitCompactUnwindNonCanonical(), llvm::ArrayRef< T >::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::MCDwarfFrameInfo::Instructions, llvm::MCAsmBackend::isDarwinCanonicalPersonality(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), llvm::Offset, llvm::MCCFIInstruction::OpDefCfa, llvm::MCCFIInstruction::OpDefCfaOffset, llvm::MCCFIInstruction::OpDefCfaRegister, llvm::MCCFIInstruction::OpOffset, llvm::MCCFIInstruction::OpRelOffset, llvm::MCDwarfFrameInfo::Personality, Subtype, CU::UNWIND_ARM_FRAME_FIRST_PUSH_R4, CU::UNWIND_ARM_FRAME_FIRST_PUSH_R5, CU::UNWIND_ARM_FRAME_FIRST_PUSH_R6, CU::UNWIND_ARM_FRAME_SECOND_PUSH_R10, CU::UNWIND_ARM_FRAME_SECOND_PUSH_R11, CU::UNWIND_ARM_FRAME_SECOND_PUSH_R12, CU::UNWIND_ARM_FRAME_SECOND_PUSH_R8, CU::UNWIND_ARM_FRAME_SECOND_PUSH_R9, CU::UNWIND_ARM_MODE_DWARF, CU::UNWIND_ARM_MODE_FRAME, and CU::UNWIND_ARM_MODE_FRAME_D.
const MachO::CPUSubTypeARM llvm::ARMAsmBackendDarwin::Subtype |
Definition at line 22 of file ARMAsmBackendDarwin.h.
Referenced by ARMAsmBackendDarwin(), createObjectTargetWriter(), and generateCompactUnwindEncoding().