[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