diff options
Diffstat (limited to 'lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h')
-rw-r--r-- | lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h | 125 |
1 files changed, 50 insertions, 75 deletions
diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h index 3adf827..27db5cd 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h @@ -22,67 +22,43 @@ using namespace llvm; namespace llvm { namespace { - // Helper for extensive error checking in debug builds. - error_code Check(error_code Err) { - if (Err) { - report_fatal_error(Err.message()); - } - return Err; +// Helper for extensive error checking in debug builds. +error_code Check(error_code Err) { + if (Err) { + report_fatal_error(Err.message()); } + return Err; +} } // end anonymous namespace class RuntimeDyldELF : public RuntimeDyldImpl { - void resolveRelocation(const SectionEntry &Section, - uint64_t Offset, - uint64_t Value, - uint32_t Type, - int64_t Addend, - uint64_t SymOffset=0); - - void resolveX86_64Relocation(const SectionEntry &Section, - uint64_t Offset, - uint64_t Value, - uint32_t Type, - int64_t Addend, + void resolveRelocation(const SectionEntry &Section, uint64_t Offset, + uint64_t Value, uint32_t Type, int64_t Addend, + uint64_t SymOffset = 0); + + void resolveX86_64Relocation(const SectionEntry &Section, uint64_t Offset, + uint64_t Value, uint32_t Type, int64_t Addend, uint64_t SymOffset); - void resolveX86Relocation(const SectionEntry &Section, - uint64_t Offset, - uint32_t Value, - uint32_t Type, - int32_t Addend); - - void resolveAArch64Relocation(const SectionEntry &Section, - uint64_t Offset, - uint64_t Value, - uint32_t Type, - int64_t Addend); - - void resolveARMRelocation(const SectionEntry &Section, - uint64_t Offset, - uint32_t Value, - uint32_t Type, - int32_t Addend); - - void resolveMIPSRelocation(const SectionEntry &Section, - uint64_t Offset, - uint32_t Value, - uint32_t Type, - int32_t Addend); - - void resolvePPC64Relocation(const SectionEntry &Section, - uint64_t Offset, - uint64_t Value, - uint32_t Type, - int64_t Addend); - - void resolveSystemZRelocation(const SectionEntry &Section, - uint64_t Offset, - uint64_t Value, - uint32_t Type, - int64_t Addend); - - unsigned getMaxStubSize() { + void resolveX86Relocation(const SectionEntry &Section, uint64_t Offset, + uint32_t Value, uint32_t Type, int32_t Addend); + + void resolveAArch64Relocation(const SectionEntry &Section, uint64_t Offset, + uint64_t Value, uint32_t Type, int64_t Addend); + + void resolveARMRelocation(const SectionEntry &Section, uint64_t Offset, + uint32_t Value, uint32_t Type, int32_t Addend); + + void resolveMIPSRelocation(const SectionEntry &Section, uint64_t Offset, + uint32_t Value, uint32_t Type, int32_t Addend); + + void resolvePPC64Relocation(const SectionEntry &Section, uint64_t Offset, + uint64_t Value, uint32_t Type, int64_t Addend); + + void resolveSystemZRelocation(const SectionEntry &Section, uint64_t Offset, + uint64_t Value, uint32_t Type, int64_t Addend); + + unsigned getMaxStubSize() override { if (Arch == Triple::aarch64) return 20; // movz; movk; movk; movk; br if (Arch == Triple::arm || Arch == Triple::thumb) @@ -99,7 +75,7 @@ class RuntimeDyldELF : public RuntimeDyldImpl { return 0; } - unsigned getStubAlignment() { + unsigned getStubAlignment() override { if (Arch == Triple::systemz) return 8; else @@ -107,16 +83,15 @@ class RuntimeDyldELF : public RuntimeDyldImpl { } uint64_t findPPC64TOC() const; - void findOPDEntrySection(ObjectImage &Obj, - ObjSectionToIDMap &LocalSections, + void findOPDEntrySection(ObjectImage &Obj, ObjSectionToIDMap &LocalSections, RelocationValueRef &Rel); uint64_t findGOTEntry(uint64_t LoadAddr, uint64_t Offset); size_t getGOTEntrySize(); - virtual void updateGOTEntries(StringRef Name, uint64_t Addr); + void updateGOTEntries(StringRef Name, uint64_t Addr) override; - // Relocation entries for symbols whose position-independant offset is + // Relocation entries for symbols whose position-independent offset is // updated in a global offset table. typedef SmallVector<RelocationValueRef, 2> GOTRelocations; GOTRelocations GOTEntries; // List of entries requiring finalization. @@ -129,22 +104,22 @@ class RuntimeDyldELF : public RuntimeDyldImpl { SmallVector<SID, 2> RegisteredEHFrameSections; public: - RuntimeDyldELF(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm) - {} - - virtual void resolveRelocation(const RelocationEntry &RE, uint64_t Value); - virtual void processRelocationRef(unsigned SectionID, - RelocationRef RelI, - ObjectImage &Obj, - ObjSectionToIDMap &ObjSectionToID, - const SymbolTableMap &Symbols, - StubMap &Stubs); - virtual bool isCompatibleFormat(const ObjectBuffer *Buffer) const; - virtual ObjectImage *createObjectImage(ObjectBuffer *InputBuffer); - virtual void registerEHFrames(); - virtual void deregisterEHFrames(); - virtual void finalizeLoad(ObjSectionToIDMap &SectionMap); + RuntimeDyldELF(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm) {} + + void resolveRelocation(const RelocationEntry &RE, uint64_t Value) override; + relocation_iterator + processRelocationRef(unsigned SectionID, relocation_iterator RelI, + ObjectImage &Obj, ObjSectionToIDMap &ObjSectionToID, + const SymbolTableMap &Symbols, StubMap &Stubs) override; + bool isCompatibleFormat(const ObjectBuffer *Buffer) const override; + bool isCompatibleFile(const object::ObjectFile *Buffer) const override; + void registerEHFrames() override; + void deregisterEHFrames() override; + void finalizeLoad(ObjSectionToIDMap &SectionMap) override; virtual ~RuntimeDyldELF(); + + static ObjectImage *createObjectImage(ObjectBuffer *InputBuffer); + static ObjectImage *createObjectImageFromFile(object::ObjectFile *Obj); }; } // end namespace llvm |