[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