commit d8d2d60731b8c98c670080d55ebec91c6d466ce1
Author: Jan Palus <[email protected]>
Date:   Wed Oct 19 20:16:19 2022 +0200

    upstream fixes for llvm 15

 llvm15.patch    | 195 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 postgresql.spec |   2 +
 2 files changed, 197 insertions(+)
---
diff --git a/postgresql.spec b/postgresql.spec
index eb36e21..cc6177a 100644
--- a/postgresql.spec
+++ b/postgresql.spec
@@ -55,6 +55,7 @@ Patch3:               ac.patch
 
 Patch5:                %{name}-heimdal.patch
 Patch6:                %{name}-link.patch
+Patch7:                llvm15.patch
 URL:           http://www.postgresql.org/
 BuildRequires: autoconf >= 2.69
 BuildRequires: automake
@@ -794,6 +795,7 @@ Różne moduły dołączone do PostgreSQL-a.
 
 %patch5 -p1
 %patch6 -p1
+%patch7 -p1
 
 # force rebuild of bison/flex files
 find src -name \*.l -o -name \*.y | xargs touch
diff --git a/llvm15.patch b/llvm15.patch
new file mode 100644
index 0000000..c0c2cd2
--- /dev/null
+++ b/llvm15.patch
@@ -0,0 +1,195 @@
+From d033f8f8bea9c7b5c4ae43a95b569ceccdaddd7a Mon Sep 17 00:00:00 2001
+From: Thomas Munro <[email protected]>
+Date: Wed, 19 Oct 2022 22:32:14 +1300
+Subject: [PATCH] Track LLVM 15 changes.
+
+Per https://llvm.org/docs/OpaquePointers.html, support for non-opaque
+pointers still exists and we can request that on our context.  We have
+until LLVM 16 to move to opaque pointers, a much larger change.
+
+Back-patch to 11, where LLVM support arrived.
+
+Author: Thomas Munro <[email protected]>
+Author: Andres Freund <[email protected]>
+Discussion: 
https://postgr.es/m/CAMHz58Sf_xncdyqsekoVsNeKcruKootLtVH6cYXVhhUR1oKPCg%40mail.gmail.com
+---
+ configure                               | 89 +++++++++++++++++++++++++
+ configure.ac                            |  3 +
+ src/backend/jit/llvm/llvmjit.c          | 18 +++++
+ src/backend/jit/llvm/llvmjit_inline.cpp |  1 +
+ 4 files changed, 111 insertions(+)
+
+diff --git a/configure b/configure
+index 57ec071cf9..a15c2253d5 100755
+--- a/configure
++++ b/configure
+@@ -7259,6 +7259,95 @@ if test 
x"$pgac_cv_prog_CLANGXX_cxxflags__fexcess_precision_standard" = x"yes";
+ fi
+ 
+ 
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports 
-Xclang -no-opaque-pointers, for BITCODE_CFLAGS" >&5
++$as_echo_n "checking whether ${CLANG} supports -Xclang -no-opaque-pointers, 
for BITCODE_CFLAGS... " >&6; }
++if ${pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  pgac_save_CFLAGS=$CFLAGS
++pgac_save_CC=$CC
++CC=${CLANG}
++CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
++ac_save_c_werror_flag=$ac_c_werror_flag
++ac_c_werror_flag=yes
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++  pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=yes
++else
++  pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers=no
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ac_c_werror_flag=$ac_save_c_werror_flag
++CFLAGS="$pgac_save_CFLAGS"
++CC="$pgac_save_CC"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 
$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&5
++$as_echo "$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" >&6; }
++if test x"$pgac_cv_prog_CLANG_cflags__Xclang__no_opaque_pointers" = x"yes"; 
then
++  BITCODE_CFLAGS="${BITCODE_CFLAGS} -Xclang -no-opaque-pointers"
++fi
++
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANGXX} 
supports -Xclang -no-opaque-pointers, for BITCODE_CXXFLAGS" >&5
++$as_echo_n "checking whether ${CLANGXX} supports -Xclang -no-opaque-pointers, 
for BITCODE_CXXFLAGS... " >&6; }
++if ${pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers+:} false; then 
:
++  $as_echo_n "(cached) " >&6
++else
++  pgac_save_CXXFLAGS=$CXXFLAGS
++pgac_save_CXX=$CXX
++CXX=${CLANGXX}
++CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
++ac_save_cxx_werror_flag=$ac_cxx_werror_flag
++ac_cxx_werror_flag=yes
++ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS 
conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_cxx_try_compile "$LINENO"; then :
++  pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=yes
++else
++  pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers=no
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS 
conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++ac_cxx_werror_flag=$ac_save_cxx_werror_flag
++CXXFLAGS="$pgac_save_CXXFLAGS"
++CXX="$pgac_save_CXX"
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 
$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&5
++$as_echo "$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" >&6; }
++if test x"$pgac_cv_prog_CLANGXX_cxxflags__Xclang__no_opaque_pointers" = 
x"yes"; then
++  BITCODE_CXXFLAGS="${BITCODE_CXXFLAGS} -Xclang -no-opaque-pointers"
++fi
++
++
+   NOT_THE_CFLAGS=""
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CLANG} supports 
-Wunused-command-line-argument, for NOT_THE_CFLAGS" >&5
+ $as_echo_n "checking whether ${CLANG} supports 
-Wunused-command-line-argument, for NOT_THE_CFLAGS... " >&6; }
+diff --git a/configure.ac b/configure.ac
+index 227bc896b6..6d13ae5888 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -600,6 +600,9 @@ if test "$with_llvm" = yes ; then
+   PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, 
[-fexcess-precision=standard])
+   PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, 
[-fexcess-precision=standard])
+ 
++  PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-Xclang 
-no-opaque-pointers])
++  PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-Xclang 
-no-opaque-pointers])
++
+   NOT_THE_CFLAGS=""
+   PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, NOT_THE_CFLAGS, 
[-Wunused-command-line-argument])
+   if test -n "$NOT_THE_CFLAGS"; then
+diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c
+index fb29449573..199fff4f77 100644
+--- a/src/backend/jit/llvm/llvmjit.c
++++ b/src/backend/jit/llvm/llvmjit.c
+@@ -798,6 +798,16 @@ llvm_session_initialize(void)
+       LLVMInitializeNativeAsmPrinter();
+       LLVMInitializeNativeAsmParser();
+ 
++      /*
++       * When targeting an LLVM version with opaque pointers enabled by
++       * default, turn them off for the context we build our code in.  We 
don't
++       * need to do so for other contexts (e.g. llvm_ts_context).  Once the 
IR is
++       * generated, it carries the necessary information.
++       */
++#if LLVM_VERSION_MAJOR > 14
++      LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false);
++#endif
++
+       /*
+        * Synchronize types early, as that also includes inferring the target
+        * triple.
+@@ -1112,7 +1122,11 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef 
GeneratorObj, void *Ctx,
+                                        LLVMOrcJITDylibRef JD, 
LLVMOrcJITDylibLookupFlags JDLookupFlags,
+                                        LLVMOrcCLookupSet LookupSet, size_t 
LookupSetSize)
+ {
++#if LLVM_VERSION_MAJOR > 14
++      LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) 
* LookupSetSize);
++#else
+       LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) 
* LookupSetSize);
++#endif
+       LLVMErrorRef error;
+       LLVMOrcMaterializationUnitRef mu;
+ 
+@@ -1230,7 +1244,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm)
+        * Symbol resolution support for "special" functions, e.g. a call into 
an
+        * SQL callable function.
+        */
++#if LLVM_VERSION_MAJOR > 14
++      ref_gen = 
LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL);
++#else
+       ref_gen = 
LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL);
++#endif
+       LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), 
ref_gen);
+ 
+       return lljit;
+diff --git a/src/backend/jit/llvm/llvmjit_inline.cpp 
b/src/backend/jit/llvm/llvmjit_inline.cpp
+index 9bb4b672a7..774d9e8b66 100644
+--- a/src/backend/jit/llvm/llvmjit_inline.cpp
++++ b/src/backend/jit/llvm/llvmjit_inline.cpp
+@@ -62,6 +62,7 @@ extern "C"
+ #include <llvm/IR/ModuleSummaryIndex.h>
+ #include <llvm/Linker/IRMover.h>
+ #include <llvm/Support/ManagedStatic.h>
++#include <llvm/Support/MemoryBuffer.h>
+ 
+ 
+ /*
+-- 
+2.30.2
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/postgresql.git/commitdiff/d8d2d60731b8c98c670080d55ebec91c6d466ce1

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to