summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/unix/main.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/ports/unix/main.c b/ports/unix/main.c
index e33c1742d..a5db0869d 100644
--- a/ports/unix/main.c
+++ b/ports/unix/main.c
@@ -451,7 +451,13 @@ MP_NOINLINE int main_(int argc, char **argv) {
signal(SIGPIPE, SIG_IGN);
#endif
- mp_stack_set_limit(40000 * (sizeof(void *) / 4));
+ // Define a reasonable stack limit to detect stack overflow.
+ mp_uint_t stack_limit = 40000 * (sizeof(void *) / 4);
+ #if defined(__arm__) && !defined(__thumb2__)
+ // ARM (non-Thumb) architectures require more stack.
+ stack_limit *= 2;
+ #endif
+ mp_stack_set_limit(stack_limit);
pre_process_options(argc, argv);