[Buildroot] [PATCH] package/libfuse3: fix build failure on Microblaze due to wrong symver attribute detection

Giulio Benetti giulio.benetti at benettiengineering.com
Wed Aug 4 10:02:25 UTC 2021


I've forgotten to add...

On 8/4/21 12:41 AM, Giulio Benetti wrote:
> Add a patch to fix symver wrong detection. As explained into the patch
> pending upstream[1] __has attribute() gives false positive when an
> attribute is not supported[2] and this leads to assuming symver attribute
> is present but it's not. This consequentely leads to build failure. I.e.
> Microblaze doesn't really support it since it doesn't include include
> elfos.h in config.gcc that determine symver to be available.
> 
> [1]: https://github.com/libfuse/libfuse/pull/620
> [2]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766

Fixes:
http://autobuild.buildroot.net/results/d6c/d6cfaf2aafaeda3c12d127f6a2d2e175b25e654f/

can you please reword while committing? Otherwise I can send a v2.

Also the PR[1] has been merged.

Kind regards
-- 
Giulio Benetti
Benetti Engineering sas

> Signed-off-by: Giulio Benetti <giulio.benetti at benettiengineering.com>
> ---
>   ...on.build-fix-wrong-.symver-detection.patch | 61 +++++++++++++++++++
>   1 file changed, 61 insertions(+)
>   create mode 100644 package/libfuse3/0001-meson.build-fix-wrong-.symver-detection.patch
> 
> diff --git a/package/libfuse3/0001-meson.build-fix-wrong-.symver-detection.patch b/package/libfuse3/0001-meson.build-fix-wrong-.symver-detection.patch
> new file mode 100644
> index 0000000000..da20c26f19
> --- /dev/null
> +++ b/package/libfuse3/0001-meson.build-fix-wrong-.symver-detection.patch
> @@ -0,0 +1,61 @@
> +From 3aba09a5c56e017746c5c1652dbc845f4db7374a Mon Sep 17 00:00:00 2001
> +From: Giulio Benetti <giulio.benetti at 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 at 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 at 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 at 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
> +
> 



More information about the buildroot mailing list