From b24796c292c8c5347993e99581f165f4a6a55baf Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 13 Apr 2021 16:05:34 +0100 Subject: [PATCH] Add patch to fix build with rawhide glibc 2.33.9000 See the patch for information on why examples/ucontext-cp.c does not build with rawhide's glibc 2.33.9000. I sent this patch upstream to liburing and notified glibc of a potential incompatible change. Signed-off-by: Stefan Hajnoczi --- ...ext-cp.c-cope-with-variable-SIGSTKSZ.patch | 82 +++++++++++++++++++ liburing.spec | 1 + 2 files changed, 83 insertions(+) create mode 100644 0003-examples-ucontext-cp.c-cope-with-variable-SIGSTKSZ.patch diff --git a/0003-examples-ucontext-cp.c-cope-with-variable-SIGSTKSZ.patch b/0003-examples-ucontext-cp.c-cope-with-variable-SIGSTKSZ.patch new file mode 100644 index 0000000..3bb745f --- /dev/null +++ b/0003-examples-ucontext-cp.c-cope-with-variable-SIGSTKSZ.patch @@ -0,0 +1,82 @@ +From 595b858eb0576d70884337a61ace3d98a411b949 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 13 Apr 2021 15:45:52 +0100 +Subject: [PATCH] examples/ucontext-cp.c: cope with variable SIGSTKSZ +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The size of C arrays at file scope must be constant. The following +compiler error occurs with recent upstream glibc (2.33.9000): + + CC ucontext-cp + ucontext-cp.c:31:23: error: variably modified ‘stack_buf’ at file scope + 31 | unsigned char stack_buf[SIGSTKSZ]; + | ^~~~~~~~~ + make[1]: *** [Makefile:26: ucontext-cp] Error 1 + +The following glibc commit changed SIGSTKSZ from a constant value to a +variable: + + commit 6c57d320484988e87e446e2e60ce42816bf51d53 + Author: H.J. Lu + Date: Mon Feb 1 11:00:38 2021 -0800 + + sysconf: Add _SC_MINSIGSTKSZ/_SC_SIGSTKSZ [BZ #20305] + ... + +# define SIGSTKSZ sysconf (_SC_SIGSTKSZ) + +Allocate the stack buffer explicitly to avoid declaring an array at file +scope. + +Cc: H.J. Lu +Signed-off-by: Stefan Hajnoczi +--- +Perhaps the glibc change needs to be revised before releasing glibc 2.34 +since it might break applications. That's up to the glibc folks. It +doesn't hurt for liburing to take a safer approach that copes with the +SIGSTKSZ change in any case. +--- + examples/ucontext-cp.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/examples/ucontext-cp.c b/examples/ucontext-cp.c +index 0b2a6b5..ea0c934 100644 +--- a/examples/ucontext-cp.c ++++ b/examples/ucontext-cp.c +@@ -28,7 +28,7 @@ + + typedef struct { + struct io_uring *ring; +- unsigned char stack_buf[SIGSTKSZ]; ++ unsigned char *stack_buf; + ucontext_t ctx_main, ctx_fnew; + } async_context; + +@@ -115,8 +115,13 @@ static int setup_context(async_context *pctx, struct io_uring *ring) + perror("getcontext"); + return -1; + } +- pctx->ctx_fnew.uc_stack.ss_sp = &pctx->stack_buf; +- pctx->ctx_fnew.uc_stack.ss_size = sizeof(pctx->stack_buf); ++ pctx->stack_buf = malloc(SIGSTKSZ); ++ if (!pctx->stack_buf) { ++ perror("malloc"); ++ return -1; ++ } ++ pctx->ctx_fnew.uc_stack.ss_sp = pctx->stack_buf; ++ pctx->ctx_fnew.uc_stack.ss_size = SIGSTKSZ; + pctx->ctx_fnew.uc_link = &pctx->ctx_main; + + return 0; +@@ -174,6 +179,7 @@ static void copy_file_wrapper(arguments_bundle *pbundle) + free(iov.iov_base); + close(pbundle->infd); + close(pbundle->outfd); ++ free(pbundle->pctx->stack_buf); + free(pbundle->pctx); + free(pbundle); + +-- +2.30.2 + diff --git a/liburing.spec b/liburing.spec index 675cd6d..9f9bd7b 100644 --- a/liburing.spec +++ b/liburing.spec @@ -10,6 +10,7 @@ BuildRequires: gcc BuildRequires: make Patch1: 0001-spec-bump-version-to-2.0.patch Patch2: 0002-spec-add-explicit-build-dependency-on-make.patch +Patch3: 0003-examples-ucontext-cp.c-cope-with-variable-SIGSTKSZ.patch %description Provides native async IO for the Linux kernel, in a fast and efficient