]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-151546: Fix stack limits on musl (#151548) (#151583) (#151591)
authorVictor Stinner <vstinner@python.org>
Wed, 17 Jun 2026 09:41:24 +0000 (11:41 +0200)
committerGitHub <noreply@github.com>
Wed, 17 Jun 2026 09:41:24 +0000 (09:41 +0000)
[3.15] gh-151546: Fix stack limits on musl (#151548) (#151583)

gh-151546: Fix stack limits on musl (#151548)

If the thread stack size is set by linker flags, pass the stack size
to Python/ceval.c via the new _Py_LINKER_THREAD_STACK_SIZE variable
to set Py_C_STACK_SIZE macro.

(cherry picked from commit 9a61d1c0c8ebe21277c0a84abf6000049540464f)
(cherry picked from commit a5c5edddbc3ca7192c057f65fb3a8ff4ea360f96)

Misc/NEWS.d/next/Core_and_Builtins/2026-06-16-17-23-37.gh-issue-151546.LhiaZz.rst [new file with mode: 0644]
Python/ceval.c
configure
configure.ac
pyconfig.h.in

diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-06-16-17-23-37.gh-issue-151546.LhiaZz.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-16-17-23-37.gh-issue-151546.LhiaZz.rst
new file mode 100644 (file)
index 0000000..af1c23b
--- /dev/null
@@ -0,0 +1,3 @@
+Fix the stack limit check if Python is linked to musl (ex: Alpine Linux).
+Use the stack size set by the linker to compute the stack limits. Patch by
+Victor Stinner.
index 377b4644eddd2a848ddad1e99ee22e1525b93f67..b4fded923c10d3fcde1d00211418f1d4a424180b 100644 (file)
@@ -366,7 +366,9 @@ _Py_EnterRecursiveCallUnchecked(PyThreadState *tstate)
     }
 }
 
-#if defined(__s390x__)
+#if defined(_Py_LINKER_THREAD_STACK_SIZE)
+#  define Py_C_STACK_SIZE _Py_LINKER_THREAD_STACK_SIZE
+#elif defined(__s390x__)
 #  define Py_C_STACK_SIZE 320000
 #elif defined(_WIN32)
    // Don't define Py_C_STACK_SIZE, ask the O/S
index 055ecb3b97156ea9da0db00c63ce37ee0bc0a080..a03bca2e1f92cbd150159d5c81b38a3da0140fd9 100755 (executable)
--- a/configure
+++ b/configure
@@ -9839,6 +9839,10 @@ printf "%s\n" "$ac_cv_thread_stack_size" >&6; }
 
     if test "$ac_cv_thread_stack_size" != "default" -a "$ac_cv_thread_stack_size" != "unknown"; then
         LDFLAGS="$LDFLAGS -Wl,-z,stack-size=$ac_cv_thread_stack_size"
+        # Stack size used by Python/ceval.c to set Py_C_STACK_SIZE
+
+printf "%s\n" "#define _Py_LINKER_THREAD_STACK_SIZE $ac_cv_thread_stack_size" >>confdefs.h
+
     fi
 fi
 
index caf7e88d7f276058ca154801fc17f3495227bfdf..80a3854ce672ea9c78cecb21aa373fa8ade7d4f7 100644 (file)
@@ -2470,6 +2470,9 @@ EOF
 
     if test "$ac_cv_thread_stack_size" != "default" -a "$ac_cv_thread_stack_size" != "unknown"; then
         LDFLAGS="$LDFLAGS -Wl,-z,stack-size=$ac_cv_thread_stack_size"
+        # Stack size used by Python/ceval.c to set Py_C_STACK_SIZE
+        AC_DEFINE_UNQUOTED([_Py_LINKER_THREAD_STACK_SIZE], [$ac_cv_thread_stack_size],
+                  [Thread stack size set by the linker (in bytes).])
     fi
 fi
 
index 9502fcebf5d7802145dc43b53e7b0917fad6338c..3ed77cb7f0645493232dd8af95d009590bcf1c9a 100644 (file)
 /* HACL* library can compile SIMD256 implementations */
 #undef _Py_HACL_CAN_COMPILE_VEC256
 
+/* Thread stack size set by the linker (in bytes). */
+#undef _Py_LINKER_THREAD_STACK_SIZE
+
 /* Define to 1 if the machine stack grows down (default); 0 if it grows up. */
 #undef _Py_STACK_GROWS_DOWN