diff --git a/src/link.cpp b/src/link.cpp index 72997b4156..0f27cee9ab 100644 --- a/src/link.cpp +++ b/src/link.cpp @@ -2101,9 +2101,10 @@ static void construct_linker_job_wasm(LinkJob *lj) { lj->args.append("-error-limit=0"); // Increase the default stack size to a more reasonable value of 1MB instead of - // the default of 1 Wasm page being 64KB. + // the default of 1 Wasm page being 64KB, unless overriden by the user. + size_t stack_size = (g->stack_size_override == 0) ? 1048576 : g->stack_size_override; lj->args.append("-z"); - lj->args.append("stack-size=1048576"); + lj->args.append(buf_ptr(buf_sprintf("stack-size=%" ZIG_PRI_usize, stack_size))); if (g->out_type != OutTypeExe) { lj->args.append("--no-entry"); // So lld doesn't look for _start. diff --git a/src/main.cpp b/src/main.cpp index 41aade9431..6d5f1f3f76 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -126,6 +126,7 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) { " -l[lib] alias for --library\n" " -rdynamic add all symbols to the dynamic symbol table\n" " -rpath [path] add directory to the runtime library search path\n" + " --stack [size] (linux, windows, Wasm) override default stack size\n" " --subsystem [subsystem] (windows) /SUBSYSTEM: to the linker\n" " -F[dir] (darwin) add search path for frameworks\n" " -framework [name] (darwin) link against framework\n" @@ -1231,6 +1232,8 @@ static int main0(int argc, char **argv) { ver_patch = atoi(argv[i]); } else if (strcmp(arg, "--test-cmd") == 0) { test_exec_args.append(argv[i]); + } else if (strcmp(arg, "--stack") == 0) { + stack_size_override = atoi(argv[i]); } else if (strcmp(arg, "--subsystem") == 0) { if (strcmp(argv[i], "console") == 0) { subsystem = TargetSubsystemConsole;