Adding multiple GOT handling to RuntimeDyldELF

Patch by Ashok Thirumurthi



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192020 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Andrew Kaylor
2013-10-05 01:52:09 +00:00
parent c664d76716
commit 9cffedbbfd
2 changed files with 82 additions and 60 deletions

View File

@@ -15,6 +15,7 @@
#define LLVM_RUNTIME_DYLD_ELF_H
#include "RuntimeDyldImpl.h"
#include "llvm/ADT/DenseMap.h"
using namespace llvm;
@@ -91,12 +92,15 @@ class RuntimeDyldELF : public RuntimeDyldImpl {
virtual void updateGOTEntries(StringRef Name, uint64_t Addr);
SmallVector<RelocationValueRef, 2> GOTEntries;
unsigned GOTSectionID;
// Relocation entries for symbols whose position-independant offset is
// updated in a global offset table.
typedef unsigned SID; // Type for SectionIDs
typedef SmallVector<RelocationValueRef, 2> GOTRelocations;
GOTRelocations GOTEntries; // List of entries requiring finalization.
SmallVector<std::pair<SID, GOTRelocations>, 8> GOTs; // Allocated tables.
public:
RuntimeDyldELF(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm),
GOTSectionID(0)
RuntimeDyldELF(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm)
{}
virtual void resolveRelocation(const RelocationEntry &RE, uint64_t Value);