Dear Maintainer,
yuzu fails to build on arm64 with the Linux 7.3 kernel headers
(linux-libc-dev 7.3.0-9.9 in Ubuntu, 7.3~rc7-1~exp1 in experimental). It
still builds in unstable because linux-libc-dev 7.2.12-1 has the old
headers, so it will start failing there once 7.3 reaches unstable.
The error:
In file included from src/./core/arm/nce/arm_nce_asm_definitions.h:8,
from src/./core/arm/nce/guest_context.h:11,
from src/./core/arm/nce/arm_nce.h:9,
from src/core/hle/kernel/k_process.cpp:21:
/usr/include/asm-generic/signal.h:63:3: error: conflicting declaration
'typedef struct sigset_t sigset_t'
/usr/include/aarch64-linux-gnu/bits/types/sigset_t.h:7:20: note: previous
declaration as 'typedef struct __sigset_t sigset_t'
src/core/arm/nce/arm_nce_asm_definitions.h defines __ASSEMBLY__ before it
includes <asm-generic/signal.h> and <asm-generic/unistd.h>, so that it gets
only the constants and not the C declarations. In 7.3, the uapi headers
check __ASSEMBLER__ instead:
7.2.12-1: #ifndef __ASSEMBLY__
7.3: #ifndef __ASSEMBLER__
With 7.3, the kernel's sigset_t typedef is no longer hidden and clashes with
glibc's. Only arm64 is affected, because only arm64 builds the NCE code.
The attached patch also defines __ASSEMBLER__, but only around the two
includes: glibc headers (errno.h, endian.h, features.h, bits/floatn.h) check
it too, and the header is included from C++ files. When the compiler has
already defined it (arm_nce.s, built with -x assembler-with-cpp), it is left
alone. That works with both old and new headers. We applied it in Ubuntu as
0-1734+ds-10.1ubuntu2.
Thanks for considering the patch.