From d2b4bb9275785bb2aaa329ddc8a4292b84a7d2fd Mon Sep 17 00:00:00 2001 From: jinzhimin369 Date: Tue, 10 Nov 2020 15:18:43 +0800 Subject: [PATCH] fix master build error --- ...-io_uring-Add-io_cqring_offset-flags.patch | 151 ++++++++++++++++++ ...struct-io_cqring_offsets-compile-tim.patch | 46 ++++++ ...g-fix-build-against-5.8-libc-headers.patch | 99 ++++++++++++ strace.spec | 8 +- 4 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 backport-io_uring-Add-io_cqring_offset-flags.patch create mode 100644 backport-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch create mode 100644 backport-uring-fix-build-against-5.8-libc-headers.patch diff --git a/backport-io_uring-Add-io_cqring_offset-flags.patch b/backport-io_uring-Add-io_cqring_offset-flags.patch new file mode 100644 index 0000000..13b2540 --- /dev/null +++ b/backport-io_uring-Add-io_cqring_offset-flags.patch @@ -0,0 +1,151 @@ +From 592b915033de37322e19f3e6413de33317d272fe Mon Sep 17 00:00:00 2001 +From: Chris Packham +Date: Tue, 10 Nov 2020 10:02:26 +0800 +Subject: [PATCH] io_uring: Add io_cqring_offset flags + +Add support for displaying struct io_cqring_offsets.flags introduced +by Linux kernel commits v5.8-rc1~190^2~22 and v5.8-rc1~190^2~21. + +* types/io_uring.h (struct_io_cqring_offsets): Replace resv array +with flags, resv1, and resv2 fields. +* xlat/uring_cqring_flags.in: New file. +* configure.ac (AC_CHECK_MEMBERS): Check struct io_cqring_offsets.flags. +* io_uring.c: Include "xlat/uring_cqring_flags.h". +(SYS_FUNC(io_uring_setup)): Replace printing of the resv array +of struct io_cqring_offsets with flags, resv1, and resv2 fields. +* tests/io_uring_setup.c: Check it. + +Signed-off-by: Dmitry V. Levin +Resolves: https://github.com/strace/strace/issues/138 +--- + configure.ac | 1 + + io_uring.c | 11 +++++++---- + tests/io_uring_setup.c | 31 ++++++++++++++++++++++++++----- + types/io_uring.h | 4 +++- + xlat/uring_cqring_flags.in | 1 + + 5 files changed, 38 insertions(+), 10 deletions(-) + create mode 100644 xlat/uring_cqring_flags.in + +diff --git a/configure.ac b/configure.ac +index 7c4f929..958c097 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -475,6 +475,7 @@ AC_CHECK_HEADERS([linux/bpf.h], [ + + AC_CHECK_HEADERS([linux/io_uring.h], [ + AC_CHECK_MEMBERS(m4_normalize([ ++ struct io_cqring_offsets.flags, + struct io_uring_params.features, + struct io_uring_params.wq_fd, + struct io_uring_params.resv +diff --git a/io_uring.c b/io_uring.c +index cd18345..7da371f 100644 +--- a/io_uring.c ++++ b/io_uring.c +@@ -17,6 +17,7 @@ + #include "xlat/uring_setup_flags.h" + #include "xlat/uring_enter_flags.h" + #include "xlat/uring_register_opcodes.h" ++#include "xlat/uring_cqring_flags.h" + + #ifdef HAVE_STRUCT_IO_CQRING_OFFSETS + # ifdef HAVE_STRUCT_IO_CQRING_OFFSETS_RESV +@@ -103,10 +104,12 @@ SYS_FUNC(io_uring_setup) + PRINT_FIELD_U(", ", params.cq_off, ring_entries); + PRINT_FIELD_U(", ", params.cq_off, overflow); + PRINT_FIELD_U(", ", params.cq_off, cqes); +- if (!IS_ARRAY_ZERO(params.cq_off.resv)) { +- PRINT_FIELD_ARRAY(", ", params.cq_off, resv, tcp, +- print_xint64_array_member); +- } ++ PRINT_FIELD_FLAGS(", ", params.cq_off, flags, ++ uring_cqring_flags, "IORING_CQ_???"); ++ if (params.cq_off.resv1) ++ PRINT_FIELD_X(", ", params.cq_off, resv1); ++ if (params.cq_off.resv2) ++ PRINT_FIELD_X(", ", params.cq_off, resv2); + tprints("}"); + } + tprints("}"); +diff --git a/tests/io_uring_setup.c b/tests/io_uring_setup.c +index 317b0d7..3d362b8 100644 +--- a/tests/io_uring_setup.c ++++ b/tests/io_uring_setup.c +@@ -27,6 +27,7 @@ + # include "xlat.h" + + # include "xlat/uring_setup_features.h" ++# include "xlat/uring_cqring_flags.h" + + # ifdef HAVE_STRUCT_IO_URING_PARAMS_FEATURES + # ifdef HAVE_STRUCT_IO_URING_PARAMS_WQ_FD +@@ -144,20 +145,40 @@ main(void) + params->sq_off.resv2); + + printf("}, cq_off={head=%u, tail=%u, ring_mask=%u" +- ", ring_entries=%u, overflow=%u, cqes=%u", ++ ", ring_entries=%u, overflow=%u, cqes=%u", flags=", + params->cq_off.head, + params->cq_off.tail, + params->cq_off.ring_mask, + params->cq_off.ring_entries, + params->cq_off.overflow, + params->cq_off.cqes); +- if (params->cq_off.resv[0] || params->cq_off.resv[1]) { +- printf(", resv=[%#llx, %#llx]", ++#ifdef HAVE_STRUCT_IO_CQRING_OFFSETS_FLAGS ++ printflags(uring_cqring_flags, ++ params->cq_off.flags, ++ "IORING_CQ_???"); ++ if (params->cq_off.resv1) ++ printf(", resv1=%#x", params->cq_off.resv1); ++ if (params->cq_off.resv2) ++ printf(", resv2=%#llx", + (unsigned long long) +- params->cq_off.resv[0], ++ params->cq_off.resv2); ++#else ++ union { ++ struct { ++ uint32_t flags; ++ uint32_t resv1; ++ } s; ++ uint64_t v; ++ } u = { .v = params->cq_off.resv[0] }; ++ printflags(uring_cqring_flags, u.s.flags, ++ "IORING_CQ_???"); ++ if (u.s.resv1) ++ printf(", resv1=%#x", u.s.resv1); ++ if (params->cq_off.resv[1]) ++ printf(", resv2=%#llx", + (unsigned long long) + params->cq_off.resv[1]); +- } ++#endif + + printf("}}) = %ld\n", rc); + } +diff --git a/types/io_uring.h b/types/io_uring.h +index 76f432c..2fe1c13 100644 +--- a/types/io_uring.h ++++ b/types/io_uring.h +@@ -31,7 +31,9 @@ typedef struct { + uint32_t ring_entries; + uint32_t overflow; + uint32_t cqes; +- uint64_t resv[2]; ++ /** Added by v5.8-rc1~190^2~22 */ uint32_t flags; ++ /** Added by v5.8-rc1~190^2~22 */ uint32_t resv1; ++ /** Added by v5.8-rc1~190^2~22 */ uint64_t resv2; + } struct_io_cqring_offsets; + + typedef struct { +diff --git a/xlat/uring_cqring_flags.in b/xlat/uring_cqring_flags.in +new file mode 100644 +index 0000000..c81fbc2 +--- /dev/null ++++ b/xlat/uring_cqring_flags.in +@@ -0,0 +1 @@ ++IORING_CQ_EVENTFD_DISABLED 1U +-- +2.27.0 \ No newline at end of file diff --git a/backport-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch b/backport-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch new file mode 100644 index 0000000..309e2ce --- /dev/null +++ b/backport-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch @@ -0,0 +1,46 @@ +From fded17c15bca4150165f899cc47f67bab963d9a7 Mon Sep 17 00:00:00 2001 +From: Chris Packham +Date: Mon, 15 Jun 2020 22:01:25 +1200 +Subject: [PATCH 1/2] io_uring: Remove struct io_cqring_offsets compile time + asserts + +The generated types/check-io_uring.c already checks the kernel's struct +io_cqring_offsets for compatibility with the strace definition so +there's no need for manual checks. + +* io_uring.c [HAVE_STRUCT_IO_CQRING_OFFSETS]: Remove static_asserts. +Signed-off-by: Chris Packham +Resolves: https://github.com/strace/strace/issues/143 +--- + io_uring.c | 15 --------------- + 1 file changed, 15 deletions(-) + +diff --git a/io_uring.c b/io_uring.c +index cd18345..cfeea82 100644 +--- a/io_uring.c ++++ b/io_uring.c +@@ -18,21 +18,6 @@ + #include "xlat/uring_register_opcodes.h" + #include "xlat/uring_cqring_flags.h" + +-#ifdef HAVE_STRUCT_IO_CQRING_OFFSETS +-# ifdef HAVE_STRUCT_IO_CQRING_OFFSETS_RESV +-static_assert(offsetof(struct_io_cqring_offsets, resv) +- >= offsetof(struct io_cqring_offsets, resv), +- "struct io_cqring_offsets.resv offset mismatch" +- ", please update the decoder"); +-static_assert(sizeof_field(struct_io_cqring_offsets, resv) +- <= sizeof_field(struct io_cqring_offsets, resv), +- "struct io_cqring_offsets.resv size mismatch" +- ", please update the decoder"); +-# else /* !HAVE_STRUCT_IO_CQRING_OFFSETS_RESV */ +-static_assert(0, "struct io_cqring_offsets.resv is missing" +- ", please update the decoder"); +-# endif +-#endif /* HAVE_STRUCT_IO_CQRING_OFFSETS */ + #ifdef HAVE_STRUCT_IO_URING_PARAMS + # ifdef HAVE_STRUCT_IO_URING_PARAMS_RESV + static_assert(offsetof(struct_io_uring_params, resv) +-- +1.8.3.1 + diff --git a/backport-uring-fix-build-against-5.8-libc-headers.patch b/backport-uring-fix-build-against-5.8-libc-headers.patch new file mode 100644 index 0000000..bc4aa6a --- /dev/null +++ b/backport-uring-fix-build-against-5.8-libc-headers.patch @@ -0,0 +1,99 @@ +From 8dda6b8ddbe18b6bb83cf1fa6bc71ebdc82e1b72 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield +Date: Tue, 10 Nov 2020 10:53:58 +0800 +Subject: [PATCH] uring: fix build against 5.8 libc-headers + +To get strace building against v5.8 headers before the next +version of strace is released, we need to copy in a bootstrapped +file from the latest git (xlat/uring_cqring_flags.h) and remove +remove unnecessary asserts for v5.8+ (in a similar manner to the +main strace repository). + +Upstream-status: inappropriate. oe specific (upstream builds bootstrap) + +Signed-off-by: Bruce Ashfield +https://patchwork.openembedded.org/patch/175096/ +--- + types/check-io_uring.c | 10 -------- + xlat/uring_cqring_flags.h | 48 +++++++++++++++++++++++++++++++++++++++ + 2 files changed, 48 insertions(+), 10 deletions(-) + create mode 100644 xlat/uring_cqring_flags.h + +diff --git a/types/check-io_uring.c b/types/check-io_uring.c +index dc21569..d5bd4b1 100644 +--- a/types/check-io_uring.c ++++ b/types/check-io_uring.c +@@ -13,16 +13,6 @@ static_assert(sizeof(struct io_sqring_offsets) <= offsetof(struct_io_sqring_offs + # endif /* HAVE_STRUCT_IO_SQRING_OFFSETS_RESV2 */ + #endif /* HAVE_STRUCT_IO_SQRING_OFFSETS */ + +-#ifdef HAVE_STRUCT_IO_CQRING_OFFSETS +-# ifdef HAVE_STRUCT_IO_CQRING_OFFSETS_RESV +-static_assert(sizeof(struct io_cqring_offsets) == sizeof(struct_io_cqring_offsets), +- "struct io_cqring_offsets size mismatch, please update the decoder or fix the kernel"); +-# else +-static_assert(sizeof(struct io_cqring_offsets) <= offsetof(struct_io_cqring_offsets, resv), +-"struct io_cqring_offsets size mismatch, please update the decoder or fix the kernel"); +-# endif /* HAVE_STRUCT_IO_CQRING_OFFSETS_RESV */ +-#endif /* HAVE_STRUCT_IO_CQRING_OFFSETS */ +- + #ifdef HAVE_STRUCT_IO_URING_PARAMS + # ifdef HAVE_STRUCT_IO_URING_PARAMS_CQ_OFF + static_assert(sizeof(struct io_uring_params) == sizeof(struct_io_uring_params), +diff --git a/xlat/uring_cqring_flags.h b/xlat/uring_cqring_flags.h +new file mode 100644 +index 0000000..0352749 +--- /dev/null ++++ b/xlat/uring_cqring_flags.h +@@ -0,0 +1,48 @@ ++/* Generated by ./xlat/gen.sh from ./xlat/uring_cqring_flags.in; do not edit. */ ++ ++#include "gcc_compat.h" ++#include "static_assert.h" ++ ++#if defined(IORING_CQ_EVENTFD_DISABLED) || (defined(HAVE_DECL_IORING_CQ_EVENTFD_DISABLED) && HAVE_DECL_IORING_CQ_EVENTFD_DISABLED) ++DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE ++static_assert((IORING_CQ_EVENTFD_DISABLED) == (1U), "IORING_CQ_EVENTFD_DISABLED != 1U"); ++DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE ++#else ++# define IORING_CQ_EVENTFD_DISABLED 1U ++#endif ++ ++#ifndef XLAT_MACROS_ONLY ++ ++# ifdef IN_MPERS ++ ++# error static const struct xlat uring_cqring_flags in mpers mode ++ ++# else ++ ++static const struct xlat_data uring_cqring_flags_xdata[] = { ++ XLAT(IORING_CQ_EVENTFD_DISABLED), ++ #define XLAT_VAL_0 ((unsigned) (IORING_CQ_EVENTFD_DISABLED)) ++ #define XLAT_STR_0 STRINGIFY(IORING_CQ_EVENTFD_DISABLED) ++}; ++static ++const struct xlat uring_cqring_flags[1] = { { ++ .data = uring_cqring_flags_xdata, ++ .size = ARRAY_SIZE(uring_cqring_flags_xdata), ++ .type = XT_NORMAL, ++ .flags_mask = 0 ++# ifdef XLAT_VAL_0 ++ | XLAT_VAL_0 ++# endif ++ , ++ .flags_strsz = 0 ++# ifdef XLAT_STR_0 ++ + sizeof(XLAT_STR_0) ++# endif ++ , ++} }; ++ ++# undef XLAT_STR_0 ++# undef XLAT_VAL_0 ++# endif /* !IN_MPERS */ ++ ++#endif /* !XLAT_MACROS_ONLY */ +-- +2.27.0 + diff --git a/strace.spec b/strace.spec index 1c77913..746c784 100644 --- a/strace.spec +++ b/strace.spec @@ -3,7 +3,7 @@ Summary: Tracks and displays system calls associated with a running process Name: strace Version: 5.6 -Release: 1 +Release: 2 # The test suite is GPLv2+, all the rest is LGPLv2.1+. License: LGPL-2.1+ and GPL-2.0+ # Some distros require Group tag to be present, @@ -19,6 +19,9 @@ Source: strace-%{version}.tar.gz %endif BuildRequires: gcc gzip +Patch0: backport-io_uring-Add-io_cqring_offset-flags.patch +Patch1: backport-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch +Patch2: backport-uring-fix-build-against-5.8-libc-headers.patch # Install Bluetooth headers for AF_BLUETOOTH sockets decoding. %if 0%{?fedora} >= 18 || 0%{?centos} >= 6 || 0%{?rhel} >= 8 || 0%{?suse_version} >= 1200 || 0%{?openEuler} >= 1 BuildRequires: pkgconfig(bluez) @@ -101,6 +104,9 @@ wait %{_mandir}/man1/* %changelog +* Thu Nov 10 2020 xinghe - 5.6-2 +- fix master build error + * Sat Jul 25 2020 liuchao - 5.6-1 - Upgrade strace version to 5.6 -- Gitee