summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
index 93287a3a4e7..24495b21d45 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
@@ -122,14 +122,10 @@ static std::error_code getOffset(const SymbolRef &Sym, SectionRef Sec,
return std::error_code();
}
-std::pair<unsigned, unsigned>
+RuntimeDyldImpl::ObjSectionToIDMap
RuntimeDyldImpl::loadObjectImpl(const object::ObjectFile &Obj) {
MutexGuard locked(lock);
- // Grab the first Section ID. We'll use this later to construct the underlying
- // range for the returned LoadedObjectInfo.
- unsigned SectionsAddedBeginIdx = Sections.size();
-
// Save information about our target
Arch = (Triple::ArchType)Obj.getArch();
IsTargetLittleEndian = Obj.isLittleEndian();
@@ -231,9 +227,10 @@ RuntimeDyldImpl::loadObjectImpl(const object::ObjectFile &Obj) {
// Give the subclasses a chance to tie-up any loose ends.
finalizeLoad(Obj, LocalSections);
- unsigned SectionsAddedEndIdx = Sections.size();
+// for (auto E : LocalSections)
+// llvm::dbgs() << "Added: " << E.first.getRawDataRefImpl() << " -> " << E.second << "\n";
- return std::make_pair(SectionsAddedBeginIdx, SectionsAddedEndIdx);
+ return LocalSections;
}
// A helper method for computeTotalAllocSize.
@@ -818,10 +815,19 @@ void RuntimeDyldImpl::resolveExternalSymbols() {
// RuntimeDyld class implementation
uint64_t RuntimeDyld::LoadedObjectInfo::getSectionLoadAddress(
- StringRef SectionName) const {
- for (unsigned I = BeginIdx; I != EndIdx; ++I)
- if (RTDyld.Sections[I].Name == SectionName)
- return RTDyld.Sections[I].LoadAddress;
+ const object::SectionRef &Sec) const {
+
+// llvm::dbgs() << "Searching for " << Sec.getRawDataRefImpl() << " in:\n";
+// for (auto E : ObjSecToIDMap)
+// llvm::dbgs() << "Added: " << E.first.getRawDataRefImpl() << " -> " << E.second << "\n";
+
+ auto I = ObjSecToIDMap.find(Sec);
+ if (I != ObjSecToIDMap.end()) {
+// llvm::dbgs() << "Found ID " << I->second << " for Sec: " << Sec.getRawDataRefImpl() << ", LoadAddress = " << RTDyld.Sections[I->second].LoadAddress << "\n";
+ return RTDyld.Sections[I->second].LoadAddress;
+ } else {
+// llvm::dbgs() << "Not found.\n";
+ }
return 0;
}
OpenPOWER on IntegriCloud