Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion recipes/libs/elfutils.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
inherit: [autotools]
inherit: [autotools, patch]

metaEnvironment:
PKG_VERSION: "0.196"
Expand All @@ -16,6 +16,10 @@ checkoutSCM:
digestSHA256: fd5cc6b77ad6773cac93cb3f415f9318ac3b3455eecf801f6b4a742c4f6c7209
stripComponents: 1

checkoutDeterministic: True
checkoutScript: |
patchApplySeries -p1 $<@elfutils/*.patch@>

buildTools: [m4]
buildScript: |
mkdir -p all
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
From 64e89606ff4967a647525524aec00dd33765ba2a Mon Sep 17 00:00:00 2001
From: Daeho Ro <email@daeho.ro>
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@daeho.ro>
---
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

Loading