PostgreSQL Source Code git master
llvmjit_wrap.cpp
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * llvmjit_wrap.cpp
4 * Parts of the LLVM interface not (yet) exposed to C.
5 *
6 * Copyright (c) 2016-2025, PostgreSQL Global Development Group
7 *
8 * IDENTIFICATION
9 * src/backend/lib/llvm/llvmjit_wrap.cpp
10 *
11 *-------------------------------------------------------------------------
12 */
13
14extern "C"
15{
16#include "postgres.h"
17}
18
19#include <llvm-c/Core.h>
20#include <llvm/IR/Function.h>
21
22#include "jit/llvmjit.h"
24
25#ifdef USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER
26#include <llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h>
27#include <llvm/ExecutionEngine/SectionMemoryManager.h>
29#include <llvm/Support/CBindingWrapping.h>
30#endif
31
32
33/*
34 * C-API extensions.
35 */
36
37LLVMTypeRef
39{
40 return llvm::wrap(llvm::unwrap<llvm::Function>(r)->getReturnType());
41}
42
43LLVMTypeRef
44LLVMGetFunctionType(LLVMValueRef r)
45{
46 return llvm::wrap(llvm::unwrap<llvm::Function>(r)->getFunctionType());
47}
48
49#ifdef USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER
50DEFINE_SIMPLE_CONVERSION_FUNCTIONS(llvm::orc::ExecutionSession, LLVMOrcExecutionSessionRef)
51DEFINE_SIMPLE_CONVERSION_FUNCTIONS(llvm::orc::ObjectLayer, LLVMOrcObjectLayerRef);
52
53LLVMOrcObjectLayerRef
54LLVMOrcCreateRTDyldObjectLinkingLayerWithSafeSectionMemoryManager(LLVMOrcExecutionSessionRef ES)
55{
56 return wrap(new llvm::orc::RTDyldObjectLinkingLayer(
57 *unwrap(ES), [] { return std::make_unique<llvm::backport::SectionMemoryManager>(nullptr, true); }));
58}
59#endif
LLVMTypeRef LLVMGetFunctionReturnType(LLVMValueRef r)
LLVMTypeRef LLVMGetFunctionType(LLVMValueRef r)