[compiler-rt] [compiler-rt] Fix linux header includes for musl with old kernels (PR #150621)

Caleb Zulawski via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 25 07:15:28 PDT 2025


https://github.com/calebzulawski created https://github.com/llvm/llvm-project/pull/150621

Fixes this error on musl with old kernels:
```
In file included from /home/caleb/cpp-toolchain/toolchain/build/_deps/llvm-source-src/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp:84:
In file included from /home/caleb/cpp-toolchain/toolchain/build/aarch64-unknown-linux-musl/toolchain/aarch64-unknown-linux-musl/sysroot/usr/include/linux/sysctl.h:25:
In file included from /home/caleb/cpp-toolchain/toolchain/build/aarch64-unknown-linux-musl/toolchain/aarch64-unknown-linux-musl/sysroot/usr/include/linux/kernel.h:4:
/home/caleb/cpp-toolchain/toolchain/build/aarch64-unknown-linux-musl/toolchain/aarch64-unknown-linux-musl/sysroot/usr/include/linux/sysinfo.h:7:8: error: redefinition of 'sysinfo'
    7 | struct sysinfo {
      |        ^
/home/caleb/cpp-toolchain/toolchain/build/aarch64-unknown-linux-musl/toolchain/aarch64-unknown-linux-musl/sysroot/usr/include/sys/sysinfo.h:10:8: note: previous definition is here
   10 | struct sysinfo {
      |        ^
In file included from /home/caleb/cpp-toolchain/toolchain/build/_deps/llvm-source-src/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp:132:
In file included from /home/caleb/cpp-toolchain/toolchain/build/aarch64-unknown-linux-musl/toolchain/aarch64-unknown-linux-musl/sysroot/usr/include/linux/if_ppp.h:1:
/home/caleb/cpp-toolchain/toolchain/build/aarch64-unknown-linux-musl/toolchain/aarch64-unknown-linux-musl/sysroot/usr/include/linux/ppp-ioctl.h:55:7: error: ISO C++ forbids forward references to 'enum' types
   55 |         enum NPmode     mode;
      |              ^
/home/caleb/cpp-toolchain/toolchain/build/aarch64-unknown-linux-musl/toolchain/aarch64-unknown-linux-musl/sysroot/usr/include/linux/ppp-ioctl.h:55:14: error: field has incomplete type 'enum NPmode'
   55 |         enum NPmode     mode;
      |                         ^
/home/caleb/cpp-toolchain/toolchain/build/aarch64-unknown-linux-musl/toolchain/aarch64-unknown-linux-musl/sysroot/usr/include/linux/ppp-ioctl.h:55:7: note: forward declaration of 'NPmode'
   55 |         enum NPmode     mode;
      |              ^
```
It seems somewhere around 5.x, `linux/kernel.h` stopped including `linux/sysinfo.h`. musl provides its own sysinfo, rather simply including `linux/sysinfo.h`, which causes the redefinition error.

The second error is resolved by simply reordering the headers.

>From 8fbd35b5102e5bb3b43ecff911c05bcc4cbb1554 Mon Sep 17 00:00:00 2001
From: Caleb Zulawski <caleb.zulawski at gmail.com>
Date: Fri, 25 Jul 2025 01:31:35 -0400
Subject: [PATCH] [compiler-rt] Fix linux header includes for musl with old
 kernels

---
 .../lib/sanitizer_common/sanitizer_platform_limits_posix.cpp  | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
index ef4b8a85d6634..c87c773471eab 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
@@ -72,7 +72,9 @@
 #include <malloc.h>
 #include <mntent.h>
 #include <netinet/ether.h>
+#if defined(_LINUX_SYSINFO_H)
 #include <sys/sysinfo.h>
+#endif
 #include <sys/vt.h>
 #include <linux/cdrom.h>
 #include <linux/fd.h>
@@ -133,9 +135,9 @@ typedef struct user_fpregs elf_fpregset_t;
 #      endif
 #      include <scsi/scsi.h>
 #else
+#include <linux/ppp_defs.h>
 #include <linux/if_ppp.h>
 #include <linux/kd.h>
-#include <linux/ppp_defs.h>
 #endif  // SANITIZER_GLIBC
 
 #if SANITIZER_ANDROID



More information about the llvm-commits mailing list