diff options
Diffstat (limited to 'unix/main.c')
-rw-r--r-- | unix/main.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/unix/main.c b/unix/main.c index 03902a3e9..4ba68dcb9 100644 --- a/unix/main.c +++ b/unix/main.c @@ -376,7 +376,19 @@ STATIC void set_sys_argv(char *argv[], int argc, int start_arg) { #define PATHLIST_SEP_CHAR ':' #endif +MP_NOINLINE int main_(int argc, char **argv); + int main(int argc, char **argv) { + // We should capture stack top ASAP after start, and it should be + // captured guaranteedly before any other stack variables are allocated. + // For this, actual main (renamed main_) should not be inlined into + // this function. main_() itself may have other functions inlined (with + // their own stack variables), that's why we need this main/main_ split. + mp_stack_ctrl_init(); + return main_(argc, argv); +} + +MP_NOINLINE int main_(int argc, char **argv) { mp_stack_set_limit(40000 * (BYTES_PER_WORD / 4)); pre_process_options(argc, argv); |