LLVM
8.0.1
|
#include "Target/Mips/MCTargetDesc/MipsAsmBackend.h"
Public Member Functions | |
MipsAsmBackend (const Target &T, const MCRegisterInfo &MRI, const Triple &TT, StringRef CPU, bool N32) | |
std::unique_ptr< MCObjectTargetWriter > | createObjectTargetWriter () const override |
void | applyFixup (const MCAssembler &Asm, const MCFixup &Fixup, const MCValue &Target, MutableArrayRef< char > Data, uint64_t Value, bool IsResolved, const MCSubtargetInfo *STI) const override |
ApplyFixup - Apply the Value for given Fixup into the provided data fragment, at the offset specified by the fixup and following the fixup kind as appropriate. More... | |
Optional< MCFixupKind > | getFixupKind (StringRef Name) const override |
Map a relocation name used in .reloc to a fixup kind. More... | |
const MCFixupKindInfo & | getFixupKindInfo (MCFixupKind Kind) const override |
Get information on a fixup kind. More... | |
unsigned | getNumFixupKinds () const override |
Get the number of target specific fixup kinds. More... | |
bool | writeNopData (raw_ostream &OS, uint64_t Count) const override |
WriteNopData - Write an (optimal) nop sequence of Count bytes to the given output. More... | |
bool | shouldForceRelocation (const MCAssembler &Asm, const MCFixup &Fixup, const MCValue &Target) override |
Hook to check if a relocation is needed for some target specific reason. More... | |
bool | isMicroMips (const MCSymbol *Sym) const override |
Check whether a given symbol has been flagged with MICROMIPS flag. More... | |
Target Relaxation Interfaces | |
bool | mayNeedRelaxation (const MCInst &Inst, const MCSubtargetInfo &STI) const override |
MayNeedRelaxation - Check whether the given instruction may need relaxation. More... | |
bool | fixupNeedsRelaxation (const MCFixup &Fixup, uint64_t Value, const MCRelaxableFragment *DF, const MCAsmLayout &Layout) const override |
fixupNeedsRelaxation - Target specific predicate for whether a given fixup requires the associated instruction to be relaxed. More... | |
void | relaxInstruction (const MCInst &Inst, const MCSubtargetInfo &STI, MCInst &Res) const override |
RelaxInstruction - Relax the instruction in the given fragment to the next wider instruction. More... | |
Public Member Functions inherited from llvm::MCAsmBackend | |
MCAsmBackend (const MCAsmBackend &)=delete | |
MCAsmBackend & | operator= (const MCAsmBackend &)=delete |
virtual | ~MCAsmBackend () |
virtual void | reset () |
lifetime management More... | |
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. More... | |
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. More... | |
virtual unsigned | getMinimumNopSize () const |
Returns the minimum size of a nop in bytes on this target. More... | |
virtual void | finishLayout (MCAssembler const &Asm, MCAsmLayout &Layout) const |
Give backend an opportunity to finish layout after relaxation. More... | |
virtual void | handleAssemblerFlag (MCAssemblerFlag Flag) |
Handle any target-specific assembler flags. By default, do nothing. More... | |
virtual uint32_t | generateCompactUnwindEncoding (ArrayRef< MCCFIInstruction >) const |
Generate the compact unwind encoding for the CFI instructions. More... | |
void | handleCodePaddingBasicBlockStart (MCObjectStreamer *OS, const MCCodePaddingContext &Context) |
Handles all target related code padding when starting to write a new basic block to an object file. More... | |
void | handleCodePaddingBasicBlockEnd (const MCCodePaddingContext &Context) |
Handles all target related code padding after writing a block to an object file. More... | |
void | handleCodePaddingInstructionBegin (const MCInst &Inst) |
Handles all target related code padding before writing a new instruction to an object file. More... | |
void | handleCodePaddingInstructionEnd (const MCInst &Inst) |
Handles all target related code padding after writing an instruction to an object file. More... | |
bool | relaxFragment (MCPaddingFragment *PF, MCAsmLayout &Layout) |
Relaxes a fragment (changes the size of the padding) according to target requirements. More... | |
virtual bool | requiresDiffExpressionRelocations () const |
Check whether the given target requires emitting differences of two symbols as a set of relocations. More... | |
virtual bool | fixupNeedsRelaxationAdvanced (const MCFixup &Fixup, bool Resolved, uint64_t Value, const MCRelaxableFragment *DF, const MCAsmLayout &Layout, const bool WasForced) const |
Target specific predicate for whether a given fixup requires the associated instruction to be relaxed. More... | |
Additional Inherited Members | |
Public Attributes inherited from llvm::MCAsmBackend | |
const support::endianness | Endian |
Protected Member Functions inherited from llvm::MCAsmBackend | |
MCAsmBackend (support::endianness Endian) | |
Definition at line 31 of file MipsAsmBackend.h.
|
inline |
Definition at line 36 of file MipsAsmBackend.h.
References applyFixup(), llvm::HexStyle::Asm, createObjectTargetWriter(), llvm::Data, Fixup, getFixupKind(), getFixupKindInfo(), Kind, and Name.
Referenced by llvm::createMipsAsmBackend().
|
overridevirtual |
ApplyFixup - Apply the Value
for given Fixup
into the provided data fragment, at the offset specified by the fixup and following the fixup kind as appropriate.
Implements llvm::MCAsmBackend.
Definition at line 244 of file MipsAsmBackend.cpp.
References adjustFixupValue(), calculateMMLEIndex(), llvm::MCAsmBackend::Endian, llvm::Mips::fixup_MICROMIPS_PC10_S1, llvm::Mips::fixup_Mips_16, llvm::Mips::fixup_Mips_64, llvm::FK_Data_2, llvm::FK_Data_4, llvm::FK_Data_8, llvm::MCAssembler::getContext(), getFixupKindInfo(), llvm::MCFixup::getKind(), llvm::MCFixup::getOffset(), Kind, llvm::support::little, llvm::BitmaskEnumDetail::Mask(), needsMMLEByteOrder(), and llvm::MCFixupKindInfo::TargetSize.
Referenced by MipsAsmBackend().
|
overridevirtual |
Implements llvm::MCAsmBackend.
Definition at line 220 of file MipsAsmBackend.cpp.
References llvm::createMipsELFObjectWriter().
Referenced by MipsAsmBackend().
|
inlineoverridevirtual |
fixupNeedsRelaxation - Target specific predicate for whether a given fixup requires the associated instruction to be relaxed.
Implements llvm::MCAsmBackend.
Definition at line 70 of file MipsAsmBackend.h.
References llvm_unreachable.
|
overridevirtual |
Map a relocation name used in .reloc to a fixup kind.
Reimplemented from llvm::MCAsmBackend.
Definition at line 304 of file MipsAsmBackend.cpp.
References llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Default(), llvm::Mips::fixup_MICROMIPS_CALL16, llvm::Mips::fixup_MICROMIPS_GOT16, llvm::Mips::fixup_MICROMIPS_GOT_DISP, llvm::Mips::fixup_MICROMIPS_GOT_OFST, llvm::Mips::fixup_MICROMIPS_GOT_PAGE, llvm::Mips::fixup_MICROMIPS_GOTTPREL, llvm::Mips::fixup_MICROMIPS_JALR, llvm::Mips::fixup_MICROMIPS_TLS_DTPREL_HI16, llvm::Mips::fixup_MICROMIPS_TLS_DTPREL_LO16, llvm::Mips::fixup_MICROMIPS_TLS_GD, llvm::Mips::fixup_MICROMIPS_TLS_LDM, llvm::Mips::fixup_MICROMIPS_TLS_TPREL_HI16, llvm::Mips::fixup_MICROMIPS_TLS_TPREL_LO16, llvm::Mips::fixup_Mips_CALL16, llvm::Mips::fixup_Mips_CALL_HI16, llvm::Mips::fixup_Mips_CALL_LO16, llvm::Mips::fixup_Mips_DTPREL_HI, llvm::Mips::fixup_Mips_DTPREL_LO, llvm::Mips::fixup_Mips_GOT, llvm::Mips::fixup_Mips_GOT_DISP, llvm::Mips::fixup_Mips_GOT_HI16, llvm::Mips::fixup_Mips_GOT_LO16, llvm::Mips::fixup_Mips_GOT_OFST, llvm::Mips::fixup_Mips_GOT_PAGE, llvm::Mips::fixup_Mips_GOTTPREL, llvm::Mips::fixup_Mips_JALR, llvm::Mips::fixup_Mips_NONE, llvm::Mips::fixup_Mips_TLSGD, llvm::Mips::fixup_Mips_TLSLDM, llvm::Mips::fixup_Mips_TPREL_HI, llvm::Mips::fixup_Mips_TPREL_LO, llvm::FK_Data_4, llvm::MCAsmBackend::getFixupKind(), getFixupKindInfo(), and Name.
Referenced by MipsAsmBackend().
|
overridevirtual |
Get information on a fixup kind.
Reimplemented from llvm::MCAsmBackend.
Definition at line 348 of file MipsAsmBackend.cpp.
References llvm::array_lengthof(), assert(), llvm::MCAsmBackend::Endian, llvm::FirstTargetFixupKind, llvm::MCFixupKindInfo::FKF_IsPCRel, llvm::MCAsmBackend::getFixupKindInfo(), getNumFixupKinds(), llvm::support::little, and llvm::Mips::NumTargetFixupKinds.
Referenced by applyFixup(), getFixupKind(), and MipsAsmBackend().
|
inlineoverridevirtual |
Get the number of target specific fixup kinds.
Implements llvm::MCAsmBackend.
Definition at line 52 of file MipsAsmBackend.h.
References llvm::Mips::NumTargetFixupKinds.
Referenced by getFixupKindInfo().
Check whether a given symbol has been flagged with MICROMIPS flag.
Reimplemented from llvm::MCAsmBackend.
Definition at line 580 of file MipsAsmBackend.cpp.
References llvm::ELF::STO_MIPS_MICROMIPS.
Referenced by relaxInstruction().
|
inlineoverridevirtual |
MayNeedRelaxation - Check whether the given instruction may need relaxation.
Inst | - The instruction to test. |
Implements llvm::MCAsmBackend.
Definition at line 63 of file MipsAsmBackend.h.
|
inlineoverridevirtual |
RelaxInstruction - Relax the instruction in the given fragment to the next wider instruction.
Inst | - The instruction to relax, which may be the same as the output. | |
[out] | Res | On return, the relaxed instruction. |
Implements llvm::MCAsmBackend.
Definition at line 84 of file MipsAsmBackend.h.
References isMicroMips(), shouldForceRelocation(), and writeNopData().
|
overridevirtual |
Hook to check if a relocation is needed for some target specific reason.
Reimplemented from llvm::MCAsmBackend.
Definition at line 537 of file MipsAsmBackend.cpp.
References llvm::Mips::fixup_MICROMIPS_CALL16, llvm::Mips::fixup_MICROMIPS_GOT16, llvm::Mips::fixup_MICROMIPS_GOT_DISP, llvm::Mips::fixup_MICROMIPS_GOT_OFST, llvm::Mips::fixup_MICROMIPS_GOT_PAGE, llvm::Mips::fixup_MICROMIPS_GOTTPREL, llvm::Mips::fixup_MICROMIPS_JALR, llvm::Mips::fixup_MICROMIPS_TLS_DTPREL_HI16, llvm::Mips::fixup_MICROMIPS_TLS_DTPREL_LO16, llvm::Mips::fixup_MICROMIPS_TLS_GD, llvm::Mips::fixup_MICROMIPS_TLS_LDM, llvm::Mips::fixup_MICROMIPS_TLS_TPREL_HI16, llvm::Mips::fixup_MICROMIPS_TLS_TPREL_LO16, llvm::Mips::fixup_Mips_CALL16, llvm::Mips::fixup_Mips_CALL_HI16, llvm::Mips::fixup_Mips_CALL_LO16, llvm::Mips::fixup_Mips_DTPREL_HI, llvm::Mips::fixup_Mips_DTPREL_LO, llvm::Mips::fixup_Mips_GOT, llvm::Mips::fixup_Mips_GOT_DISP, llvm::Mips::fixup_Mips_GOT_HI16, llvm::Mips::fixup_Mips_GOT_LO16, llvm::Mips::fixup_Mips_GOT_OFST, llvm::Mips::fixup_Mips_GOT_PAGE, llvm::Mips::fixup_Mips_GOTTPREL, llvm::Mips::fixup_Mips_JALR, llvm::Mips::fixup_Mips_TLSGD, llvm::Mips::fixup_Mips_TLSLDM, llvm::Mips::fixup_Mips_TPREL_HI, llvm::Mips::fixup_Mips_TPREL_LO, llvm::FixupKind(), and llvm::MCFixup::getKind().
Referenced by relaxInstruction().
|
overridevirtual |
WriteNopData - 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 525 of file MipsAsmBackend.cpp.
References llvm::raw_ostream::write_zeros().
Referenced by relaxInstruction().