diff options
author | Lang Hames <lhames@gmail.com> | 2018-03-14 06:25:07 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-03-14 06:25:07 +0000 |
commit | 313f590aee01f2bf3a27855a8f7f0f0b800272ce (patch) | |
tree | 1810f7029bae4bb2c193967a61039943cac510b1 /llvm/lib | |
parent | d4a768e78f060afdc43280ef79e87812be22d53c (diff) | |
download | bcm5719-llvm-313f590aee01f2bf3a27855a8f7f0f0b800272ce.tar.gz bcm5719-llvm-313f590aee01f2bf3a27855a8f7f0f0b800272ce.zip |
[ExecutionEngine] Add a getSymbolTable method to RuntimeDyld.
This can be used to extract the symbol table from a RuntimeDyld instance prior
to disposing of it.
This patch also updates RTDyldObjectLinkingLayer to use the new method, rather
than requesting symbols one at a time via getSymbol.
llvm-svn: 327476
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h | 15 |
2 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index 5c4b8c12f34..d4016b1316e 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -1198,6 +1198,12 @@ JITEvaluatedSymbol RuntimeDyld::getSymbol(StringRef Name) const { return Dyld->getSymbol(Name); } +std::map<StringRef, JITEvaluatedSymbol> RuntimeDyld::getSymbolTable() const { + if (!Dyld) + return {}; + return Dyld->getSymbolTable(); +} + void RuntimeDyld::resolveRelocations() { Dyld->resolveRelocations(); } void RuntimeDyld::reassignSectionAddress(unsigned SectionID, uint64_t Addr) { diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h index e940004bb2e..766a9b21cb1 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h @@ -519,6 +519,21 @@ public: return JITEvaluatedSymbol(TargetAddr, SymEntry.getFlags()); } + std::map<StringRef, JITEvaluatedSymbol> getSymbolTable() const { + std::map<StringRef, JITEvaluatedSymbol> Result; + + for (auto &KV : GlobalSymbolTable) { + auto SectionID = KV.second.getSectionID(); + uint64_t SectionAddr = 0; + if (SectionID != AbsoluteSymbolSection) + SectionAddr = getSectionLoadAddress(SectionID); + Result[KV.first()] = + JITEvaluatedSymbol(SectionAddr + KV.second.getOffset(), KV.second.getFlags()); + } + + return Result; + } + void resolveRelocations(); void reassignSectionAddress(unsigned SectionID, uint64_t Addr); |