diff --git a/00343-faulthandler-gcc10.patch b/00343-faulthandler-gcc10.patch new file mode 100644 index 0000000..199dcd7 --- /dev/null +++ b/00343-faulthandler-gcc10.patch @@ -0,0 +1,64 @@ +commit 5044c889dfced2f43e2cccb673d889a4882f6b3b +Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> +Date: Wed Dec 4 12:29:22 2019 -0800 + + bpo-38965: Fix faulthandler._stack_overflow() on GCC 10 (GH-17467) + + Use the "volatile" keyword to prevent tail call optimization + on any compiler, rather than relying on compiler specific pragma. + (cherry picked from commit 8b787964e0a647caa0558b7c29ae501470d727d9) + + Co-authored-by: Victor Stinner + +commit ac827edc493d3ac3f5b9b0cc353df1d4b418a9aa +Author: Victor Stinner +Date: Wed Aug 14 23:35:27 2019 +0200 + + bpo-21131: Fix faulthandler.register(chain=True) stack (GH-15276) + + faulthandler now allocates a dedicated stack of SIGSTKSZ*2 bytes, + instead of just SIGSTKSZ bytes. Calling the previous signal handler + in faulthandler signal handler uses more than SIGSTKSZ bytes of stack + memory on some platforms. + +diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c +index 56285b6..a682ffa 100644 +--- a/Modules/faulthandler.c ++++ b/Modules/faulthandler.c +@@ -952,18 +952,15 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args) + } + + #if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION) +-#ifdef __INTEL_COMPILER +- /* Issue #23654: Turn off ICC's tail call optimization for the +- * stack_overflow generator. ICC turns the recursive tail call into +- * a loop. */ +-# pragma intel optimization_level 0 +-#endif + static + Py_uintptr_t + stack_overflow(Py_uintptr_t min_sp, Py_uintptr_t max_sp, size_t *depth) + { +- /* allocate 4096 bytes on the stack at each call */ +- unsigned char buffer[4096]; ++ /* Allocate (at least) 4096 bytes on the stack at each call. ++ ++ bpo-23654, bpo-38965: use volatile keyword to prevent tail call ++ optimization. */ ++ volatile unsigned char buffer[4096]; + Py_uintptr_t sp = (Py_uintptr_t)&buffer; + *depth += 1; + if (sp < min_sp || max_sp < sp) +@@ -1146,7 +1143,11 @@ int _PyFaulthandler_Init(void) + * be able to allocate memory on the stack, even on a stack overflow. If it + * fails, ignore the error. */ + stack.ss_flags = 0; +- stack.ss_size = SIGSTKSZ; ++ /* bpo-21131: allocate dedicated stack of SIGSTKSZ*2 bytes, instead of just ++ SIGSTKSZ bytes. Calling the previous signal handler in faulthandler ++ signal handler uses more than SIGSTKSZ bytes of stack memory on some ++ platforms. */ ++ stack.ss_size = SIGSTKSZ * 2; + stack.ss_sp = PyMem_Malloc(stack.ss_size); + if (stack.ss_sp != NULL) { + err = sigaltstack(&stack, &old_stack); diff --git a/python35.spec b/python35.spec index f7d52c4..e025bfb 100644 --- a/python35.spec +++ b/python35.spec @@ -407,6 +407,17 @@ Patch290: 00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1652843 Patch315: 00315-test_email-mktime.patch +# 00343 # +# bpo-38965: Fix faulthandler._stack_overflow() on GCC 10 +# Fixed upstream and backported from the 3.7 branch: +# https://bugs.python.org/issue38965 +# https://github.com/python/cpython/commit/f4a21d3b239bf4f4e4e2a8a5936b9b040645b246 +# +# bpo-21131: Fix faulthandler.register(chain=True) stack (GH-15276) +# https://bugs.python.org/issue21131 +# https://github.com/python/cpython/commit/ac827edc493d3ac3f5b9b0cc353df1d4b418a9aa +Patch343: 00343-faulthandler-gcc10.patch + # (New patches go here ^^^) # # When adding new patches to "python" and "python3" in Fedora, EL, etc., @@ -532,6 +543,7 @@ rmdir Lib/ensurepip/_bundled %patch273 -p1 %patch290 -p1 %patch315 -p1 +%patch343 -p1 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there # are many differences between 2.6 and the Python 3 library.