From 344afd78b4a857fee0ac3cfac996fd9dd7fe7132 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sep 09 2020 21:12:04 +0000 Subject: Use symvmer attribute, not asms for symbol versioning. Re-enable LTO --- diff --git a/lksctp-tools-symver.patch b/lksctp-tools-symver.patch new file mode 100644 index 0000000..25ead68 --- /dev/null +++ b/lksctp-tools-symver.patch @@ -0,0 +1,85 @@ +diff --git a/configure.ac b/configure.ac +index 5de5c76..d3e31c3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -130,4 +130,12 @@ AC_ARG_ENABLE(tests, + [enable_tests=yes]) + AM_CONDITIONAL(BUILD_TESTS, [test $enable_tests != no]) + ++# GCC tries to be "helpful" and only issue a warning for unrecognized ++# attributes. So we compile the test with Werror, so that if the ++# attribute is not recognized the compilation fails ++AC_LANG(C) ++AC_LANG_WERROR ++AC_COMPILE_IFELSE([AC_LANG_SOURCE([[__attribute__ ((symver ("foo@foo_1"))) void frob (void) { }]])], ++ [AC_DEFINE([HAVE_ATTRIBUTE_SYMVER], [1], [Checking for symver attribute])], []) ++ + AC_OUTPUT +diff --git a/src/lib/connectx.c b/src/lib/connectx.c +index 5f4552b..2a21e3a 100644 +--- a/src/lib/connectx.c ++++ b/src/lib/connectx.c +@@ -26,6 +26,18 @@ + #include + #include + #include ++#include "config.h" ++ ++#define __SYMPFX(pfx, sym) #pfx sym ++#define _SYMPFX(pfx, sym) __SYMPFX(pfx, sym) ++#define SYMPFX(sym) _SYMPFX(__USER_LABEL_PREFIX__, #sym) ++ ++#if HAVE_ATTRIBUTE_SYMVER ++#define SYMVER(name, name2) __attribute__ ((symver (SYMPFX(name2)))) ++#else ++#define SYMVER(name, name2) __asm__(".symver " SYMPFX(name) "," SYMPFX(name2)); ++#endif ++ + + /* Support the sctp_connectx() interface. + * +@@ -64,6 +76,7 @@ static int __connectx_addrsize(const struct sockaddr *addrs, + } + + ++SYMVER(__sctp_connectx, sctp_connectx@) + int __sctp_connectx(int fd, struct sockaddr *addrs, int addrcnt) + { + int addrs_size = __connectx_addrsize(addrs, addrcnt); +@@ -75,6 +88,7 @@ int __sctp_connectx(int fd, struct sockaddr *addrs, int addrcnt) + addrs_size); + } + ++SYMVER(sctp_connectx_orig, sctp_connectx@VERS_1) + extern int sctp_connectx_orig (int) + __attribute ((alias ("__sctp_connectx"))); + +@@ -114,6 +128,7 @@ static int __connectx(int fd, struct sockaddr *addrs, socklen_t addrs_size, + addrs, addrs_size); + } + ++SYMVER(sctp_connectx2, sctp_connectx@VERS_2) + int sctp_connectx2(int fd, struct sockaddr *addrs, int addrcnt, + sctp_assoc_t *id) + { +@@ -125,6 +140,7 @@ int sctp_connectx2(int fd, struct sockaddr *addrs, int addrcnt, + return __connectx(fd, addrs, addrs_size, id); + } + ++SYMVER(sctp_connectx3, sctp_connectx@@VERS_3) + int sctp_connectx3(int fd, struct sockaddr *addrs, int addrcnt, + sctp_assoc_t *id) + { +@@ -179,12 +195,3 @@ int sctp_connectx3(int fd, struct sockaddr *addrs, int addrcnt, + return __connectx(fd, addrs, addrs_size, id); + } + +-#define __SYMPFX(pfx, sym) #pfx sym +-#define _SYMPFX(pfx, sym) __SYMPFX(pfx, sym) +-#define SYMPFX(sym) _SYMPFX(__USER_LABEL_PREFIX__, #sym) +-#define SYMVER(name, name2) __asm__(".symver " SYMPFX(name) "," SYMPFX(name2)) +- +-SYMVER(__sctp_connectx, sctp_connectx@); +-SYMVER(sctp_connectx_orig, sctp_connectx@VERS_1); +-SYMVER(sctp_connectx2, sctp_connectx@VERS_2); +-SYMVER(sctp_connectx3, sctp_connectx@@VERS_3); diff --git a/lksctp-tools.spec b/lksctp-tools.spec index 2cf5e3d..446b5ed 100644 --- a/lksctp-tools.spec +++ b/lksctp-tools.spec @@ -1,7 +1,7 @@ Name: lksctp-tools Summary: User-space access to Linux Kernel SCTP Version: 1.0.18 -Release: 7%{?dist} +Release: 8%{?dist} # src/apps/bindx_test.C is GPLv2, I've asked upstream for clarification License: GPLv2 and GPLv2+ and LGPLv2 and MIT Group: System Environment/Libraries @@ -15,6 +15,7 @@ Patch3: lksctp-tools-1.0.18-build-fix-netinet-sctp.h-not-to-be-installed.patch Patch4: lksctp-tools-1.0.18-build-remove-v4.12-secondary-defines-in-favor-of-HAV.patch Patch5: lksctp-tools-1.0.18-build-fix-probing-for-HAVE_SCTP_SENDV.patch Patch6: lksctp-tools-1.0.18-build-0b0dce7a36fb-actually-belongs-to-v4.19.patch +Patch7: lksctp-tools-symver.patch BuildRequires: libtool, automake, autoconf %description @@ -56,16 +57,9 @@ Drafts). %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 %build -# This package uses top level ASM constructs which are incompatible with LTO. -# Top level ASMs are often used to implement symbol versioning. gcc-10 -# introduces a new mechanism for symbol versioning which works with LTO. -# Converting packages to use that mechanism instead of toplevel ASMs is -# recommended. -# Disable LTO -%define _lto_cflags %{nil} - [ ! -x ./configure ] && sh bootstrap %configure --disable-static # remove rpath from libtool @@ -100,6 +94,9 @@ find $RPM_BUILD_ROOT -type f -name "*.la" -delete %doc doc/*.txt %changelog +* Wed Sep 09 2020 Jeff Law - 1.0.18-8 +- Use symver attribute for symbol versioning. Re-enable LTO + * Wed Aug 19 2020 Igor Raits - 1.0.18-7 - Drop useless ldconfig scriptlets