[packages/postgresql] upstream fixes for llvm 15

atler atler at pld-linux.org
Wed Oct 19 20:16:42 CEST 2022


commit d8d2d60731b8c98c670080d55ebec91c6d466ce1
Author: Jan Palus <atler at pld-linux.org>
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 <tmunro at postgresql.org>
+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 <thomas.munro at gmail.com>
+Author: Andres Freund <andres at anarazel.de>
+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



More information about the pld-cvs-commit mailing list