[PATCH] Allow building with -flto on gcc-10 and newer.
Alexander Miller
alex.miller at gmx.de
Sat Aug 21 12:21:39 UTC 2021
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.
--- a/src/local-link.h
+++ b/src/local-link.h
@@ -32,16 +32,35 @@
__attribute__((__used__,__section__(".gnu.warning." #symbol))) = msg;
#ifdef __ELF__
+
+#ifdef __has_attribute
+#if __has_attribute(symver)
+#define libbsd_have_symver_attribute 1
+#endif
+#endif
+
+#ifdef libbsd_have_symver_attribute
+#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)))
#define libbsd_symver_variant(alias, symbol, version)
+
#endif
#endif
More information about the libbsd
mailing list