Skip to content

Commit c04e886

Browse files
committed
Update changes with the llvms PR
1 parent e57a9f8 commit c04e886

File tree

9 files changed

+281
-206
lines changed

9 files changed

+281
-206
lines changed

interpreter/cling/include/cling/Interpreter/DynamicLibraryManager.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#ifndef CLING_DYNAMIC_LIBRARY_MANAGER_H
1111
#define CLING_DYNAMIC_LIBRARY_MANAGER_H
1212

13-
#include "llvm/ExecutionEngine/Orc/Shared/DynamicLoader.h"
13+
#include "llvm/ExecutionEngine/Orc/Shared/LibraryResolver.h"
1414
#include "llvm/ADT/DenseMap.h"
1515
#include "llvm/ADT/ArrayRef.h"
1616
#include "llvm/ADT/StringRef.h"
@@ -131,9 +131,9 @@ namespace cling {
131131
return;
132132
auto pos = prepend ? m_SearchPaths.begin() : m_SearchPaths.end();
133133
m_SearchPaths.insert(pos, SearchPathInfo{dir.str(), isUser});
134-
m_DyldController->addScanPath(dir.str(),
135-
isUser ? llvm::orc::PathType::User
136-
: llvm::orc::PathType::System);
134+
// m_DyldController->addScanPath(dir.str(),
135+
// isUser ? llvm::orc::PathType::User
136+
// : llvm::orc::PathType::System);
137137
}
138138
}
139139

interpreter/cling/lib/Interpreter/DynamicLibraryManager.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ namespace cling {
4444
#endif
4545
};
4646

47-
m_DyldController = llvm::orc::LibraryResolutionDriver::create(
48-
llvm::orc::LibraryResolver::Setup::create({}));
47+
// m_DyldController = llvm::orc::LibraryResolutionDriver::create(
48+
// llvm::orc::LibraryResolver::Setup::create({}));
4949

5050
// Behaviour is to not add paths that don't exist...In an interpreted env
5151
// does this make sense? Path could pop into existance at any time.
@@ -396,7 +396,8 @@ namespace cling {
396396
if (!insRes.second)
397397
return kLoadLibAlreadyLoaded;
398398
m_LoadedLibraries.insert(canonicalLoadedLib);
399-
m_DyldController->markLibraryLoaded(canonicalLoadedLib);
399+
if (m_DyldController)
400+
m_DyldController->markLibraryLoaded(canonicalLoadedLib);
400401
return kLoadLibSuccess;
401402
}
402403

@@ -428,7 +429,8 @@ namespace cling {
428429

429430
m_DyLibs.erase(dyLibHandle);
430431
m_LoadedLibraries.erase(canonicalLoadedLib);
431-
m_DyldController->markLibraryUnLoaded(canonicalLoadedLib);
432+
if (m_DyldController)
433+
m_DyldController->markLibraryUnLoaded(canonicalLoadedLib);
432434
}
433435

434436
bool DynamicLibraryManager::isLibraryLoaded(llvm::StringRef fullPath) const {

interpreter/cling/lib/Interpreter/DynamicLibraryManagerSymbol.cpp

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,28 +1335,43 @@ namespace cling {
13351335
}
13361336

13371337
DynamicLibraryManager::~DynamicLibraryManager() {
1338-
static_assert(sizeof(Dyld) > 0, "Incomplete type");
1339-
delete m_Dyld;
1338+
// static_assert(sizeof(Dyld) > 0, "Incomplete type");
1339+
// delete m_Dyld;
13401340
}
13411341

13421342
void DynamicLibraryManager::initializeDyld(
13431343
std::function<bool(llvm::StringRef)> shouldPermanentlyIgnore) {
13441344
//assert(!m_Dyld && "Already initialized!");
1345-
if (m_Dyld)
1346-
delete m_Dyld;
1345+
if (m_DyldController)
1346+
m_DyldController.reset();
1347+
1348+
llvm::orc::LibraryResolver::Setup S =
1349+
llvm::orc::LibraryResolver::Setup::create({});
1350+
S.shouldScan = shouldPermanentlyIgnore;
1351+
m_DyldController = llvm::orc::LibraryResolutionDriver::create(S);
1352+
1353+
for (const auto& info : m_SearchPaths) {
1354+
m_DyldController->addScanPath(info.Path,
1355+
info.IsUser ? llvm::orc::PathType::User
1356+
: llvm::orc::PathType::System);
1357+
}
1358+
1359+
for (const auto& lib : m_LoadedLibraries) {
1360+
m_DyldController->markLibraryLoaded(lib.first());
1361+
}
13471362

1348-
std::string exeP = GetExecutablePath();
1349-
auto ObjF =
1350-
cantFail(llvm::object::ObjectFile::createObjectFile(exeP));
1363+
// std::string exeP = GetExecutablePath();
1364+
// auto ObjF =
1365+
// cantFail(llvm::object::ObjectFile::createObjectFile(exeP));
13511366

1352-
m_Dyld = new Dyld(*this, shouldPermanentlyIgnore,
1353-
ObjF.getBinary()->getFileFormatName());
1367+
// m_Dyld = new Dyld(*this, shouldPermanentlyIgnore,
1368+
// ObjF.getBinary()->getFileFormatName());
13541369
}
13551370

13561371
std::string
13571372
DynamicLibraryManager::searchLibrariesForSymbol(StringRef mangledName,
13581373
bool searchSystem/* = true*/) const {
1359-
assert(m_Dyld && "Must call initialize dyld before!");
1374+
assert(m_DyldController && "Must call initialize dyld before!");
13601375
std::string res = "";
13611376
std::vector<std::string> sym;
13621377
sym.push_back(mangledName.str());
@@ -1368,13 +1383,17 @@ namespace cling {
13681383
llvm::orc::PathType::System},
13691384
{llvm::orc::LibraryManager::State::Unloaded,
13701385
llvm::orc::PathType::System}}};
1386+
llvm::orc::SearchConfig config;
1387+
config.policy = policy;
1388+
config.options.FilterFlags =
1389+
llvm::orc::SymbolEnumeratorOptions::IgnoreUndefined;
13711390
m_DyldController->resolveSymbols(
13721391
sym,
13731392
[&](llvm::orc::LibraryResolver::SymbolQuery& Q) {
13741393
if (auto s = Q.getResolvedLib(mangledName))
13751394
res = *s;
13761395
},
1377-
policy);
1396+
config);
13781397
return res;
13791398
// return m_Dyld->searchLibrariesForSymbol(mangledName, searchSystem);
13801399
}

0 commit comments

Comments
 (0)