[llvm] r343430 - [ORC] Add convenience methods for creating DynamicLibraryFallbackGenerators for
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 30 17:59:28 PDT 2018
Author: lhames
Date: Sun Sep 30 17:59:28 2018
New Revision: 343430
URL: http://llvm.org/viewvc/llvm-project?rev=343430&view=rev
Log:
[ORC] Add convenience methods for creating DynamicLibraryFallbackGenerators for
libraries on disk, and for the current process.
Avoids more boilerplate during JIT construction.
Modified:
llvm/trunk/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
llvm/trunk/lib/ExecutionEngine/Orc/ExecutionUtils.cpp
llvm/trunk/tools/lli/lli.cpp
Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h?rev=343430&r1=343429&r2=343430&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h Sun Sep 30 17:59:28 2018
@@ -215,8 +215,32 @@ public:
class DynamicLibraryFallbackGenerator {
public:
using SymbolPredicate = std::function<bool(SymbolStringPtr)>;
+
+ static bool AllowAll(SymbolStringPtr Name) { return true; }
+
+ /// Create a DynamicLibraryFallbackGenerator that searches for symbols in the
+ /// given sys::DynamicLibrary.
+ /// Only symbols that match the 'Allow' predicate will be searched for.
DynamicLibraryFallbackGenerator(sys::DynamicLibrary Dylib,
- const DataLayout &DL, SymbolPredicate Allow);
+ const DataLayout &DL,
+ SymbolPredicate Allow = AllowAll);
+
+ /// Permanently loads the library at the given path and, on success, returns
+ /// a DynamicLibraryFallbackGenerator that will search it for symbol
+ /// definitions matching the Allow predicate.
+ /// On failure returns the reason the library failed to load.
+ static Expected<DynamicLibraryFallbackGenerator>
+ Load(const char *FileName, const DataLayout &DL,
+ SymbolPredicate Allow = AllowAll);
+
+ /// Creates a DynamicLibraryFallbackGenerator that searches for symbols in
+ /// the current process.
+ static Expected<DynamicLibraryFallbackGenerator>
+ CreateForCurrentProcess(const DataLayout &DL,
+ SymbolPredicate Allow = AllowAll) {
+ return Load(nullptr, DL, std::move(Allow));
+ }
+
SymbolNameSet operator()(JITDylib &JD, const SymbolNameSet &Names);
private:
Modified: llvm/trunk/lib/ExecutionEngine/Orc/ExecutionUtils.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/ExecutionUtils.cpp?rev=343430&r1=343429&r2=343430&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Orc/ExecutionUtils.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/Orc/ExecutionUtils.cpp Sun Sep 30 17:59:28 2018
@@ -174,6 +174,15 @@ DynamicLibraryFallbackGenerator::Dynamic
: Dylib(std::move(Dylib)), Allow(std::move(Allow)),
GlobalPrefix(DL.getGlobalPrefix()) {}
+Expected<DynamicLibraryFallbackGenerator> DynamicLibraryFallbackGenerator::Load(
+ const char *FileName, const DataLayout &DL, SymbolPredicate Allow) {
+ std::string ErrMsg;
+ auto Lib = sys::DynamicLibrary::getPermanentLibrary(FileName, &ErrMsg);
+ if (!Lib.isValid())
+ return make_error<StringError>(std::move(ErrMsg), inconvertibleErrorCode());
+ return DynamicLibraryFallbackGenerator(std::move(Lib), DL, std::move(Allow));
+}
+
SymbolNameSet DynamicLibraryFallbackGenerator::
operator()(JITDylib &JD, const SymbolNameSet &Names) {
orc::SymbolNameSet Added;
Modified: llvm/trunk/tools/lli/lli.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/lli.cpp?rev=343430&r1=343429&r2=343430&view=diff
==============================================================================
--- llvm/trunk/tools/lli/lli.cpp (original)
+++ llvm/trunk/tools/lli/lli.cpp Sun Sep 30 17:59:28 2018
@@ -752,15 +752,6 @@ static orc::IRTransformLayer2::Transform
int runOrcLazyJIT(const char *ProgName) {
// Start setting up the JIT environment.
- // First add lli's symbols into the JIT's search space.
- std::string ErrMsg;
- sys::DynamicLibrary LibLLI =
- sys::DynamicLibrary::getPermanentLibrary(nullptr, &ErrMsg);
- if (!LibLLI.isValid()) {
- errs() << "Error loading lli symbols: " << ErrMsg << ".\n";
- return 1;
- }
-
// Parse the main module.
orc::ThreadSafeContext TSCtx(llvm::make_unique<LLVMContext>());
SMDiagnostic Err;
@@ -802,9 +793,8 @@ int runOrcLazyJIT(const char *ProgName)
}
return Dump(std::move(TSM), R);
});
- J->getMainJITDylib().setFallbackDefinitionGenerator(
- orc::DynamicLibraryFallbackGenerator(
- std::move(LibLLI), DL, [](orc::SymbolStringPtr) { return true; }));
+ J->getMainJITDylib().setFallbackDefinitionGenerator(ExitOnErr(
+ orc::DynamicLibraryFallbackGenerator::CreateForCurrentProcess(DL)));
orc::MangleAndInterner Mangle(J->getExecutionSession(), DL);
orc::LocalCXXRuntimeOverrides2 CXXRuntimeOverrides;
More information about the llvm-commits
mailing list