LLVM: llvm::RuntimeDyldMachOAArch64 Class Reference (original ) (raw )#include "[ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h](RuntimeDyldMachOAArch64%5F8h%5Fsource.html)"
Public Member Functions
RuntimeDyldMachOAArch64 (RuntimeDyld::MemoryManager &MM, JITSymbolResolver &Resolver )
unsigned
getMaxStubSize () const override
Align
getStubAlignment () override
Expected < int64_t >
decodeAddend (const RelocationEntry &RE) const
Extract the addend encoded in the instruction / memory location.
void
encodeAddend (uint8_t *LocalAddress, unsigned NumBytes, MachO::RelocationInfoType RelType, int64_t Addend) const
Extract the addend encoded in the instruction.
Expected < relocation_iterator >
processRelocationRef (unsigned SectionID, relocation_iterator RelI, const ObjectFile &BaseObjT, ObjSectionToIDMap &ObjSectionToID, StubMap &Stubs) override
Parses one or more object file relocations (some object files use relocation pairs) and stores it to Relocations or SymbolRelocations (this depends on the object file type).
void
resolveRelocation (const RelocationEntry &RE, uint64_t Value ) override
A object file specific relocation resolver.
Error
finalizeSection (const ObjectFile &Obj, unsigned SectionID, const SectionRef &Section)
Public Member Functions inherited from llvm::RuntimeDyldMachOCRTPBase< RuntimeDyldMachOAArch64 >
RuntimeDyldMachOCRTPBase (RuntimeDyld::MemoryManager &MemMgr , JITSymbolResolver &Resolver )
Error
finalizeLoad (const ObjectFile &Obj, ObjSectionToIDMap &SectionMap) override
void
registerEHFrames () override
Public Member Functions inherited from llvm::RuntimeDyldMachO
std::unique_ptr< RuntimeDyld::LoadedObjectInfo >
loadObject (const object::ObjectFile &O) override
SectionEntry &
getSection (unsigned SectionID)
bool
isCompatibleFile (const object::ObjectFile &Obj) const override
Public Member Functions inherited from llvm::RuntimeDyldImpl
RuntimeDyldImpl (RuntimeDyld::MemoryManager &MemMgr , JITSymbolResolver &Resolver )
virtual
~RuntimeDyldImpl ()
void
setProcessAllSections (bool ProcessAllSections )
uint64_t
getSectionLoadAddress (unsigned SectionID) const
uint8_t *
getSectionAddress (unsigned SectionID) const
StringRef
getSectionContent (unsigned SectionID) const
uint8_t *
getSymbolLocalAddress (StringRef Name) const
unsigned
getSymbolSectionID (StringRef Name) const
JITEvaluatedSymbol
getSymbol (StringRef Name) const
std::map< StringRef , JITEvaluatedSymbol >
getSymbolTable () const
void
resolveRelocations ()
void
resolveLocalRelocations ()
void
reassignSectionAddress (unsigned SectionID, uint64_t Addr)
void
mapSectionAddress (const void *LocalAddress, uint64_t TargetAddress)
bool
hasError ()
void
clearError ()
StringRef
getErrorString ()
void
setNotifyStubEmitted (NotifyStubEmittedFunction NotifyStubEmitted )
void
deregisterEHFrames ()
Additional Inherited Members
Static Public Member Functions inherited from llvm::RuntimeDyldMachO
static std::unique_ptr< RuntimeDyldMachO >
create (Triple::ArchType Arch , RuntimeDyld::MemoryManager &MemMgr , JITSymbolResolver &Resolver )
Create a RuntimeDyldMachO instance for the given target architecture.
Static Public Member Functions inherited from llvm::RuntimeDyldImpl
static void
finalizeAsync (std::unique_ptr< RuntimeDyldImpl > This, unique_function < void(object::OwningBinary < object::ObjectFile >, std::unique_ptr< RuntimeDyld::LoadedObjectInfo >, Error )> OnEmitted, object::OwningBinary < object::ObjectFile > O, std::unique_ptr< RuntimeDyld::LoadedObjectInfo > Info )
Protected Types inherited from llvm::RuntimeDyldImpl
typedef std::deque< SectionEntry >
SectionList
typedef unsigned
SID
typedef std::map< SectionRef , unsigned >
ObjSectionToIDMap
typedef std::vector< SymbolRef >
CommonSymbolList
typedef SmallVector < RelocationEntry , 64 >
RelocationList
typedef std::map< RelocationValueRef , uintptr_t >
StubMap
using
NotifyStubEmittedFunction
Protected Member Functions inherited from llvm::RuntimeDyldMachO
RuntimeDyldMachO (RuntimeDyld::MemoryManager &MemMgr , JITSymbolResolver &Resolver )
int64_t
memcpyAddend (const RelocationEntry &RE) const
This convenience method uses memcpy to extract a contiguous addend (the addend size and offset are taken from the corresponding fields of the RE).
RelocationEntry
getRelocationEntry (unsigned SectionID, const ObjectFile &BaseTObj, const relocation_iterator &RI) const
Given a relocation_iterator for a non-scattered relocation, construct a RelocationEntry and fill in the common fields.
Expected < relocation_iterator >
processScatteredVANILLA (unsigned SectionID, relocation_iterator RelI, const ObjectFile &BaseObjT, RuntimeDyldMachO::ObjSectionToIDMap &ObjSectionToID, bool TargetIsLocalThumbFunc=false)
Process a scattered vanilla relocation.
Expected < RelocationValueRef >
getRelocationValueRef (const ObjectFile &BaseTObj, const relocation_iterator &RI, const RelocationEntry &RE, ObjSectionToIDMap &ObjSectionToID)
Construct a RelocationValueRef representing the relocation target.
void
makeValueAddendPCRel (RelocationValueRef &Value , const relocation_iterator &RI, unsigned OffsetToNextPC)
Make the RelocationValueRef addend PC-relative.
void
dumpRelocationToResolve (const RelocationEntry &RE, uint64_t Value ) const
Dump information about the relocation entry (RE) and resolved value.
Error
populateIndirectSymbolPointersSection (const MachOObjectFile &Obj, const SectionRef &PTSection, unsigned PTSectionID)
Protected Member Functions inherited from llvm::RuntimeDyldImpl
void
writeInt16BE (uint8_t *Addr, uint16_t Value )
void
writeInt32BE (uint8_t *Addr, uint32_t Value )
void
writeInt64BE (uint8_t *Addr, uint64_t Value )
virtual void
setMipsABI (const ObjectFile &Obj)
uint64_t
readBytesUnaligned (uint8_t *Src, unsigned Size ) const
Endian-aware read Read the least significant Size bytes from Src.
void
writeBytesUnaligned (uint64_t Value , uint8_t *Dst, unsigned Size ) const
Endian-aware write.
virtual Expected < JITSymbolFlags >
getJITSymbolFlags (const SymbolRef &Sym)
Generate JITSymbolFlags from a libObject symbol.
virtual uint64_t
modifyAddressBasedOnFlags (uint64_t Addr, JITSymbolFlags Flags) const
Modify the given target address based on the given symbol flags.
Error
emitCommonSymbols (const ObjectFile &Obj, CommonSymbolList &CommonSymbols, uint64_t CommonSize, uint32_t CommonAlign)
Given the common symbols discovered in the object file, emit a new section for them and update the symbol mappings in the object and symbol table.
Expected < unsigned >
emitSection (const ObjectFile &Obj, const SectionRef &Section, bool IsCode)
Emits section data from the object file to the MemoryManager.
Expected < unsigned >
findOrEmitSection (const ObjectFile &Obj, const SectionRef &Section, bool IsCode, ObjSectionToIDMap &LocalSections)
Find Section in LocalSections.
void
addRelocationForSection (const RelocationEntry &RE, unsigned SectionID)
void
addRelocationForSymbol (const RelocationEntry &RE, StringRef SymbolName)
uint8_t *
createStubFunction (uint8_t *Addr, unsigned AbiVariant=0)
Emits long jump instruction to Addr.
void
resolveRelocationList (const RelocationList &Relocs, uint64_t Value )
Resolves relocations from Relocs list with address from Value .
void
applyExternalSymbolRelocations (const StringMap < JITEvaluatedSymbol > ExternalSymbolMap)
Error
resolveExternalSymbols ()
Resolve relocations to external symbols.
Error
computeTotalAllocSize (const ObjectFile &Obj, uint64_t &CodeSize , Align &CodeAlign, uint64_t &RODataSize, Align &RODataAlign, uint64_t &RWDataSize, Align &RWDataAlign)
unsigned
computeGOTSize (const ObjectFile &Obj)
unsigned
computeSectionStubBufSize (const ObjectFile &Obj, const SectionRef &Section)
Expected < ObjSectionToIDMap >
loadObjectImpl (const object::ObjectFile &Obj)
virtual size_t
getGOTEntrySize ()
virtual void
processNewSymbol (const SymbolRef &ObjSymbol, SymbolTableEntry &Entry)
virtual bool
relocationNeedsGot (const RelocationRef &R) const
virtual bool
relocationNeedsStub (const RelocationRef &R) const
virtual bool
relocationNeedsDLLImportStub (const RelocationRef &R) const
virtual unsigned
sizeAfterAddingDLLImportStub (unsigned Size ) const
Static Protected Member Functions inherited from llvm::RuntimeDyldMachO
static section_iterator
getSectionByAddress (const MachOObjectFile &Obj, uint64_t Addr)
Protected Attributes inherited from llvm::RuntimeDyldMachO
SmallVector < EHFrameRelatedSections , 2 >
UnregisteredEHFrameSections
Protected Attributes inherited from llvm::RuntimeDyldImpl
RuntimeDyld::MemoryManager &
MemMgr
JITSymbolResolver &
Resolver
SectionList
Sections
RTDyldSymbolTable
GlobalSymbolTable
std::unordered_map< unsigned , RelocationList >
Relocations
StringMap < RelocationList >
ExternalSymbolRelocations
Triple::ArchType
Arch
bool
IsTargetLittleEndian
bool
IsMipsO32ABI
bool
IsMipsN32ABI
bool
IsMipsN64ABI
bool
ProcessAllSections
sys::Mutex
lock
NotifyStubEmittedFunction
NotifyStubEmitted
bool
HasError
std::string
ErrorStr
Static Protected Attributes inherited from llvm::RuntimeDyldImpl
static const unsigned
AbsoluteSymbolSection = ~0U
Definition at line 19 of file RuntimeDyldMachOAArch64.h .
◆ TargetPtrT◆ decodeAddend()Extract the addend encoded in the instruction / memory location.
Definition at line 34 of file RuntimeDyldMachOAArch64.h .
References llvm::MachO::ARM64_RELOC_BRANCH26 , llvm::MachO::ARM64_RELOC_GOT_LOAD_PAGE21 , llvm::MachO::ARM64_RELOC_GOT_LOAD_PAGEOFF12 , llvm::MachO::ARM64_RELOC_PAGE21 , llvm::MachO::ARM64_RELOC_PAGEOFF12 , llvm::MachO::ARM64_RELOC_POINTER_TO_GOT , llvm::MachO::ARM64_RELOC_UNSIGNED , assert() , llvm::inconvertibleErrorCode() , llvm_unreachable , llvm::make_error() , llvm::RelocationEntry::Offset , llvm::RelocationEntry::RelType , llvm::RelocationEntry::SectionID , llvm::RuntimeDyldImpl::Sections , llvm::SignExtend64() , and llvm::RelocationEntry::Size .
Referenced by processRelocationRef() .
◆ encodeAddend()Extract the addend encoded in the instruction.
Definition at line 155 of file RuntimeDyldMachOAArch64.h .
References llvm::MachO::ARM64_RELOC_BRANCH26 , llvm::MachO::ARM64_RELOC_GOT_LOAD_PAGE21 , llvm::MachO::ARM64_RELOC_GOT_LOAD_PAGEOFF12 , llvm::MachO::ARM64_RELOC_PAGE21 , llvm::MachO::ARM64_RELOC_PAGEOFF12 , llvm::MachO::ARM64_RELOC_POINTER_TO_GOT , llvm::MachO::ARM64_RELOC_UNSIGNED , assert() , llvm::isInt() , llvm::isUInt() , and llvm_unreachable .
Referenced by resolveRelocation() .
◆ finalizeSection()◆ getMaxStubSize()
unsigned llvm::RuntimeDyldMachOAArch64::getMaxStubSize ( ) const
inlineoverridevirtual
◆ getStubAlignment()
Align llvm::RuntimeDyldMachOAArch64::getStubAlignment ( )
inlineoverridevirtual
◆ processRelocationRef()Parses one or more object file relocations (some object files use relocation pairs) and stores it to Relocations or SymbolRelocations (this depends on the object file type).
Returns
Iterator to the next relocation that needs to be parsed.
Implements llvm::RuntimeDyldImpl .
Definition at line 273 of file RuntimeDyldMachOAArch64.h .
References llvm::RelocationEntry::Addend , llvm::RuntimeDyldImpl::addRelocationForSection() , llvm::RuntimeDyldImpl::addRelocationForSymbol() , llvm::MachO::ARM64_RELOC_ADDEND , llvm::MachO::ARM64_RELOC_GOT_LOAD_PAGE21 , llvm::MachO::ARM64_RELOC_GOT_LOAD_PAGEOFF12 , llvm::MachO::ARM64_RELOC_POINTER_TO_GOT , llvm::MachO::ARM64_RELOC_SUBTRACTOR , assert() , decodeAddend() , llvm::object::RelocationRef::getRawDataRefImpl() , llvm::RuntimeDyldMachO::getRelocationEntry() , llvm::RuntimeDyldMachO::getRelocationValueRef() , llvm::inconvertibleErrorCode() , llvm::RelocationEntry::IsPCRel , llvm::make_error() , llvm::RuntimeDyldMachO::makeValueAddendPCRel() , llvm::RelocationEntry::RelType , llvm::SignExtend64() , and llvm::RelocationEntry::Size .
◆ resolveRelocation()A object file specific relocation resolver.
Parameters
RE
The relocation to be resolved
Value
Target symbol address to apply the relocation action
Implements llvm::RuntimeDyldImpl .
Definition at line 355 of file RuntimeDyldMachOAArch64.h .
References llvm::RelocationEntry::Addend , llvm::MachO::ARM64_RELOC_ADDEND , llvm::MachO::ARM64_RELOC_BRANCH26 , llvm::MachO::ARM64_RELOC_GOT_LOAD_PAGE21 , llvm::MachO::ARM64_RELOC_GOT_LOAD_PAGEOFF12 , llvm::MachO::ARM64_RELOC_PAGE21 , llvm::MachO::ARM64_RELOC_PAGEOFF12 , llvm::MachO::ARM64_RELOC_POINTER_TO_GOT , llvm::MachO::ARM64_RELOC_SUBTRACTOR , llvm::MachO::ARM64_RELOC_TLVP_LOAD_PAGE21 , llvm::MachO::ARM64_RELOC_TLVP_LOAD_PAGEOFF12 , llvm::MachO::ARM64_RELOC_UNSIGNED , assert() , llvm::RuntimeDyldMachO::dumpRelocationToResolve() , encodeAddend() , llvm::RelocationEntry::IsPCRel , LLVM_DEBUG , llvm_unreachable , llvm::RelocationEntry::Offset , llvm::RelocationEntry::RelType , llvm::RelocationEntry::SectionPair::SectionA , llvm::RelocationEntry::SectionPair::SectionB , llvm::RelocationEntry::SectionID , llvm::RelocationEntry::Sections , llvm::RuntimeDyldImpl::Sections , llvm::RelocationEntry::Size , and llvm::RuntimeDyldImpl::writeBytesUnaligned() .
The documentation for this class was generated from the following file: