diff --git a/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h b/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h --- a/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h +++ b/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h @@ -16,6 +16,7 @@ #include "mlir/Support/LLVM.h" #include "llvm/ExecutionEngine/ObjectCache.h" #include "llvm/ExecutionEngine/Orc/LLJIT.h" +#include "llvm/ExecutionEngine/SectionMemoryManager.h" #include "llvm/IR/LLVMContext.h" #include "llvm/Support/Error.h" @@ -68,6 +69,11 @@ /// open and link the shared libraries for symbol resolution. ArrayRef sharedLibPaths = {}; + /// Specifies an existing `sectionMemoryMapper` to be associated with the + /// compiled code. If none is provided, a default memory mapper that directly + /// calls into the operating system is used. + llvm::SectionMemoryManager::MemoryMapper *sectionMemoryMapper = nullptr; + /// If `enableObjectCache` is set, the JIT compiler will create one to store /// the object generated for the given module. bool enableObjectCache = true; diff --git a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp --- a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp @@ -24,7 +24,6 @@ #include "llvm/ExecutionEngine/Orc/IRTransformLayer.h" #include "llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h" #include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h" -#include "llvm/ExecutionEngine/SectionMemoryManager.h" #include "llvm/IR/IRBuilder.h" #include "llvm/MC/SubtargetFeature.h" #include "llvm/MC/TargetRegistry.h" @@ -252,7 +251,9 @@ auto objectLinkingLayerCreator = [&](ExecutionSession &session, const Triple &tt) { auto objectLayer = std::make_unique( - session, []() { return std::make_unique(); }); + session, [sectionMemoryMapper = options.sectionMemoryMapper]() { + return std::make_unique(sectionMemoryMapper); + }); // Register JIT event listeners if they are enabled. if (engine->gdbListener)