#1152231 yuzu: FTBFS on arm64 with linux-libc-dev 7.3: conflicting declaration of sigset_t

Package:
src:yuzu
Source:
src:yuzu
Submitter:
Sebastien Bacher
Date:
2026-10-26 22:43:02 UTC
Severity:
normal
Tags:
#1152231#5
Date:
2026-10-26 22:41:30 UTC
From:
To:
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.