From beef155b12cc2c196d7af2e182458de006eb2cf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= Date: Fri, 20 Mar 2026 13:52:17 +0100 Subject: [PATCH] mips: Fix conditional inclusion of MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit systemd now has a system call wrapper that does a long series of #ifdef's to differentiate between architectures and ABIs. This wrapper has two problems. 1. On mips, it needs to differentiate between O32, N32, N64 ABI. It does that via a code block in src/include/override/sys/generate-syscall.py (and derived files): 76 # elif defined(_MIPS_SIM) 77 # if _MIPS_SIM == _MIPS_SIM_ABI32 78 # define systemd_NR_{syscall} {nr_mipso32} 79 # elif _MIPS_SIM == _MIPS_SIM_NABI32 80 # define systemd_NR_{syscall} {nr_mips64n32} 81 # elif _MIPS_SIM == _MIPS_SIM_ABI64 82 # define systemd_NR_{syscall} {nr_mips64} 83 # else 84 # error "Unknown MIPS ABI" 85 # endif 86 # elif defined(__hppa__) Now the _MIPS_SIM* constants stem from a vendor-specific header file sgidefs.h, which is included with glibc, but not with musl. It is however always present in the Linux kernel headers as asm/sgidefs.h ... 2. To work around this, the syscall wrapper already has a block 47 #ifdef ARCH_MIPS 48 #include 49 #endif Turns out, ARCH_MIPS is defined nowhere in Gentoo, neither on glibc nor on musl. As a result the code (by accident, probably sgidefs.h is included transitively somehow) works on glibc, but not on musl. The simplest fix is to replace line 47 in the generator and the derived file with 47 #ifdef __mips__ Two other source code files require a similar fix since they rely on the constants. Bug: https://github.com/systemd/systemd/issues/41239 Bug: https://bugs.gentoo.org/971376 Signed-off-by: Andreas K. Hüttel --- src/include/override/sys/generate-syscall.py | 2 +- src/include/override/sys/syscall.h | 2 +- src/shared/base-filesystem.c | 2 +- src/shared/seccomp-util.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/include/override/sys/generate-syscall.py b/src/include/override/sys/generate-syscall.py index 6f449f9dc1..1c90ad0e38 100755 --- a/src/include/override/sys/generate-syscall.py +++ b/src/include/override/sys/generate-syscall.py @@ -44,7 +44,7 @@ HEADER = '''\ #include_next /* IWYU pragma: export */ -#ifdef ARCH_MIPS +#ifdef __mips__ #include #endif diff --git a/src/include/override/sys/syscall.h b/src/include/override/sys/syscall.h index da2f780bed..0233f254b4 100644 --- a/src/include/override/sys/syscall.h +++ b/src/include/override/sys/syscall.h @@ -11,7 +11,7 @@ #include_next /* IWYU pragma: export */ -#ifdef ARCH_MIPS +#ifdef __mips__ #include #endif diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c index bad3b46f3a..9e8856ba48 100644 --- a/src/shared/base-filesystem.c +++ b/src/shared/base-filesystem.c @@ -5,7 +5,7 @@ #include #include -#ifdef ARCH_MIPS +#ifdef __mips__ #include #endif diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c index d2f7612a53..9785fc45d7 100644 --- a/src/shared/seccomp-util.c +++ b/src/shared/seccomp-util.c @@ -12,7 +12,7 @@ #include #include -#ifdef ARCH_MIPS +#ifdef __mips__ #include #endif