[compiler-rt] [compiler-rt] Fix linux header includes for musl with old kernels (PR #150621)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 25 07:16:02 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: Caleb Zulawski (calebzulawski)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/150621.diff
1 Files Affected:
- (modified) compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp (+3-1)
``````````diff
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
``````````
</details>
https://github.com/llvm/llvm-project/pull/150621
More information about the llvm-commits
mailing list