[Buildroot] [PATCH v2] package/attr: fix build failure on Microblaze architecture
Giulio Benetti
giulio.benetti at benettiengineering.com
Fri Feb 16 21:25:43 UTC 2024
On Microblaze architecture __has_attribute(__symver__) support is broken
and always return true even if symver is not supported so let's add a local
patch pending upstream to detect if symver is supported during autoreconf.
Let's also add ATTR_AUTORECONF = YES to let patch to affect building.
Fixes:
http://autobuild.buildroot.org/results/29c76e02becedf922bd7dc0533338c078bf77d2a
Signed-off-by: Giulio Benetti <giulio.benetti at benettiengineering.com>
---
V1->V2:
* written commit log as suggested by Thomas(there was no commit log at all
since this patch has been pointed during Buildroot Dev Days in IRC to me)
* re-sent local patch to the correct maililng list and updated Upstream:
URL
---
...dd-detection-of-symver-gcc-attribute.patch | 68 +++++++++++++++++++
package/attr/attr.mk | 3 +
2 files changed, 71 insertions(+)
create mode 100644 package/attr/0002-configure.ac-add-detection-of-symver-gcc-attribute.patch
diff --git a/package/attr/0002-configure.ac-add-detection-of-symver-gcc-attribute.patch b/package/attr/0002-configure.ac-add-detection-of-symver-gcc-attribute.patch
new file mode 100644
index 0000000000..ca773cf0fc
--- /dev/null
+++ b/package/attr/0002-configure.ac-add-detection-of-symver-gcc-attribute.patch
@@ -0,0 +1,68 @@
+From 1be7c2251040f1152de9ceb5263e6e96fa5c3d75 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
+Date: Tue, 6 Feb 2024 15:33:15 +0100
+Subject: [PATCH] configure.ac: add detection of symver gcc attribute
+
+On non-ELF platforms, such as microblaze, builds will fail when trying
+to add symver information because __attribute__((symver ..)) is not
+supported even though __has_attribute(__symver__) returns true.
+
+Support for symver needs to be detected via a compile test since
+__has_attribute can report false positives [0].
+
+Add a configure compile check for __attribute__((symver ..)) to ensure
+it is supported and define a variable to advertise support.
+
+[0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766#c1
+
+Upstream: https://lists.nongnu.org/archive/html/acl-devel/2024-02/msg00003.html
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
+Signed-off-by: Giulio Benetti <giulio.benetti at benettiengineering.com>
+---
+ configure.ac | 15 +++++++++++++++
+ libattr/syscalls.c | 2 +-
+ 2 files changed, 16 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 7e362e9..98477b5 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -57,6 +57,21 @@ AS_CASE([$host_os],
+ [linux*], [os_linux=yes])
+ AM_CONDITIONAL([OS_LINUX], [test "x$os_linux" = "xyes"])
+
++AC_CACHE_CHECK(whether __attribute__((__symver__())) is supported,
++ gcc_cv_symver_attribute,
++ [cat > conftest.c <<EOF
++void foo (void) {}
++__typeof(foo) foo __attribute__ ((__symver__("foo at foo")));
++EOF
++ gcc_cv_symver_attribute=no
++ if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then \
++ gcc_cv_symver_attribute=yes
++ fi
++ rm -f conftest.[cs]
++])
++AS_IF([test $gcc_cv_symver_attribute = yes],
++ [AC_DEFINE(HAVE_SYMVER_ATTRIBUTE, [], [GCC supports symver attribute])])
++
+ AC_CONFIG_COMMANDS([include/attr],
+ [dnl
+ rm -rf include/attr
+diff --git a/libattr/syscalls.c b/libattr/syscalls.c
+index 907560a..caa70bc 100644
+--- a/libattr/syscalls.c
++++ b/libattr/syscalls.c
+@@ -32,7 +32,7 @@
+ * fall back to traditional .symver asm directive otherwise.
+ */
+ #ifdef __has_attribute
+-# if __has_attribute(__symver__)
++# if defined(HAVE_SYMVER_ATTRIBUTE)
+ # define SYMVER(cn, vn) __typeof(cn) cn __attribute__((__symver__(vn)))
+ # elif __has_attribute(__no_reorder__)
+ /*
+--
+2.43.0
+
diff --git a/package/attr/attr.mk b/package/attr/attr.mk
index d1397921ff..1d24144f46 100644
--- a/package/attr/attr.mk
+++ b/package/attr/attr.mk
@@ -11,6 +11,9 @@ ATTR_LICENSE = GPL-2.0+ (programs), LGPL-2.1+ (libraries)
ATTR_LICENSE_FILES = doc/COPYING doc/COPYING.LGPL
ATTR_CPE_ID_VALID = YES
+# Flag added for patch dealing with symver in configure.ac
+ATTR_AUTORECONF = YES
+
ATTR_INSTALL_STAGING = YES
ATTR_CONF_OPTS = --disable-nls
--
2.34.1
More information about the buildroot
mailing list