From a6d5b2881f89a24425788f162e9164d50f7262e7 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Sat, 6 Jan 2024 10:27:02 +0100 Subject: [PATCH] rebuilt with llvm 14.0.3 [release 14.2-2mamba;Sun May 01 2022] --- postgresql-14.2-llvm-14.0.3.patch | 154 ++++++++++++++++++++++++++++++ postgresql.spec | 8 +- 2 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 postgresql-14.2-llvm-14.0.3.patch diff --git a/postgresql-14.2-llvm-14.0.3.patch b/postgresql-14.2-llvm-14.0.3.patch new file mode 100644 index 0000000..0b6b9f2 --- /dev/null +++ b/postgresql-14.2-llvm-14.0.3.patch @@ -0,0 +1,154 @@ +From 5610411ac7b7d86b781aaaeed7f02b0e1005f8bb Mon Sep 17 00:00:00 2001 +From: Thomas Munro +Date: Wed, 16 Mar 2022 11:35:00 +1300 +Subject: [PATCH] Back-patch LLVM 14 API changes. + +Since LLVM 14 has stopped changing and is about to be released, +back-patch the following changes from the master branch: + + e6a7600202105919bffd62b3dfd941f4a94e082b + 807fee1a39de6bb8184082012e643951abb9ad1d + a56e7b66010f330782243de9e25ac2a6596be0e1 + +Back-patch to 11, where LLVM JIT support came in. +--- + src/backend/jit/llvm/Makefile | 6 +++++ + src/backend/jit/llvm/llvmjit_error.cpp | 35 +++++++++++++++++++++---- + src/backend/jit/llvm/llvmjit_inline.cpp | 12 ++++++++- + 3 files changed, 47 insertions(+), 6 deletions(-) + +diff --git a/src/backend/jit/llvm/Makefile b/src/backend/jit/llvm/Makefile +index 0268bd46d5..2da122a391 100644 +--- a/src/backend/jit/llvm/Makefile ++++ b/src/backend/jit/llvm/Makefile +@@ -22,6 +22,12 @@ endif + PGFILEDESC = "llvmjit - JIT using LLVM" + NAME = llvmjit + ++# LLVM 14 produces deprecation warnings. We'll need to make some changes ++# before the relevant functions are removed, but for now silence the warnings. ++ifeq ($(GCC), yes) ++LLVM_CFLAGS += -Wno-deprecated-declarations ++endif ++ + # All files in this directory use LLVM. + CFLAGS += $(LLVM_CFLAGS) + CXXFLAGS += $(LLVM_CXXFLAGS) +diff --git a/src/backend/jit/llvm/llvmjit_error.cpp b/src/backend/jit/llvm/llvmjit_error.cpp +index 7c8f3252e2..2182a03c91 100644 +--- a/src/backend/jit/llvm/llvmjit_error.cpp ++++ b/src/backend/jit/llvm/llvmjit_error.cpp +@@ -23,15 +23,22 @@ extern "C" + + #include "jit/llvmjit.h" + ++#include + + static int fatal_new_handler_depth = 0; + static std::new_handler old_new_handler = NULL; + + static void fatal_system_new_handler(void); + #if LLVM_VERSION_MAJOR > 4 ++static void fatal_llvm_new_handler(void *user_data, const char *reason, bool gen_crash_diag); ++#if LLVM_VERSION_MAJOR < 14 + static void fatal_llvm_new_handler(void *user_data, const std::string& reason, bool gen_crash_diag); + #endif ++#endif ++static void fatal_llvm_error_handler(void *user_data, const char *reason, bool gen_crash_diag); ++#if LLVM_VERSION_MAJOR < 14 + static void fatal_llvm_error_handler(void *user_data, const std::string& reason, bool gen_crash_diag); ++#endif + + + /* +@@ -129,23 +136,41 @@ fatal_system_new_handler(void) + #if LLVM_VERSION_MAJOR > 4 + static void + fatal_llvm_new_handler(void *user_data, +- const std::string& reason, ++ const char *reason, + bool gen_crash_diag) + { + ereport(FATAL, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("out of memory"), +- errdetail("While in LLVM: %s", reason.c_str()))); ++ errdetail("While in LLVM: %s", reason))); ++} ++#if LLVM_VERSION_MAJOR < 14 ++static void ++fatal_llvm_new_handler(void *user_data, ++ const std::string& reason, ++ bool gen_crash_diag) ++{ ++ fatal_llvm_new_handler(user_data, reason.c_str(), gen_crash_diag); + } + #endif ++#endif + + static void + fatal_llvm_error_handler(void *user_data, +- const std::string& reason, ++ const char *reason, + bool gen_crash_diag) + { + ereport(FATAL, + (errcode(ERRCODE_OUT_OF_MEMORY), +- errmsg("fatal llvm error: %s", +- reason.c_str()))); ++ errmsg("fatal llvm error: %s", reason))); + } ++ ++#if LLVM_VERSION_MAJOR < 14 ++static void ++fatal_llvm_error_handler(void *user_data, ++ const std::string& reason, ++ bool gen_crash_diag) ++{ ++ fatal_llvm_error_handler(user_data, reason.c_str(), gen_crash_diag); ++} ++#endif +diff --git a/src/backend/jit/llvm/llvmjit_inline.cpp b/src/backend/jit/llvm/llvmjit_inline.cpp +index 40b18d9a0e..01168cab41 100644 +--- a/src/backend/jit/llvm/llvmjit_inline.cpp ++++ b/src/backend/jit/llvm/llvmjit_inline.cpp +@@ -594,7 +594,11 @@ function_inlinable(llvm::Function &F, + if (F.materialize()) + elog(FATAL, "failed to materialize metadata"); + +- if (F.getAttributes().hasFnAttribute(llvm::Attribute::NoInline)) ++#if LLVM_VERSION_MAJOR < 14 ++#define hasFnAttr hasFnAttribute ++#endif ++ ++ if (F.getAttributes().hasFnAttr(llvm::Attribute::NoInline)) + { + ilog(DEBUG1, "ineligibile to import %s due to noinline", + F.getName().data()); +@@ -871,7 +875,9 @@ create_redirection_function(std::unique_ptr &importMod, + llvm::Function *AF; + llvm::BasicBlock *BB; + llvm::CallInst *fwdcall; ++#if LLVM_VERSION_MAJOR < 14 + llvm::Attribute inlineAttribute; ++#endif + + AF = llvm::Function::Create(F->getFunctionType(), + LinkageTypes::AvailableExternallyLinkage, +@@ -880,9 +886,13 @@ create_redirection_function(std::unique_ptr &importMod, + + Builder.SetInsertPoint(BB); + fwdcall = Builder.CreateCall(F, &*AF->arg_begin()); ++#if LLVM_VERSION_MAJOR < 14 + inlineAttribute = llvm::Attribute::get(Context, + llvm::Attribute::AlwaysInline); + fwdcall->addAttribute(~0U, inlineAttribute); ++#else ++ fwdcall->addFnAttr(llvm::Attribute::AlwaysInline); ++#endif + Builder.CreateRet(fwdcall); + + return AF; +-- +2.30.2 + diff --git a/postgresql.spec b/postgresql.spec index de1ab68..c35d5df 100644 --- a/postgresql.spec +++ b/postgresql.spec @@ -4,7 +4,7 @@ Name: postgresql Version: 14.2 -Release: 1mamba +Release: 2mamba Summary: An object-relational database management system (ORDBMS) Group: Applications/Databases Vendor: openmamba @@ -16,6 +16,7 @@ Source1: postgresql-initscript Source2: postgresql.service Source3: postgresql.tmpfiles Patch0: postgresql-13.1-run-socket.patch +Patch1: postgresql-14.2-llvm-14.0.3.patch License: BSD ## AUTOBUILDREQ-BEGIN BuildRequires: glibc-devel @@ -38,6 +39,7 @@ BuildRequires: libxslt-devel BuildRequires: libz-devel ## AUTOBUILDREQ-END BuildRequires: flex +BuildRequires: libllvm-devel >= 14.0.3 Requires(pre): /usr/sbin/groupadd Requires(pre): /usr/sbin/useradd %systemd_requires @@ -128,6 +130,7 @@ The postgresql-docs package includes some additional documentation for PostgreSQ %prep %setup -q %patch0 -p1 +%patch1 -p1 -b .llvm-14.0.3 %build %configure \ @@ -357,6 +360,9 @@ find /etc/rc[0-6].d/ -type l -xtype l -exec rm -f {} \; %{_libdir}/postgresql/tutorial/* %changelog +* Sun May 01 2022 Silvan Calarco 14.2-2mamba +- rebuilt with llvm 14.0.3 + * Fri Feb 11 2022 Automatic Build System 14.2-1mamba - automatic version update by autodist