logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: aae46e49a8fa4ffa637ae2c7577abffe7c989cda
parent 7ed22dda2a0e60bf5739f6c8da034c86e2523af0
Author: Michael Forney <mforney@mforney.org>
Date:   Mon,  3 Aug 2020 22:54:01 -0700

strace: Cherry-pick some patches to fix build with linux 5.8 headers

Diffstat:

Mpkg/strace/config.h1+
Apkg/strace/patch/0012-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch44++++++++++++++++++++++++++++++++++++++++++++
Apkg/strace/patch/0013-io_uring-Add-io_cqring_offset-flags.patch208+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpkg/strace/ver2+-
4 files changed, 254 insertions(+), 1 deletion(-)

diff --git a/pkg/strace/config.h b/pkg/strace/config.h @@ -698,6 +698,7 @@ #define HAVE_STRUCT_IOCB_AIO_FLAGS 1 #define HAVE_STRUCT_IOCB_AIO_RW_FLAGS 1 #define HAVE_STRUCT_IO_CQRING_OFFSETS 1 +/* #undef HAVE_STRUCT_IO_CQRING_OFFSETS_FLAGS */ #define HAVE_STRUCT_IO_CQRING_OFFSETS_RESV 1 #define HAVE_STRUCT_IO_SQRING_OFFSETS 1 #define HAVE_STRUCT_IO_SQRING_OFFSETS_RESV2 1 diff --git a/pkg/strace/patch/0012-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch b/pkg/strace/patch/0012-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch @@ -0,0 +1,44 @@ +From 8ba630f69445285a84daa356fc9bdb0dd059be40 Mon Sep 17 00:00:00 2001 +From: Chris Packham <chris.packham@alliedtelesis.co.nz> +Date: Mon, 15 Jun 2020 22:01:25 +1200 +Subject: [PATCH] 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. +--- + io_uring.c | 15 --------------- + 1 file changed, 15 deletions(-) + +diff --git a/io_uring.c b/io_uring.c +index cd183457..cfeea82b 100644 +--- a/io_uring.c ++++ b/io_uring.c +@@ -18,21 +18,6 @@ + #include "xlat/uring_enter_flags.h" + #include "xlat/uring_register_opcodes.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) +-- +2.28.0 + diff --git a/pkg/strace/patch/0013-io_uring-Add-io_cqring_offset-flags.patch b/pkg/strace/patch/0013-io_uring-Add-io_cqring_offset-flags.patch @@ -0,0 +1,208 @@ +From 7be4c3c00f7b7568b4c7602e8430e90d2df91e3b Mon Sep 17 00:00:00 2001 +From: Chris Packham <chris.packham@alliedtelesis.co.nz> +Date: Mon, 15 Jun 2020 22:01:26 +1200 +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. + +Co-authored-by: Dmitry V. Levin <ldv@altlinux.org> +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.h | 48 ++++++++++++++++++++++++++++++++++++++ + xlat/uring_cqring_flags.in | 1 + + 6 files changed, 86 insertions(+), 10 deletions(-) + create mode 100644 xlat/uring_cqring_flags.h + create mode 100644 xlat/uring_cqring_flags.in + +diff --git a/configure.ac b/configure.ac +index d0fd51ff..91c2249e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -481,6 +481,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 cfeea82b..2ffe163e 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_URING_PARAMS + # ifdef HAVE_STRUCT_IO_URING_PARAMS_RESV +@@ -88,10 +89,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 317b0d7a..a59e4a1a 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<anon_inode:[io_uring]>\n", rc); + } +diff --git a/types/io_uring.h b/types/io_uring.h +index 76f432c3..2fe1c13a 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.h b/xlat/uring_cqring_flags.h +new file mode 100644 +index 00000000..7c06c35c +--- /dev/null ++++ b/xlat/uring_cqring_flags.h +@@ -0,0 +1,48 @@ ++/* Generated by ./gen.sh from ./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 */ +diff --git a/xlat/uring_cqring_flags.in b/xlat/uring_cqring_flags.in +new file mode 100644 +index 00000000..c81fbc20 +--- /dev/null ++++ b/xlat/uring_cqring_flags.in +@@ -0,0 +1 @@ ++IORING_CQ_EVENTFD_DISABLED 1U +-- +2.28.0 + diff --git a/pkg/strace/ver b/pkg/strace/ver @@ -1 +1 @@ -5.7 r0 +5.7 r1