|
static std::unique_ptr< RuntimeDyldMachO > | create (Triple::ArchType Arch, RuntimeDyld::MemoryManager &MemMgr, JITSymbolResolver &Resolver) |
| Create a RuntimeDyldMachO instance for the given target architecture.
|
|
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) |
|
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 = RuntimeDyld::NotifyStubEmittedFunction |
|
| 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) |
|
virtual unsigned | getMaxStubSize () const =0 |
|
virtual Align | getStubAlignment ()=0 |
|
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.
|
|
virtual void | resolveRelocation (const RelocationEntry &RE, uint64_t Value)=0 |
| A object file specific relocation resolver.
|
|
virtual Expected< relocation_iterator > | processRelocationRef (unsigned SectionID, relocation_iterator RelI, const ObjectFile &Obj, ObjSectionToIDMap &ObjSectionToID, StubMap &Stubs)=0 |
| 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 | 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 section_iterator | getSectionByAddress (const MachOObjectFile &Obj, uint64_t Addr) |
|
SmallVector< EHFrameRelatedSections, 2 > | UnregisteredEHFrameSections |
|
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 const unsigned | AbsoluteSymbolSection = ~0U |
|
template<typename Impl>
class llvm::RuntimeDyldMachOCRTPBase< Impl >
RuntimeDyldMachOTarget - Templated base class for generic MachO linker algorithms and data structures.
Concrete, target specific sub-classes can be accessed via the impl() methods. (i.e. the RuntimeDyldMachO hierarchy uses the Curiously Recurring Template Idiom). Concrete subclasses for each target can be found in ./Targets.
Definition at line 140 of file RuntimeDyldMachO.h.