Hi Daeho, On Sun, Aug 16, 2026 at 3:28 AM Daeho Ro <[email protected]> wrote: > > 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]>
Thanks for the patch, merged. Aaron > --- > 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 a6badbb..539a636 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 efcabaf..062bb9e 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.50.1 (Apple Git-155) >
