diff options
-rw-r--r-- | llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h | 4 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/LLJIT.cpp | 10 |
2 files changed, 10 insertions, 4 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h b/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h index 0aac1916423..b1e47d77557 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h @@ -184,8 +184,8 @@ private: class LLJITBuilderState { public: - using ObjectLinkingLayerCreator = - std::function<std::unique_ptr<ObjectLayer>(ExecutionSession &)>; + using ObjectLinkingLayerCreator = std::function<std::unique_ptr<ObjectLayer>( + ExecutionSession &, const Triple &TT)>; using CompileFunctionCreator = std::function<Expected<IRCompileLayer::CompileFunction>( diff --git a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp index 94323632391..14b3b6ac7f6 100644 --- a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp +++ b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp @@ -64,12 +64,18 @@ LLJIT::createObjectLinkingLayer(LLJITBuilderState &S, ExecutionSession &ES) { // If the config state provided an ObjectLinkingLayer factory then use it. if (S.CreateObjectLinkingLayer) - return S.CreateObjectLinkingLayer(ES); + return S.CreateObjectLinkingLayer(ES, S.JTMB->getTargetTriple()); // Otherwise default to creating an RTDyldObjectLinkingLayer that constructs // a new SectionMemoryManager for each object. auto GetMemMgr = []() { return llvm::make_unique<SectionMemoryManager>(); }; - return llvm::make_unique<RTDyldObjectLinkingLayer>(ES, std::move(GetMemMgr)); + auto ObjLinkingLayer = + llvm::make_unique<RTDyldObjectLinkingLayer>(ES, std::move(GetMemMgr)); + + if (S.JTMB->getTargetTriple().isOSBinFormatCOFF()) + ObjLinkingLayer->setOverrideObjectFlagsWithResponsibilityFlags(true); + + return ObjLinkingLayer; } Expected<IRCompileLayer::CompileFunction> |