Backport upstream fix for struct iovec redefinition error when building elfutils-native on aarch64 hosts. Since commit 0e8b57a3 added <fcntl.h> to lib/system.h, glibc's <fcntl.h> pulls in struct iovec via <bits/types/struct_iovec.h>, conflicting with <linux/uio.h> which defines it unconditionally.
The fix switches to <sys/uio.h> which guards the definition with __iovec_defined. Issue seen on https://autobuilder.yoctoproject.org/valkyrie/#/builders/23/builds/4668 Signed-off-by: Jaipaul Cheernam <[email protected]> --- .../elfutils/elfutils_0.196.bb | 1 + ...s-uio.h-instead-of-linux-uio.h-for-s.patch | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 meta/recipes-devtools/elfutils/files/0001-backends-use-sys-uio.h-instead-of-linux-uio.h-for-s.patch diff --git a/meta/recipes-devtools/elfutils/elfutils_0.196.bb b/meta/recipes-devtools/elfutils/elfutils_0.196.bb index e0b188ce8e..c2466134cd 100644 --- a/meta/recipes-devtools/elfutils/elfutils_0.196.bb +++ b/meta/recipes-devtools/elfutils/elfutils_0.196.bb @@ -19,6 +19,7 @@ SRC_URI = "https://sourceware.org/elfutils/ftp/${PV}/${BP}.tar.bz2 \ file://ptest.patch \ file://0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch \ file://0001-config-eu.am-do-not-force-Werror.patch \ + file://0001-backends-use-sys-uio.h-instead-of-linux-uio.h-for-s.patch \ " SRC_URI:append:libc-musl = " \ file://0003-musl-utils.patch \ diff --git a/meta/recipes-devtools/elfutils/files/0001-backends-use-sys-uio.h-instead-of-linux-uio.h-for-s.patch b/meta/recipes-devtools/elfutils/files/0001-backends-use-sys-uio.h-instead-of-linux-uio.h-for-s.patch new file mode 100644 index 0000000000..0461172fcf --- /dev/null +++ b/meta/recipes-devtools/elfutils/files/0001-backends-use-sys-uio.h-instead-of-linux-uio.h-for-s.patch @@ -0,0 +1,74 @@ +From 64e89606ff4967a647525524aec00dd33765ba2a Mon Sep 17 00:00:00 2001 +From: Daeho Ro <[email protected]> +Date: Sun, 16 Aug 2026 16:27:56 +0900 +Subject: [PATCH] backends: use <sys/uio.h> instead of <linux/uio.h> for + struct iovec + +Since commit 0e8b57a3 ("elfcompress: Handle existing output files +(symlinks)") lib/system.h includes <fcntl.h>. When _GNU_SOURCE is +defined, glibc's <fcntl.h> pulls in <bits/types/struct_iovec.h> (via +bits/fcntl-linux.h), which defines struct iovec. The kernel UAPI header +<linux/uio.h> defines struct iovec unconditionally, so including it +after "system.h" now breaks the aarch64 backend build: + + In file included from aarch64_initreg.c:36: + /usr/include/linux/uio.h:17:8: error: redefinition of 'struct iovec' + 17 | struct iovec + | ^~~~~ + In file included from /usr/include/aarch64-linux-gnu/bits/fcntl-linux.h:38, + from /usr/include/aarch64-linux-gnu/bits/fcntl.h:61, + from /usr/include/fcntl.h:35, + from ../lib/system.h:42, + from aarch64_initreg.c:33: + /usr/include/aarch64-linux-gnu/bits/types/struct_iovec.h:26:8: note: originally defined here + +Seen building 0.196 on aarch64 with glibc 2.39 and gcc 13.3.0. + +Both files only need struct iovec to call ptrace (PTRACE_GETREGSET), +which glibc provides in <sys/uio.h>; that header guards the definition +with __iovec_defined, so it composes with the rest of system.h. +arm_initreg.c does not currently include "system.h" and so still builds, +but it has the same latent conflict. + +* backends/aarch64_initreg.c: Include <sys/uio.h> instead of + <linux/uio.h>. +* backends/arm_initreg.c: Likewise. + +Signed-off-by: Daeho Ro <[email protected]> + +Upstream-Status: Backport [https://sourceware.org/git/?p=elfutils.git;a=patch;h=64e89606ff4967a647525524aec00dd33765ba2a] +Signed-off-by: Jaipaul Cheernam <[email protected]> +--- + backends/aarch64_initreg.c | 2 +- + backends/arm_initreg.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/backends/aarch64_initreg.c b/backends/aarch64_initreg.c +index a6badbb4..539a6366 100644 +--- a/backends/aarch64_initreg.c ++++ b/backends/aarch64_initreg.c +@@ -33,7 +33,7 @@ + #include "system.h" + #include <assert.h> + #if defined(__aarch64__) && defined(__linux__) +-# include <linux/uio.h> ++# include <sys/uio.h> + # include <sys/user.h> + # include <sys/ptrace.h> + # include <asm/ptrace.h> +diff --git a/backends/arm_initreg.c b/backends/arm_initreg.c +index efcabaf6..062bb9e0 100644 +--- a/backends/arm_initreg.c ++++ b/backends/arm_initreg.c +@@ -38,7 +38,7 @@ + #endif + + #ifdef __aarch64__ +-# include <linux/uio.h> ++# include <sys/uio.h> + # include <sys/user.h> + # include <sys/ptrace.h> + /* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ +-- +2.43.7 +
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#243895): https://lists.openembedded.org/g/openembedded-core/message/243895 Mute This Topic: https://lists.openembedded.org/mt/120857997/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
