diff --git a/0001-jit-Workaround-potential-datalayout-mismatch-on-s390.patch b/0001-jit-Workaround-potential-datalayout-mismatch-on-s390.patch new file mode 100644 index 0000000..911374c --- /dev/null +++ b/0001-jit-Workaround-potential-datalayout-mismatch-on-s390.patch @@ -0,0 +1,110 @@ +From 0edaa982336823d4d7af8f10b91579fe0099ef3d Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Tue, 20 Apr 2021 20:14:21 -0700 +Subject: [PATCH] jit: Workaround potential datalayout mismatch on s390x + +LLVM's s390x target uses a different datalayout for z13 and newer processors. +If llvmjit_types.bc is compiled to target a processor older than z13, and +then the JIT runs on a z13 or newer processor, then there will be a mismatch +in datalayouts between llvmjit_types.bc and the JIT engine. This mismatch +causes the JIT to fail at runtime. +--- + src/backend/jit/llvm/llvmjit.c | 46 ++++++++++++++++++++++++++++++++-- + 1 file changed, 44 insertions(+), 2 deletions(-) + +--- src/backend/jit/llvm/llvmjit.c.orig ++++ src/backend/jit/llvm/llvmjit.c +@@ -101,6 +101,7 @@ LLVMValueRef FuncExecEvalSysVar; + LLVMValueRef FuncExecAggTransReparent; + LLVMValueRef FuncExecAggInitGroup; + ++LLVMModuleRef mod = NULL; + + static bool llvm_session_initialized = false; + static size_t llvm_generation = 0; +@@ -742,6 +743,35 @@ llvm_compile_module(LLVMJitContext *cont + } + + /* ++ * For the systemz target, LLVM uses a different datalayout for z13 and newer ++ * CPUs than it does for older CPUs. This can cause a mismatch in datalayouts ++ * in the case where the llvm_types_module (mod) is compiled with a pre-z13 CPU ++ * and the JIT is running on z13 or newer. ++ * See computeDataLayout() function in ++ * llvm/lib/Target/SystemZ/SystemZTargetMachine.cpp for information on the ++ * datalayout differences. ++ */ ++static bool ++needs_systemz_workaround(void) ++{ ++ bool ret = false; ++ LLVMContextRef llvm_context; ++ LLVMTypeRef vec_type; ++ LLVMTargetDataRef llvm_layoutref; ++ if (strncmp(LLVMGetTargetName(llvm_targetref), "systemz", strlen("systemz"))) ++ { ++ return false; ++ } ++ ++ llvm_context = LLVMGetModuleContext(mod); ++ vec_type = LLVMVectorType(LLVMIntTypeInContext(llvm_context, 32), 4); ++ llvm_layoutref = LLVMCreateTargetData(llvm_layout); ++ ret = (LLVMABIAlignmentOfType(llvm_layoutref, vec_type) == 16); ++ LLVMDisposeTargetData(llvm_layoutref); ++ return ret; ++} ++ ++/* + * Per session initialization. + */ + static void +@@ -750,6 +780,7 @@ llvm_session_initialize(void) + MemoryContext oldcontext; + char *error = NULL; + char *cpu = NULL; ++ char *host_features = NULL; + char *features = NULL; + LLVMTargetMachineRef opt0_tm; + LLVMTargetMachineRef opt3_tm; +@@ -781,10 +812,17 @@ llvm_session_initialize(void) + * features not all CPUs have (weird, huh). + */ + cpu = LLVMGetHostCPUName(); +- features = LLVMGetHostCPUFeatures(); ++ features = host_features = LLVMGetHostCPUFeatures(); + elog(DEBUG2, "LLVMJIT detected CPU \"%s\", with features \"%s\"", + cpu, features); + ++ if (needs_systemz_workaround()) ++ { ++ const char *no_vector =",-vector"; ++ features = malloc(sizeof(char) * (strlen(host_features) + strlen(no_vector) + 1)); ++ sprintf(features, "%s%s", host_features, no_vector); ++ } ++ + opt0_tm = + LLVMCreateTargetMachine(llvm_targetref, llvm_triple, cpu, features, + LLVMCodeGenLevelNone, +@@ -798,8 +836,13 @@ llvm_session_initialize(void) + + LLVMDisposeMessage(cpu); + cpu = NULL; +- LLVMDisposeMessage(features); ++ if (features != host_features) ++ { ++ free(features); ++ } + features = NULL; ++ LLVMDisposeMessage(host_features); ++ host_features = NULL; + + /* force symbols in main binary to be loaded */ + LLVMLoadLibraryPermanently(NULL); +@@ -952,7 +995,6 @@ llvm_create_types(void) + char path[MAXPGPATH]; + LLVMMemoryBufferRef buf; + char *msg; +- LLVMModuleRef mod = NULL; + + snprintf(path, MAXPGPATH, "%s/%s", pkglib_path, "llvmjit_types.bc"); + diff --git a/postgresql-12.7.tar.bz2 b/postgresql-12.7.tar.bz2 deleted file mode 100644 index d675d61..0000000 --- a/postgresql-12.7.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8490741f47c88edc8b6624af009ce19fda4dc9b31c4469ce2551d84075d5d995 -size 20819005 diff --git a/postgresql-12.7.tar.bz2.sha256 b/postgresql-12.7.tar.bz2.sha256 deleted file mode 100644 index 229ce01..0000000 --- a/postgresql-12.7.tar.bz2.sha256 +++ /dev/null @@ -1 +0,0 @@ -8490741f47c88edc8b6624af009ce19fda4dc9b31c4469ce2551d84075d5d995 postgresql-12.7.tar.bz2 diff --git a/postgresql-12.8.tar.bz2 b/postgresql-12.8.tar.bz2 new file mode 100644 index 0000000..734b4a4 --- /dev/null +++ b/postgresql-12.8.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e26401e090c34ccb15ffb33a111f340833833535a7b7c5cd11cd88ab57d9c62a +size 20849478 diff --git a/postgresql-12.8.tar.bz2.sha256 b/postgresql-12.8.tar.bz2.sha256 new file mode 100644 index 0000000..e1a3c8f --- /dev/null +++ b/postgresql-12.8.tar.bz2.sha256 @@ -0,0 +1 @@ +e26401e090c34ccb15ffb33a111f340833833535a7b7c5cd11cd88ab57d9c62a postgresql-12.8.tar.bz2 diff --git a/postgresql-llvm-optional.patch b/postgresql-llvm-optional.patch new file mode 100644 index 0000000..87a8d9f --- /dev/null +++ b/postgresql-llvm-optional.patch @@ -0,0 +1,16 @@ +--- src/Makefile.global.in.orig ++++ src/Makefile.global.in +@@ -192,7 +192,12 @@ with_krb_srvnam = @with_krb_srvnam@ + with_ldap = @with_ldap@ + with_libxml = @with_libxml@ + with_libxslt = @with_libxslt@ +-with_llvm = @with_llvm@ ++# Only build for LLVM, if the core supports it and the llvm and clang packages are installed. ++ifeq (@with_llvm@ $(wildcard /usr/bin/clang /usr/bin/llvm-lto),yes /usr/bin/clang /usr/bin/llvm-lto) ++with_llvm = yes ++else ++with_llvm = no ++endif + with_system_tzdata = @with_system_tzdata@ + with_uuid = @with_uuid@ + with_zlib = @with_zlib@ diff --git a/postgresql12.changes b/postgresql12.changes index 89ec4b9..c2b89f8 100644 --- a/postgresql12.changes +++ b/postgresql12.changes @@ -1,3 +1,29 @@ +------------------------------------------------------------------- +Tue Aug 31 11:14:53 UTC 2021 - Reinhard Max + +- bsc#1185952: fix build with llvm12 on s390x. + 0001-jit-Workaround-potential-datalayout-mismatch-on-s390.patch +- bsc#1179945: Re-enable icu for PostgreSQL 10. + +------------------------------------------------------------------- +Tue Aug 24 13:01:54 UTC 2021 - Marcus Rueckert + +- Upgrade to version 12.8: + * https://www.postgresql.org/docs/12/release-12-8.html + * CVE-2021-3677 (boo#1189748) + The planner could create an incorrect plan in cases where two + ProjectionPaths were stacked on top of each other. The only + known way to trigger that situation involves parallel sort + operations, but there may be other instances. The result would + be crashes or incorrect query results. Disclosure of server + memory contents is also possible. + +------------------------------------------------------------------- +Fri Jul 2 07:47:15 UTC 2021 - Reinhard Max + +- bsc#1187751: Make the dependency of postgresqlXX-server-devel on + llvm and clang optional (postgresql-llvm-optional.patch). + ------------------------------------------------------------------- Wed May 19 15:24:24 UTC 2021 - Reinhard Max diff --git a/postgresql12.spec b/postgresql12.spec index f15af1c..56ca7af 100644 --- a/postgresql12.spec +++ b/postgresql12.spec @@ -16,7 +16,7 @@ # -%define pgversion 12.7 +%define pgversion 12.8 %define pgmajor 12 %define pgsuffix %pgmajor %define buildlibs 0 @@ -72,11 +72,7 @@ BuildRequires: tcl-devel BuildRequires: timezone BuildRequires: zlib-devel %bcond_without selinux -%if %pgmajor > 10 || 0%{?suse_version} <= 1500 %bcond_without icu -%else -%bcond_with icu -%endif %if !%buildlibs BuildRequires: %libecpg BuildRequires: %libpq @@ -88,6 +84,7 @@ BuildRequires: %libpq %bcond_with systemd %bcond_with systemd_notify %endif + %if 0%{?suse_version} >= 1500 && %pgsuffix >= 11 && %pgsuffix < 90 %bcond_without llvm %else @@ -115,15 +112,10 @@ BuildRequires: libicu-devel BuildRequires: libselinux-devel %endif %if %{with llvm} -BuildRequires: gcc-c++ -%ifarch s390x -BuildRequires: clang11 -BuildRequires: llvm11-devel -%else BuildRequires: clang +BuildRequires: gcc-c++ BuildRequires: llvm-devel %endif -%endif BuildRequires: libxslt-devel BuildRequires: openldap2-devel BuildRequires: openssl-devel @@ -153,6 +145,10 @@ Patch4: postgresql-plperl-keep-rpath.patch Patch6: postgresql-testsuite-int8.sql.patch Patch8: postgresql-testsuite-keep-results-file.patch Patch9: postgresql-var-run-socket.patch +%if %{with llvm} +Patch10: postgresql-llvm-optional.patch +Patch11: 0001-jit-Workaround-potential-datalayout-mismatch-on-s390.patch +%endif URL: https://www.postgresql.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Provides: postgresql = %version-%release @@ -227,9 +223,9 @@ Requires: this-is-only-for-build-envs Provides: %libecpg = %version-%release Provides: %libpq = %version-%release Provides: %pgname-devel = %version-%release -Conflicts: %pgname-devel Conflicts: %libecpg Conflicts: %libpq +Conflicts: %pgname-devel %else Requires: %libecpg >= %version Requires: %libpq >= %version @@ -255,8 +251,8 @@ Requires: %pgname-server = %version-%release Provides: postgresql-server-devel-exclusive = %pgmajor Conflicts: postgresql-server-devel-exclusive < %pgmajor %if %{with llvm} -Requires: clang -Requires: llvm +Recommends: clang +Recommends: llvm %endif Requires: libxslt-devel Requires: openssl-devel @@ -442,7 +438,7 @@ that supports an extended subset of the SQL standard, including transactions, foreign keys, subqueries, triggers, and user-defined types and functions. -This package contains the PL/Tcl procedural language for PostgreSQL. +This package contains the PL/Tcl procedural language for PostgreSQL. With thie module one can use Tcl to write stored procedures, functions, and triggers. @@ -459,6 +455,10 @@ touch -r configure tmp %patch6 %patch8 -p1 %patch9 +%if %{with llvm} +%patch10 +%patch11 +%endif touch -r tmp configure rm tmp find src/test/ -name '*.orig' -delete @@ -533,8 +533,7 @@ make check || { %endif %install -VLANG=${RPM_PACKAGE_VERSION%%.*} -VSO=${RPM_PACKAGE_VERSION%%%%.*} +VLANG=%pgmajor %if %mini make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/include install make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/interfaces install @@ -722,7 +721,7 @@ cat server-devel.files >> devel.files cat > libpq.files <> libpq.files %find_lang libpq5-$VLANG libpq.files @@ -922,6 +921,7 @@ fi %if %buildlibs && %mini %files %devel -f devel.files -f libpq.files -f libecpg.files %else + %files %devel -f devel.files %endif