]> git.pld-linux.org Git - packages/postgresql.git/blame - llvm15.patch
uses docbook 4.5 since 13.0
[packages/postgresql.git] / llvm15.patch
CommitLineData
d8d2d607
JP
1From d033f8f8bea9c7b5c4ae43a95b569ceccdaddd7a Mon Sep 17 00:00:00 2001
2From: Thomas Munro <tmunro@postgresql.org>
3Date: Wed, 19 Oct 2022 22:32:14 +1300
4Subject: [PATCH] Track LLVM 15 changes.
5
6Per https://llvm.org/docs/OpaquePointers.html, support for non-opaque
7pointers still exists and we can request that on our context. We have
8until LLVM 16 to move to opaque pointers, a much larger change.
9
10Back-patch to 11, where LLVM support arrived.
11
12Author: Thomas Munro <thomas.munro@gmail.com>
13Author: Andres Freund <andres@anarazel.de>
14Discussion: https://postgr.es/m/CAMHz58Sf_xncdyqsekoVsNeKcruKootLtVH6cYXVhhUR1oKPCg%40mail.gmail.com
15---
16 configure | 89 +++++++++++++++++++++++++
17 configure.ac | 3 +
18 src/backend/jit/llvm/llvmjit.c | 18 +++++
19 src/backend/jit/llvm/llvmjit_inline.cpp | 1 +
20 4 files changed, 111 insertions(+)
21
22diff --git a/configure b/configure
23index 57ec071cf9..a15c2253d5 100755
24--- a/configure
25+++ b/configure
26@@ -7259,6 +7259,95 @@ if test x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
27 fi
28
29
30+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5
31+$as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, for BITCODE_CFLAGS... " >&6; }
32+if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then :
33+ $as_echo_n "(cached) " >&6
34+else
35+ pgac_save_CFLAGS=$CFLAGS
36+pgac_save_CC=$CC
37+CC=${CLANG}
38+CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
39+ac_save_c_werror_flag=$ac_c_werror_flag
40+ac_c_werror_flag=yes
41+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
42+/* end confdefs.h. */
43+
44+int
45+main ()
46+{
47+
48+ ;
49+ return 0;
50+}
51+_ACEOF
52+if ac_fn_c_try_compile "$LINENO"; then :
53+ pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes
54+else
55+ pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no
56+fi
57+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
58+ac_c_werror_flag=$ac_save_c_werror_flag
59+CFLAGS="$pgac_save_CFLAGS"
60+CC="$pgac_save_CC"
61+fi
62+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5
63+$as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; }
64+if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; then
65+ BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
66+fi
67+
68+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5
69+$as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS... " >&6; }
70+if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then :
71+ $as_echo_n "(cached) " >&6
72+else
73+ pgac_save_CXXFLAGS=$CXXFLAGS
74+pgac_save_CXX=$CXX
75+CXX=${CLANGXX}
76+CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
77+ac_save_cxx_werror_flag=$ac_cxx_werror_flag
78+ac_cxx_werror_flag=yes
79+ac_ext=cpp
80+ac_cpp='$CXXCPP $CPPFLAGS'
81+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
82+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
83+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
84+
85+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
86+/* end confdefs.h. */
87+
88+int
89+main ()
90+{
91+
92+ ;
93+ return 0;
94+}
95+_ACEOF
96+if ac_fn_cxx_try_compile "$LINENO"; then :
97+ pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes
98+else
99+ pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no
100+fi
101+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
102+ac_ext=c
103+ac_cpp='$CPP $CPPFLAGS'
104+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
105+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
106+ac_compiler_gnu=$ac_cv_c_compiler_gnu
107+
108+ac_cxx_werror_flag=$ac_save_cxx_werror_flag
109+CXXFLAGS="$pgac_save_CXXFLAGS"
110+CXX="$pgac_save_CXX"
111+fi
112+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5
113+$as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; }
114+if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = x"yes"; then
115+ BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
116+fi
117+
118+
119 NOT_THE_CFLAGS=""
120 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
121 $as_echo_n "checking whether ${CLANG} supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; }
122diff --git a/configure.ac b/configure.ac
123index 227bc896b6..6d13ae5888 100644
124--- a/configure.ac
125+++ b/configure.ac
126@@ -600,6 +600,9 @@ if test "$with_llvm" = yes ; then
127 PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard])
128 PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard])
129
130+ PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang -no-opaque-pointers])
131+ PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang -no-opaque-pointers])
132+
133 NOT_THE_CFLAGS=""
134 PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, [-Wunused-command-line-argument])
135 if test -n "$NOT_THE_CFLAGS"; then
136diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c
137index fb29449573..199fff4f77 100644
138--- a/src/backend/jit/llvm/llvmjit.c
139+++ b/src/backend/jit/llvm/llvmjit.c
140@@ -798,6 +798,16 @@ llvm_session_initialize(void)
141 LLVMInitializeNativeAsmPrinter();
142 LLVMInitializeNativeAsmParser();
143
144+ /*
145+ * When targeting an LLVM version with opaque pointers enabled by
146+ * default, turn them off for the context we build our code in. We don't
147+ * need to do so for other contexts (e.g. llvm_ts_context). Once the IR is
148+ * generated, it carries the necessary information.
149+ */
150+#if LLVM_VERSION_MAJOR > 14
151+ LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false);
152+#endif
153+
154 /*
155 * Synchronize types early, as that also includes inferring the target
156 * triple.
157@@ -1112,7 +1122,11 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
158 LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags,
159 LLVMOrcCLookupSet LookupSet, size_t LookupSetSize)
160 {
161+#if LLVM_VERSION_MAJOR > 14
162+ LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) * LookupSetSize);
163+#else
164 LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize);
165+#endif
166 LLVMErrorRef error;
167 LLVMOrcMaterializationUnitRef mu;
168
169@@ -1230,7 +1244,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm)
170 * Symbol resolution support for "special" functions, e.g. a call into an
171 * SQL callable function.
172 */
173+#if LLVM_VERSION_MAJOR > 14
174+ ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL);
175+#else
176 ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL);
177+#endif
178 LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen);
179
180 return lljit;
181diff --git a/src/backend/jit/llvm/llvmjit_inline.cpp b/src/backend/jit/llvm/llvmjit_inline.cpp
182index 9bb4b672a7..774d9e8b66 100644
183--- a/src/backend/jit/llvm/llvmjit_inline.cpp
184+++ b/src/backend/jit/llvm/llvmjit_inline.cpp
185@@ -62,6 +62,7 @@ extern "C"
186 #include <llvm/IR/ModuleSummaryIndex.h>
187 #include <llvm/Linker/IRMover.h>
188 #include <llvm/Support/ManagedStatic.h>
189+#include <llvm/Support/MemoryBuffer.h>
190
191
192 /*
193--
1942.30.2
195
This page took 0.124555 seconds and 4 git commands to generate.