diff options
| author | Angus Gratton <angus@redyak.com.au> | 2025-08-06 10:20:57 +1000 |
|---|---|---|
| committer | Angus Gratton <angus@redyak.com.au> | 2025-08-19 10:33:40 +1000 |
| commit | d8672f4cde83c0a5632f9e6ac5a55eb68fed64f9 (patch) | |
| tree | bede31b12b8c34a6dd841227bf2cf664c117cf5a /ports/unix/mpthreadport.c | |
| parent | 3faf2298537ee34648d27a662529ff2aa73cec1c (diff) | |
unix: Increase stack sizes if running with sanitizers.
The specific problem seems to be that the runtime "Python stack frame"
function call is several times more expensive in stack usage when running
with UBSan on older GCC (observed on gcc 11.4 as used in CI, would get
'RuntimeError: maximum recursion depth exceeded' when running some tests
with UBSan enabled.)
Other stack usage (i.e. from pushing things on the stack in Python) stays
the same. Whatever causes the usage seems to be mostly gone in later GCC
versions.
Includes a refactor to apply the same stack size multipliers
for the default thread stack size same as the main stack size.
This goes in a new port-specific header as it depends on macros
in misc.h, so can't be in mpconfigport.h.
A side effect of this is that the default thread stack size is
now doubled on ARM, same as the main stack size.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
Diffstat (limited to 'ports/unix/mpthreadport.c')
| -rw-r--r-- | ports/unix/mpthreadport.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/ports/unix/mpthreadport.c b/ports/unix/mpthreadport.c index 141cd0218..a41b3ec9f 100644 --- a/ports/unix/mpthreadport.c +++ b/ports/unix/mpthreadport.c @@ -31,6 +31,7 @@ #include "py/runtime.h" #include "py/mpthread.h" #include "py/gc.h" +#include "stack_size.h" #if MICROPY_PY_THREAD @@ -244,9 +245,9 @@ void mp_thread_start(void) { } mp_uint_t mp_thread_create(void *(*entry)(void *), void *arg, size_t *stack_size) { - // default stack size is 8k machine-words + // default stack size if (*stack_size == 0) { - *stack_size = 8192 * sizeof(void *); + *stack_size = 32768 * UNIX_STACK_MULTIPLIER; } // minimum stack size is set by pthreads |
