aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/package/elfutils/64e89606ff4967a647525524aec00dd33765ba2a.patch
blob: e7b534f1e900119c920bfa0dd7a2c918bf276d89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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.55.0