]> git.ipfire.org Git - thirdparty/libbsd.git/commitdiff
build: Allow building with -flto on gcc-10 and newer
authorAlexander Miller <alex.miller@gmx.de>
Thu, 30 Sep 2021 01:39:57 +0000 (03:39 +0200)
committerGuillem Jover <guillem@hadrons.org>
Sat, 27 Nov 2021 04:06:14 +0000 (05:06 +0100)
Global asm statements (like .symver directives) do not work reliably
in gcc with link time optimization. Use the symver attribute introduced
with gcc-10 to set symbol versions instead, if available.

[guillem@hadrons.org:
 - Simplify by using __has_attribute fallback from <sys/cdefs.h>.
 - Coding style changes. ]

Signed-off-by: Guillem Jover <guillem@hadrons.org>
src/local-link.h

index 55fd0285683b2904d439fe798a1c715e1f1b8134..fd1949c71f22ac515c8bbc77844878b9614ac79b 100644 (file)
 #ifndef LIBBSD_LOCAL_LINK_H
 #define LIBBSD_LOCAL_LINK_H
 
+#include <sys/cdefs.h>
+
 #define libbsd_link_warning(symbol, msg) \
        static const char libbsd_emit_link_warning_##symbol[] \
                __attribute__((__used__,__section__(".gnu.warning." #symbol))) = msg
 
 #ifdef __ELF__
+#  if __has_attribute(symver)
+/* The symver attribute is supported since gcc 10.x. */
+#define libbsd_symver_default(alias, symbol, version) \
+       extern __typeof(symbol) symbol \
+               __attribute((__symver__(#alias "@@" #version)))
+#define libbsd_symver_variant(alias, symbol, version) \
+       extern __typeof(symbol) symbol \
+               __attribute((__symver__(#alias "@" #version)))
+#  else
 #define libbsd_symver_default(alias, symbol, version) \
        __asm__(".symver " #symbol "," #alias "@@" #version)
 
 #define libbsd_symver_variant(alias, symbol, version) \
        __asm__(".symver " #symbol "," #alias "@" #version)
+#  endif
 #else
 #define libbsd_symver_default(alias, symbol, version) \
        extern __typeof(symbol) alias __attribute__((__alias__(#symbol)))