[LTP] [RFC PATCH v2 1/1] lapi: Add sysinfo.h to fix build with older MUSL toolchain

Petr Vorel pvorel@suse.cz
Sat May 6 20:44:24 CEST 2023


From: Petr Vorel <petr.vorel@gmail.com>

When building LTP with older MUSL based toolchains without kernel fix
a85cbe6159ff ("uapi: move constants from <linux/kernel.h> to <linux/const.h>")
from 5.11 build fails due indirect <linux/sysinfo.h> include when using
some network headers: <linux/netlink.h> or others -> <linux/kernel.h> ->
<linux/sysinfo.h>. This indirect include causes on MUSL redefinition of
struct sysinfo when included both <sys/sysinfo.h> and some of UAPI headers:

In file included from x86_64-buildroot-linux-musl/sysroot/usr/include/linux/kernel.h:5,
                 from x86_64-buildroot-linux-musl/sysroot/usr/include/linux/netlink.h:5,
                 from ../include/tst_netlink.h:14,
                 from tst_crypto.c:13:
x86_64-buildroot-linux-musl/sysroot/usr/include/linux/sysinfo.h:8:8: error: redefinition of ‘struct sysinfo’
 struct sysinfo {
        ^~~~~~~
In file included from ../include/tst_safe_macros.h:15,
                 from ../include/tst_test.h:93,
                 from tst_crypto.c:11:
x86_64-buildroot-linux-musl/sysroot/usr/include/sys/sysinfo.h:10:8: note: originally defined here

a85cbe6159ff was merged into stable versions, but Buildroot projects
reports still older MUSL toolchains not using it. Therefore they asked
to require 5.11 headers for musl, which mean no LTP for many toolchains.

Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
Hi,

I posted this patch 3 years ago [1]. Later my fix in kernel was merged,
but still Buildroot asks for this patch. I'm ok to maintain it
downstream, unless you are ok to have it in upstream LTP. I'm not sure
for how long it will be needed, at least now the official Buildroot MUSL
toolchains are 4.9 based.

Kind regards,
Petr

[1] https://lore.kernel.org/ltp/20201001231256.6930-1-petr.vorel@gmail.com/

 include/lapi/sysinfo.h                        | 22 +++++++++++++++++++
 include/tst_safe_macros.h                     |  2 +-
 lib/safe_macros.c                             |  2 +-
 lib/tst_memutils.c                            |  2 +-
 testcases/kernel/mem/mtest01/mtest01.c        |  2 +-
 testcases/kernel/syscalls/madvise/madvise06.c |  2 +-
 testcases/kernel/syscalls/sysinfo/sysinfo01.c |  2 +-
 testcases/kernel/syscalls/sysinfo/sysinfo02.c |  2 +-
 testcases/kernel/syscalls/sysinfo/sysinfo03.c |  4 ++--
 .../interfaces/pthread_cond_broadcast/1-2.c   |  2 +-
 10 files changed, 32 insertions(+), 10 deletions(-)
 create mode 100644 include/lapi/sysinfo.h

diff --git a/include/lapi/sysinfo.h b/include/lapi/sysinfo.h
new file mode 100644
index 000000000..ab4e4c62a
--- /dev/null
+++ b/include/lapi/sysinfo.h
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2023 Petr Vorel <petr.vorel@gmail.com>
+ */
+
+#ifndef SYSINFO_H__
+
+/*
+ * Don't use <sys/sysinfo.h> as it breaks build MUSL toolchain.
+ * Use <linux/sysinfo.h> instead.
+ *
+ * Some kernel UAPI headers do indirect <linux/sysinfo.h> include:
+ * <linux/netlink.h> or others -> <linux/kernel.h> -> <linux/sysinfo.h>
+ *
+ * This indirect include causes on MUSL redefinition of struct sysinfo when
+ * included both <sys/sysinfo.h> and some of UAPI headers:
+ */
+#include <linux/sysinfo.h>
+
+#define SYSINFO_H__
+
+#endif /* SYSINFO_H__ */
diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h
index 0cf3d7878..43da18e2a 100644
--- a/include/tst_safe_macros.h
+++ b/include/tst_safe_macros.h
@@ -12,7 +12,7 @@
 #include <sys/resource.h>
 #include <sys/stat.h>
 #include <sys/vfs.h>
-#include <sys/sysinfo.h>
+#include <linux/sysinfo.h>
 #include <fcntl.h>
 #include <libgen.h>
 #include <signal.h>
diff --git a/lib/safe_macros.c b/lib/safe_macros.c
index af6dd0716..e38ff1c43 100644
--- a/lib/safe_macros.c
+++ b/lib/safe_macros.c
@@ -11,7 +11,6 @@
 #include <sys/wait.h>
 #include <sys/mount.h>
 #include <sys/xattr.h>
-#include <sys/sysinfo.h>
 #include <errno.h>
 #include <libgen.h>
 #include <limits.h>
@@ -22,6 +21,7 @@
 #include <malloc.h>
 #include <math.h>
 #include "lapi/fcntl.h"
+#include "lapi/sysinfo.h"
 #include "test.h"
 #include "safe_macros.h"
 
diff --git a/lib/tst_memutils.c b/lib/tst_memutils.c
index 6fc9f6a93..a52b46a71 100644
--- a/lib/tst_memutils.c
+++ b/lib/tst_memutils.c
@@ -6,7 +6,7 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <limits.h>
-#include <sys/sysinfo.h>
+#include "lapi/sysinfo.h"
 #include <stdlib.h>
 
 #define TST_NO_DEFAULT_MAIN
diff --git a/testcases/kernel/mem/mtest01/mtest01.c b/testcases/kernel/mem/mtest01/mtest01.c
index fb991ce8b..0fccd5405 100644
--- a/testcases/kernel/mem/mtest01/mtest01.c
+++ b/testcases/kernel/mem/mtest01/mtest01.c
@@ -20,7 +20,6 @@
  */
 
 #include <sys/types.h>
-#include <sys/sysinfo.h>
 #include <sys/wait.h>
 #include <limits.h>
 #include <signal.h>
@@ -29,6 +28,7 @@
 #include <unistd.h>
 
 #include "lapi/abisize.h"
+#include "lapi/sysinfo.h"
 #include "tst_test.h"
 
 #define FIVE_HUNDRED_MB         (500ULL*1024*1024)
diff --git a/testcases/kernel/syscalls/madvise/madvise06.c b/testcases/kernel/syscalls/madvise/madvise06.c
index be22318ea..32fdff740 100644
--- a/testcases/kernel/syscalls/madvise/madvise06.c
+++ b/testcases/kernel/syscalls/madvise/madvise06.c
@@ -46,7 +46,7 @@
 #include <errno.h>
 #include <stdio.h>
 #include <sys/mount.h>
-#include <sys/sysinfo.h>
+#include "lapi/sysinfo.h"
 #include "tst_test.h"
 
 #define CHUNK_SZ (400*1024*1024L)
diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo01.c b/testcases/kernel/syscalls/sysinfo/sysinfo01.c
index 2ea44a2be..a237345ef 100644
--- a/testcases/kernel/syscalls/sysinfo/sysinfo01.c
+++ b/testcases/kernel/syscalls/sysinfo/sysinfo01.c
@@ -69,7 +69,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/signal.h>
-#include <sys/sysinfo.h>
+#include "lapi/sysinfo.h"
 
 #include "test.h"
 
diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo02.c b/testcases/kernel/syscalls/sysinfo/sysinfo02.c
index 7ad0e8bdc..61fa1ab75 100644
--- a/testcases/kernel/syscalls/sysinfo/sysinfo02.c
+++ b/testcases/kernel/syscalls/sysinfo/sysinfo02.c
@@ -65,7 +65,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/signal.h>
-#include <sys/sysinfo.h>
+#include "lapi/sysinfo.h"
 #include <stdint.h>
 
 #include "test.h"
diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo03.c b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
index 6b8f0aef7..0b6ffb49b 100644
--- a/testcases/kernel/syscalls/sysinfo/sysinfo03.c
+++ b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
@@ -13,10 +13,10 @@
 
  */
 
-#include <sys/sysinfo.h>
 #include "lapi/posix_clocks.h"
-#include "tst_test.h"
 #include "lapi/sched.h"
+#include "lapi/sysinfo.h"
+#include "tst_test.h"
 
 static int offsets[] = {
 	10,
diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c b/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
index 22e7c3638..572701f9f 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/pthread_cond_broadcast/1-2.c
@@ -43,7 +43,7 @@
 #include <sys/wait.h>
 #include <semaphore.h>
 #ifdef	__linux__
-#include <sys/sysinfo.h>
+#include "lapi/sysinfo.h"
 #endif
 
 #include "../testfrmw/testfrmw.h"
-- 
2.40.1



More information about the ltp mailing list