| From ac3e262cba81889c0bb04ce87a50a1709f2726e7 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/ ] |
| --- |
| 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 +- |
| 9 files changed, 30 insertions(+), 8 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 053c3bcf9..61ea2076d 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 4f48d7529..d8ee03dae 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 <fcntl.h> |
| #include <libgen.h> |
| @@ -23,6 +22,7 @@ |
| #include <malloc.h> |
| #include "test.h" |
| #include "safe_macros.h" |
| +#include "lapi/sysinfo.h" |
| |
| char *safe_basename(const char *file, const int lineno, |
| void (*cleanup_fn) (void), char *path) |
| diff --git a/lib/tst_memutils.c b/lib/tst_memutils.c |
| index f134d90c9..647db951e 100644 |
| --- a/lib/tst_memutils.c |
| +++ b/lib/tst_memutils.c |
| @@ -5,11 +5,11 @@ |
| |
| #include <unistd.h> |
| #include <limits.h> |
| -#include <sys/sysinfo.h> |
| #include <stdlib.h> |
| |
| #define TST_NO_DEFAULT_MAIN |
| #include "tst_test.h" |
| +#include "lapi/sysinfo.h" |
| |
| #define BLOCKSIZE (16 * 1024 * 1024) |
| |
| diff --git a/testcases/kernel/mem/mtest01/mtest01.c b/testcases/kernel/mem/mtest01/mtest01.c |
| index f08d3943f..9b4d856f8 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 f76f3f6aa..b2613670b 100644 |
| --- a/testcases/kernel/syscalls/madvise/madvise06.c |
| +++ b/testcases/kernel/syscalls/madvise/madvise06.c |
| @@ -24,8 +24,8 @@ |
| #include <errno.h> |
| #include <stdio.h> |
| #include <sys/mount.h> |
| -#include <sys/sysinfo.h> |
| #include "tst_test.h" |
| +#include "lapi/sysinfo.h" |
| |
| #define CHUNK_SZ (400*1024*1024L) |
| #define CHUNK_PAGES (CHUNK_SZ / pg_sz) |
| diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo01.c b/testcases/kernel/syscalls/sysinfo/sysinfo01.c |
| index 2ea44a2be..a95066bf5 100644 |
| --- a/testcases/kernel/syscalls/sysinfo/sysinfo01.c |
| +++ b/testcases/kernel/syscalls/sysinfo/sysinfo01.c |
| @@ -69,9 +69,9 @@ |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <sys/signal.h> |
| -#include <sys/sysinfo.h> |
| |
| #include "test.h" |
| +#include "lapi/sysinfo.h" |
| |
| void setup(); |
| void cleanup(); |
| diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo02.c b/testcases/kernel/syscalls/sysinfo/sysinfo02.c |
| index 678b8f1d3..5ce65d20e 100644 |
| --- a/testcases/kernel/syscalls/sysinfo/sysinfo02.c |
| +++ b/testcases/kernel/syscalls/sysinfo/sysinfo02.c |
| @@ -65,10 +65,10 @@ |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <sys/signal.h> |
| -#include <sys/sysinfo.h> |
| #include <stdint.h> |
| |
| #include "test.h" |
| +#include "lapi/sysinfo.h" |
| |
| #define INVALID_ADDRESS ((uintptr_t)-1) |
| |
| diff --git a/testcases/kernel/syscalls/sysinfo/sysinfo03.c b/testcases/kernel/syscalls/sysinfo/sysinfo03.c |
| index af7cb6421..3b61a05b1 100644 |
| --- a/testcases/kernel/syscalls/sysinfo/sysinfo03.c |
| +++ b/testcases/kernel/syscalls/sysinfo/sysinfo03.c |
| @@ -13,9 +13,9 @@ |
| |
| */ |
| |
| -#include <sys/sysinfo.h> |
| #include "lapi/namespaces_constants.h" |
| #include "lapi/posix_clocks.h" |
| +#include "lapi/sysinfo.h" |
| #include "tst_test.h" |
| |
| static int offsets[] = { |
| -- |
| 2.28.0 |
| |