SHA256
1
0
forked from pool/postgresql13

Accepting request 917542 from server:database:postgresql

- 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.

- Upgrade to version 13.4:
  https://www.postgresql.org/docs/13/release-13-4.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.

- bsc#1187751: Make the dependency of postgresqlXX-server-devel on
  llvm and clang optional (postgresql-llvm-optional.patch).

OBS-URL: https://build.opensuse.org/request/show/917542
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/postgresql13?expand=0&rev=11
This commit is contained in:
Dominique Leuenberger 2021-09-13 14:24:18 +00:00 committed by Git OBS Bridge
commit c37f70a862
8 changed files with 158 additions and 22 deletions

View File

@ -0,0 +1,94 @@
From 0edaa982336823d4d7af8f10b91579fe0099ef3d Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar@redhat.com>
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
@@ -736,6 +736,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 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(llvm_types_module);
+ 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
@@ -744,6 +773,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;
@@ -775,10 +805,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,
@@ -792,8 +829,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);

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3cd9454fa8c7a6255b6743b767700925ead1b9ab0d7a0f9dcb1151010f8eb4a1
size 21119109

View File

@ -1 +0,0 @@
3cd9454fa8c7a6255b6743b767700925ead1b9ab0d7a0f9dcb1151010f8eb4a1 postgresql-13.3.tar.bz2

3
postgresql-13.4.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ea93e10390245f1ce461a54eb5f99a48d8cabd3a08ce4d652ec2169a357bc0cd
size 21157443

View File

@ -0,0 +1 @@
ea93e10390245f1ce461a54eb5f99a48d8cabd3a08ce4d652ec2169a357bc0cd postgresql-13.4.tar.bz2

View File

@ -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@

View File

@ -1,3 +1,29 @@
-------------------------------------------------------------------
Tue Aug 31 11:14:53 UTC 2021 - Reinhard Max <max@suse.com>
- 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 12:45:53 UTC 2021 - Marcus Rueckert <mrueckert@suse.de>
- Upgrade to version 13.4:
https://www.postgresql.org/docs/13/release-13-4.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.
-------------------------------------------------------------------
Mon Jun 28 10:00:46 UTC 2021 - Reinhard Max <max@suse.com>
- 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 <max@suse.com> Wed May 19 15:24:24 UTC 2021 - Reinhard Max <max@suse.com>

View File

@ -16,7 +16,7 @@
# #
%define pgversion 13.3 %define pgversion 13.4
%define pgmajor 13 %define pgmajor 13
%define pgsuffix %pgmajor %define pgsuffix %pgmajor
%define buildlibs 1 %define buildlibs 1
@ -72,11 +72,7 @@ BuildRequires: tcl-devel
BuildRequires: timezone BuildRequires: timezone
BuildRequires: zlib-devel BuildRequires: zlib-devel
%bcond_without selinux %bcond_without selinux
%if %pgmajor > 10 || 0%{?suse_version} <= 1500
%bcond_without icu %bcond_without icu
%else
%bcond_with icu
%endif
%if !%buildlibs %if !%buildlibs
BuildRequires: %libecpg BuildRequires: %libecpg
BuildRequires: %libpq BuildRequires: %libpq
@ -88,6 +84,7 @@ BuildRequires: %libpq
%bcond_with systemd %bcond_with systemd
%bcond_with systemd_notify %bcond_with systemd_notify
%endif %endif
%if 0%{?suse_version} >= 1500 && %pgsuffix >= 11 && %pgsuffix < 90 %if 0%{?suse_version} >= 1500 && %pgsuffix >= 11 && %pgsuffix < 90
%bcond_without llvm %bcond_without llvm
%else %else
@ -115,15 +112,10 @@ BuildRequires: libicu-devel
BuildRequires: libselinux-devel BuildRequires: libselinux-devel
%endif %endif
%if %{with llvm} %if %{with llvm}
BuildRequires: gcc-c++
%ifarch s390x
BuildRequires: clang11
BuildRequires: llvm11-devel
%else
BuildRequires: clang BuildRequires: clang
BuildRequires: gcc-c++
BuildRequires: llvm-devel BuildRequires: llvm-devel
%endif %endif
%endif
BuildRequires: libxslt-devel BuildRequires: libxslt-devel
BuildRequires: openldap2-devel BuildRequires: openldap2-devel
BuildRequires: openssl-devel BuildRequires: openssl-devel
@ -153,6 +145,10 @@ Patch4: postgresql-plperl-keep-rpath.patch
Patch6: postgresql-testsuite-int8.sql.patch Patch6: postgresql-testsuite-int8.sql.patch
Patch8: postgresql-testsuite-keep-results-file.patch Patch8: postgresql-testsuite-keep-results-file.patch
Patch9: postgresql-var-run-socket.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/ URL: https://www.postgresql.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
Provides: postgresql = %version-%release Provides: postgresql = %version-%release
@ -227,9 +223,9 @@ Requires: this-is-only-for-build-envs
Provides: %libecpg = %version-%release Provides: %libecpg = %version-%release
Provides: %libpq = %version-%release Provides: %libpq = %version-%release
Provides: %pgname-devel = %version-%release Provides: %pgname-devel = %version-%release
Conflicts: %pgname-devel
Conflicts: %libecpg Conflicts: %libecpg
Conflicts: %libpq Conflicts: %libpq
Conflicts: %pgname-devel
%else %else
Requires: %libecpg >= %version Requires: %libecpg >= %version
Requires: %libpq >= %version Requires: %libpq >= %version
@ -255,8 +251,8 @@ Requires: %pgname-server = %version-%release
Provides: postgresql-server-devel-exclusive = %pgmajor Provides: postgresql-server-devel-exclusive = %pgmajor
Conflicts: postgresql-server-devel-exclusive < %pgmajor Conflicts: postgresql-server-devel-exclusive < %pgmajor
%if %{with llvm} %if %{with llvm}
Requires: clang Recommends: clang
Requires: llvm Recommends: llvm
%endif %endif
Requires: libxslt-devel Requires: libxslt-devel
Requires: openssl-devel Requires: openssl-devel
@ -459,6 +455,10 @@ touch -r configure tmp
%patch6 %patch6
%patch8 -p1 %patch8 -p1
%patch9 %patch9
%if %{with llvm}
%patch10
%patch11
%endif
touch -r tmp configure touch -r tmp configure
rm tmp rm tmp
find src/test/ -name '*.orig' -delete find src/test/ -name '*.orig' -delete
@ -533,8 +533,7 @@ make check || {
%endif %endif
%install %install
VLANG=${RPM_PACKAGE_VERSION%%.*} VLANG=%pgmajor
VSO=${RPM_PACKAGE_VERSION%%%%.*}
%if %mini %if %mini
make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/include install make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/include install
make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/interfaces install make DESTDIR=%buildroot PACKAGE_TARNAME=%pgname -C src/interfaces install
@ -922,6 +921,7 @@ fi
%if %buildlibs && %mini %if %buildlibs && %mini
%files %devel -f devel.files -f libpq.files -f libecpg.files %files %devel -f devel.files -f libpq.files -f libecpg.files
%else %else
%files %devel -f devel.files %files %devel -f devel.files
%endif %endif