diff options
Diffstat (limited to 'src/backend/jit/llvm/llvmjit_wrap.cpp')
-rw-r--r-- | src/backend/jit/llvm/llvmjit_wrap.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/backend/jit/llvm/llvmjit_wrap.cpp b/src/backend/jit/llvm/llvmjit_wrap.cpp index 7f7623dac64..9e8d63f0122 100644 --- a/src/backend/jit/llvm/llvmjit_wrap.cpp +++ b/src/backend/jit/llvm/llvmjit_wrap.cpp @@ -20,6 +20,14 @@ extern "C" #include <llvm/IR/Function.h> #include "jit/llvmjit.h" +#include "jit/llvmjit_backport.h" + +#ifdef USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER +#include <llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h> +#include <llvm/ExecutionEngine/SectionMemoryManager.h> +#include "jit/SectionMemoryManager.h" +#include <llvm/Support/CBindingWrapping.h> +#endif /* @@ -37,3 +45,15 @@ LLVMGetFunctionType(LLVMValueRef r) { return llvm::wrap(llvm::unwrap<llvm::Function>(r)->getFunctionType()); } + +#ifdef USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER +DEFINE_SIMPLE_CONVERSION_FUNCTIONS(llvm::orc::ExecutionSession, LLVMOrcExecutionSessionRef) +DEFINE_SIMPLE_CONVERSION_FUNCTIONS(llvm::orc::ObjectLayer, LLVMOrcObjectLayerRef); + +LLVMOrcObjectLayerRef +LLVMOrcCreateRTDyldObjectLinkingLayerWithSafeSectionMemoryManager(LLVMOrcExecutionSessionRef ES) +{ + return wrap(new llvm::orc::RTDyldObjectLinkingLayer( + *unwrap(ES), [] { return std::make_unique<llvm::backport::SectionMemoryManager>(nullptr, true); })); +} +#endif |