package/ltp-testsuite: require 5.11 headers for musl

There was a conflict between musl and kernel headers prior to 5.11, due
to a bug in kernel headers, which was fixed in a85cbe6159ff ("uapi: move
constants from <linux/kernel.h> to <linux/const.h>") in v5.11, and
backported to stable/LTS kernels.

Upsteam ltp-testsuite has been unreceptive to accepting the workaround,
as they argue that the kernel headers have been fixed, and people should
update their toolchains.

However, it is not always practical, or even possible, to update the
toolchain, so lets require kernel headers at least 5.11 for musl-based
toolchains.

Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
[yann.morin.1998@free.fr: reword commit log]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
This commit is contained in:
Petr Vorel 2023-04-16 22:17:04 +02:00 committed by Yann E. MORIN
parent c6bb759e2c
commit 5e1c238b72
2 changed files with 1 additions and 211 deletions

View File

@ -1,211 +0,0 @@
From f34c6ca3d543968e900d6327d8b5900db63f08ad Mon Sep 17 00:00:00 2001
From: Petr Vorel <petr.vorel@gmail.com>
Date: Thu, 1 Oct 2020 23:28:39 +0200
Subject: [PATCH] lapi: Add sysinfo.h to fix build with MUSL libc
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The reason is to avoid 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
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
[ upstream status:
https://patchwork.ozlabs.org/project/ltp/patch/20201001231256.6930-1-petr.vorel@gmail.com/,
rebased for 20220527 ]
But this patch is not going to get upstreamed because it got fixed in Linux kernel:
a85cbe6159ff "uapi: move constants from <linux/kernel.h> to <linux/const.h>"
This patch was also backported to stable and LTS versions,
which we use since buildroot 54584d233b "{linux, linux-headers}: bump
5.{4, 10}.x 4.{4, 9, 14, 19} series".
We just wait for all musl based toolchains to be rebuilt. ]
Signed-off-by: Petr Vorel <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 | 2 +-
.../interfaces/pthread_cond_broadcast/1-2.c | 2 +-
10 files changed, 31 insertions(+), 9 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..d0e0e93d7
--- /dev/null
+++ b/include/lapi/sysinfo.h
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2020 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 81c4b0844..a8c02d7df 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 a5b6bc504..87d922a92 100644
--- a/lib/safe_macros.c
+++ b/lib/safe_macros.c
@@ -11,7 +11,7 @@
#include <sys/wait.h>
#include <sys/mount.h>
#include <sys/xattr.h>
-#include <sys/sysinfo.h>
+#include "lapi/sysinfo.h"
#include <errno.h>
#include <fcntl.h>
#include <libgen.h>
diff --git a/lib/tst_memutils.c b/lib/tst_memutils.c
index 0d20bb17c..21a3a5ba0 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 6d218801c..8af11a030 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 af7cb6421..dc5ae65e3 100644
--- a/testcases/kernel/syscalls/sysinfo/sysinfo03.c
+++ b/testcases/kernel/syscalls/sysinfo/sysinfo03.c
@@ -13,7 +13,7 @@
*/
-#include <sys/sysinfo.h>
+#include "lapi/sysinfo.h"
#include "lapi/namespaces_constants.h"
#include "lapi/posix_clocks.h"
#include "tst_test.h"
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.36.1

View File

@ -12,6 +12,7 @@ config BR2_PACKAGE_LTP_TESTSUITE
bool "ltp-testsuite"
depends on BR2_USE_MMU # fork()
depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
depends on !BR2_TOOLCHAIN_USES_MUSL || BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11
depends on BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS
select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_PACKAGE_MUSL_FTS if !BR2_TOOLCHAIN_USES_GLIBC