Add a patch to add support for LTO builds

This commit is contained in:
Björn Esser 2020-08-15 11:35:21 +02:00
parent da5f2d0f1b
commit 043fb823db
2 changed files with 75 additions and 1 deletions

View File

@ -0,0 +1,70 @@
From a1bff4255fb9cad501a8a5d4bffb8f95df0f615f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82@fedoraproject.org>
Date: Thu, 13 Aug 2020 18:51:50 +0200
Subject: [PATCH] crypt-port: Add the bits for compiling with link-time
optimization.
GCC 10.2 and LLVM/Clang 10 offer initial support for building
libraries, that are using symbol versioning features, with LTO.
To make use of this with GCC 10.2, the exported versioned symbols
need to be declared explicitly with __attribute__((symver (...))).
LLVM/Clang 10 supports symbol versioning with LTO out of the box
without any changes needed.
Fixes #24.
---
lib/crypt-port.h | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/lib/crypt-port.h b/lib/crypt-port.h
index bec36ac..ca86261 100644
--- a/lib/crypt-port.h
+++ b/lib/crypt-port.h
@@ -179,11 +179,29 @@ _crypt_strcpy_or_abort (void *, const size_t, const void *);
# define _strong_alias(name, aliasname) \
extern __typeof (name) aliasname __THROW __attribute__ ((alias (#name)))
+/* Starting with GCC 10.2, we can use the symver attribute, which also works
+ with link-time optimization enabled. */
+# if __GNUC__ > 10 || (__GNUC__ == 10 && __GNUC_MINOR__ >= 2)
+
+/* Referencing specific _compatibility_ symbols still needs inline asm. */
+# define _symver_ref(extstr, intname, version) \
+ __asm__ (".symver " #intname "," extstr "@" #version)
+
+/* Set the symbol version for EXTNAME, which uses INTNAME as its
+ implementation. */
+# define symver_set(extstr, intname, version, mode) \
+ extern __typeof (intname) intname __THROW \
+ __attribute__((symver (extstr mode #version)))
+
+# else
+
/* Set the symbol version for EXTNAME, which uses INTNAME as its
implementation. */
# define symver_set(extstr, intname, version, mode) \
__asm__ (".symver " #intname "," extstr mode #version)
+# endif
+
#else
# error "Don't know how to do symbol versioning with this compiler"
#endif
@@ -239,9 +257,14 @@ _crypt_strcpy_or_abort (void *, const size_t, const void *);
/* Tests may need to _refer_ to compatibility symbols, but should never need
to _define_ them. */
-
#define symver_ref(extstr, intname, version) \
+ _symver_ref(extstr, intname, version)
+
+/* Generic way for referencing specific _compatibility_ symbols. */
+#ifndef _symver_ref
+#define _symver_ref(extstr, intname, version) \
symver_set(extstr, intname, version, "@")
+#endif
/* Define configuration macros used during compile-time by the
GOST R 34.11-2012 "Streebog" hash function. */

View File

@ -158,7 +158,7 @@ fi \
Name: libxcrypt
Version: 4.4.16
Release: 6%{?dist}
Release: 7%{?dist}
Summary: Extended crypt library for descrypt, md5crypt, bcrypt, and others
# For explicit license breakdown, see the
@ -170,6 +170,7 @@ Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
# Patch 0000 - 2999: Backported patches from upstream.
# Patch 3000 - 5999: Backported patches from pull requests.
Patch3000: libxcrypt-4.4.16-enable_LTO_build.patch
# Patch 6000 - 9999: Downstream patches.
@ -487,6 +488,9 @@ done
%changelog
* Sat Aug 15 2020 Björn Esser <besser82@fedoraproject.org> - 4.4.16-7
- Add a patch to add support for LTO builds
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.4.16-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild