thrnciar / rpms / python36

Forked from rpms/python36 4 years ago
Clone

Blame 00343-faulthandler-gcc10.patch

Victor Stinner 4cbb173
commit 5044c889dfced2f43e2cccb673d889a4882f6b3b
Victor Stinner 4cbb173
Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Victor Stinner 4cbb173
Date:   Wed Dec 4 12:29:22 2019 -0800
Victor Stinner 4cbb173
Victor Stinner 4cbb173
    bpo-38965: Fix faulthandler._stack_overflow() on GCC 10 (GH-17467)
Victor Stinner 4cbb173
Victor Stinner 4cbb173
    Use the "volatile" keyword to prevent tail call optimization
Victor Stinner 4cbb173
    on any compiler, rather than relying on compiler specific pragma.
Victor Stinner 4cbb173
    (cherry picked from commit 8b787964e0a647caa0558b7c29ae501470d727d9)
Victor Stinner 4cbb173
Victor Stinner 4cbb173
    Co-authored-by: Victor Stinner <vstinner@python.org>
Victor Stinner 4cbb173
Victor Stinner 4cbb173
commit ac827edc493d3ac3f5b9b0cc353df1d4b418a9aa
Victor Stinner 4cbb173
Author: Victor Stinner <vstinner@redhat.com>
Victor Stinner 4cbb173
Date:   Wed Aug 14 23:35:27 2019 +0200
Victor Stinner 4cbb173
Victor Stinner 4cbb173
    bpo-21131: Fix faulthandler.register(chain=True) stack (GH-15276)
Victor Stinner 4cbb173
Victor Stinner 4cbb173
    faulthandler now allocates a dedicated stack of SIGSTKSZ*2 bytes,
Victor Stinner 4cbb173
    instead of just SIGSTKSZ bytes. Calling the previous signal handler
Victor Stinner 4cbb173
    in faulthandler signal handler uses more than SIGSTKSZ bytes of stack
Victor Stinner 4cbb173
    memory on some platforms.
Victor Stinner 4cbb173
Victor Stinner 4cbb173
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
Victor Stinner 4cbb173
index 890c645..fac662a 100644
Victor Stinner 4cbb173
--- a/Modules/faulthandler.c
Victor Stinner 4cbb173
+++ b/Modules/faulthandler.c
Victor Stinner 4cbb173
@@ -1091,18 +1091,14 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args)
Victor Stinner 4cbb173
 #if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)
Victor Stinner 4cbb173
 #define FAULTHANDLER_STACK_OVERFLOW
Victor Stinner 4cbb173
Victor Stinner 4cbb173
-#ifdef __INTEL_COMPILER
Victor Stinner 4cbb173
-   /* Issue #23654: Turn off ICC's tail call optimization for the
Victor Stinner 4cbb173
-    * stack_overflow generator. ICC turns the recursive tail call into
Victor Stinner 4cbb173
-    * a loop. */
Victor Stinner 4cbb173
-#  pragma intel optimization_level 0
Victor Stinner 4cbb173
-#endif
Victor Stinner 4cbb173
-static
Victor Stinner 4cbb173
-uintptr_t
Victor Stinner 4cbb173
+static uintptr_t
Victor Stinner 4cbb173
 stack_overflow(uintptr_t min_sp, uintptr_t max_sp, size_t *depth)
Victor Stinner 4cbb173
 {
Victor Stinner 4cbb173
-    /* allocate 4096 bytes on the stack at each call */
Victor Stinner 4cbb173
-    unsigned char buffer[4096];
Victor Stinner 4cbb173
+    /* Allocate (at least) 4096 bytes on the stack at each call.
Victor Stinner 4cbb173
+
Victor Stinner 4cbb173
+       bpo-23654, bpo-38965: use volatile keyword to prevent tail call
Victor Stinner 4cbb173
+       optimization. */
Victor Stinner 4cbb173
+    volatile unsigned char buffer[4096];
Victor Stinner 4cbb173
     uintptr_t sp = (uintptr_t)&buffer;
Victor Stinner 4cbb173
     *depth += 1;
Victor Stinner 4cbb173
     if (sp < min_sp || max_sp < sp)
Victor Stinner 4cbb173
@@ -1333,7 +1329,11 @@ int _PyFaulthandler_Init(void)
Victor Stinner 4cbb173
      * be able to allocate memory on the stack, even on a stack overflow. If it
Victor Stinner 4cbb173
      * fails, ignore the error. */
Victor Stinner 4cbb173
     stack.ss_flags = 0;
Victor Stinner 4cbb173
-    stack.ss_size = SIGSTKSZ;
Victor Stinner 4cbb173
+    /* bpo-21131: allocate dedicated stack of SIGSTKSZ*2 bytes, instead of just
Victor Stinner 4cbb173
+       SIGSTKSZ bytes. Calling the previous signal handler in faulthandler
Victor Stinner 4cbb173
+       signal handler uses more than SIGSTKSZ bytes of stack memory on some
Victor Stinner 4cbb173
+       platforms. */
Victor Stinner 4cbb173
+    stack.ss_size = SIGSTKSZ * 2;
Victor Stinner 4cbb173
     stack.ss_sp = PyMem_Malloc(stack.ss_size);
Victor Stinner 4cbb173
     if (stack.ss_sp != NULL) {
Victor Stinner 4cbb173
         err = sigaltstack(&stack, &old_stack);