|
@@ -0,0 +1,61 @@
|
|
|
+From 3aba09a5c56e017746c5c1652dbc845f4db7374a Mon Sep 17 00:00:00 2001
|
|
|
+From: Giulio Benetti <giulio.benetti@benettiengineering.com>
|
|
|
+Date: Tue, 3 Aug 2021 23:39:46 +0200
|
|
|
+Subject: [PATCH] meson.build: fix wrong .symver detection
|
|
|
+
|
|
|
+As pointed here [1] __has_attribute() is broken for many attributes and
|
|
|
+if it doesn't support the specific attribute it returns true, so we
|
|
|
+can't really rely on that for this check. This lead to Buildroot
|
|
|
+libfuse3 build failure [2] where that shows up with:
|
|
|
+```
|
|
|
+error: symver is only supported on ELF platforms
|
|
|
+```
|
|
|
+Indeed Microblaze doesn't support ELF since it doesn't include elfos.h,
|
|
|
+but __has_attribute(symver) returns true.
|
|
|
+
|
|
|
+So let's substitute the #ifdef __has_attribute() with a stronger test on
|
|
|
+a function foo() with __attribute__((symver ("test@TEST"))).
|
|
|
+
|
|
|
+[1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766
|
|
|
+[2]: http://autobuild.buildroot.net/results/d6c/d6cfaf2aafaeda3c12d127f6a2d2e175b25e654f/build-end.log
|
|
|
+
|
|
|
+Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
|
|
|
+---
|
|
|
+ meson.build | 16 +++++++---------
|
|
|
+ 1 file changed, 7 insertions(+), 9 deletions(-)
|
|
|
+
|
|
|
+diff --git a/meson.build b/meson.build
|
|
|
+index b0250ee..a7281f3 100644
|
|
|
+--- a/meson.build
|
|
|
++++ b/meson.build
|
|
|
+@@ -96,20 +96,18 @@ endif
|
|
|
+ # to have __has_attribute, then they are too old to support symver)
|
|
|
+ # other compilers might not have __has_attribute, but in those cases
|
|
|
+ # it is safe for this check to fail and for us to fallback to the old _asm_
|
|
|
+-# method for symver
|
|
|
++# method for symver. Anyway the attributes not supported by __has_attribute()
|
|
|
++# unfortunately return true giving a false positive. So let's try to build
|
|
|
++# using __attribute__ ((symver )) and see the result.
|
|
|
+ code = '''
|
|
|
+-#if defined __has_attribute
|
|
|
+-# if !__has_attribute (symver)
|
|
|
+-# error symver attribute not supported
|
|
|
+-# endif
|
|
|
+-#else
|
|
|
+-#error __has_attribute not defined, assume we do not have symver
|
|
|
+-#endif
|
|
|
++__attribute__ ((symver ("test@TEST")))
|
|
|
++void foo(void) {
|
|
|
++}
|
|
|
+
|
|
|
+ int main(void) {
|
|
|
+ return 0;
|
|
|
+ }'''
|
|
|
+-if cc.compiles(code, args: [ '-O0', '-c'])
|
|
|
++if cc.compiles(code, args: [ '-O0', '-c', '-Werror'])
|
|
|
+ message('Compiler supports symver attribute')
|
|
|
+ add_project_arguments('-DHAVE_SYMVER_ATTRIBUTE', language: 'c')
|
|
|
+ else
|
|
|
+--
|
|
|
+2.25.1
|
|
|
+
|