diff --git a/llvm/include/llvm-c/OrcEE.h b/llvm/include/llvm-c/OrcEE.h index fcec3a47186ac..fd044ea659456 100644 --- a/llvm/include/llvm-c/OrcEE.h +++ b/llvm/include/llvm-c/OrcEE.h @@ -43,6 +43,14 @@ typedef void (*LLVMMemoryManagerNotifyTerminatingCallback)(void *CtxCtx); * @{ */ +/** + * Create a ObjectLinkingLayer instance using the standard JITLink + * InProcessMemoryManager for memory management. + */ +LLVM_C_ABI LLVMErrorRef +LLVMOrcCreateObjectLinkingLayerWithInProcessMemoryManager( + LLVMOrcObjectLayerRef *Result, LLVMOrcExecutionSessionRef ES); + /** * Create a RTDyldObjectLinkingLayer instance using the standard * SectionMemoryManager for memory management. diff --git a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp index cdde733b3a817..b1bc3c14d9c6d 100644 --- a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp +++ b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp @@ -11,9 +11,11 @@ #include "llvm-c/OrcEE.h" #include "llvm-c/TargetMachine.h" +#include "llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h" #include "llvm/ExecutionEngine/Orc/AbsoluteSymbols.h" #include "llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h" #include "llvm/ExecutionEngine/Orc/LLJIT.h" +#include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h" #include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h" #include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h" #include "llvm/ExecutionEngine/SectionMemoryManager.h" @@ -1017,6 +1019,17 @@ LLVMOrcLLJITGetObjTransformLayer(LLVMOrcLLJITRef J) { return wrap(&unwrap(J)->getObjTransformLayer()); } +LLVMErrorRef LLVMOrcCreateObjectLinkingLayerWithInProcessMemoryManager( + LLVMOrcObjectLayerRef *Result, LLVMOrcExecutionSessionRef ES) { + assert(Result && "Result must not be null"); + assert(ES && "ES must not be null"); + auto MM = jitlink::InProcessMemoryManager::Create(); + if (!MM) + return wrap(MM.takeError()); + *Result = wrap(new ObjectLinkingLayer(*unwrap(ES), std::move(*MM))); + return LLVMErrorSuccess; +} + LLVMOrcObjectLayerRef LLVMOrcCreateRTDyldObjectLinkingLayerWithSectionMemoryManager( LLVMOrcExecutionSessionRef ES) {