From 2c0280ba085893984007706fb40c7b291f43074d Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 27 May 2019 20:59:19 -0400 Subject: improve the stack check CLI options See #2526 --- src/main.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 934c998435..cbfd946899 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -55,7 +55,8 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) { " --disable-gen-h do not generate a C header file (.h)\n" " --disable-valgrind omit valgrind client requests in debug builds\n" " --enable-valgrind include valgrind client requests release builds\n" - " --disable-stack-probing workaround for macosx\n" + " -fstack-check enable stack probing in unsafe builds\n" + " -fno-stack-check disable stack probing in safe builds\n" " --emit [asm|bin|llvm-ir] emit a specific file format as compilation output\n" " -fPIC enable Position Independent Code\n" " -fno-PIC disable Position Independent Code\n" @@ -443,12 +444,12 @@ int main(int argc, char **argv) { bool want_single_threaded = false; bool disable_gen_h = false; bool bundle_compiler_rt = false; - bool disable_stack_probing = false; Buf *override_std_dir = nullptr; Buf *override_lib_dir = nullptr; Buf *main_pkg_path = nullptr; ValgrindSupport valgrind_support = ValgrindSupportAuto; WantPIC want_pic = WantPICAuto; + WantStackCheck want_stack_check = WantStackCheckAuto; ZigList llvm_argv = {0}; llvm_argv.append("zig (LLVM option parsing)"); @@ -648,6 +649,10 @@ int main(int argc, char **argv) { want_pic = WantPICEnabled; } else if (strcmp(arg, "-fno-PIC") == 0) { want_pic = WantPICDisabled; + } else if (strcmp(arg, "-fstack-check") == 0) { + want_stack_check = WantStackCheckEnabled; + } else if (strcmp(arg, "-fno-stack-check") == 0) { + want_stack_check = WantStackCheckDisabled; } else if (strcmp(arg, "--system-linker-hack") == 0) { system_linker_hack = true; } else if (strcmp(arg, "--single-threaded") == 0) { @@ -656,8 +661,6 @@ int main(int argc, char **argv) { disable_gen_h = true; } else if (strcmp(arg, "--bundle-compiler-rt") == 0) { bundle_compiler_rt = true; - } else if (strcmp(arg, "--disable-stack-probing") == 0) { - disable_stack_probing = true; } else if (strcmp(arg, "--test-cmd-bin") == 0) { test_exec_args.append(nullptr); } else if (arg[1] == 'L' && arg[2] != 0) { @@ -953,6 +956,7 @@ int main(int argc, char **argv) { out_type, build_mode, override_lib_dir, override_std_dir, nullptr, nullptr); g->valgrind_support = valgrind_support; g->want_pic = want_pic; + g->want_stack_check = want_stack_check; g->want_single_threaded = want_single_threaded; Buf *builtin_source = codegen_generate_builtin_source(g); if (fwrite(buf_ptr(builtin_source), 1, buf_len(builtin_source), stdout) != buf_len(builtin_source)) { @@ -1048,6 +1052,7 @@ int main(int argc, char **argv) { if (llvm_argv.length >= 2) codegen_set_llvm_argv(g, llvm_argv.items + 1, llvm_argv.length - 2); g->valgrind_support = valgrind_support; g->want_pic = want_pic; + g->want_stack_check = want_stack_check; g->subsystem = subsystem; g->enable_time_report = timing_info; @@ -1074,7 +1079,6 @@ int main(int argc, char **argv) { g->output_dir = output_dir; g->disable_gen_h = disable_gen_h; g->bundle_compiler_rt = bundle_compiler_rt; - g->disable_stack_probing = disable_stack_probing; codegen_set_errmsg_color(g, color); g->system_linker_hack = system_linker_hack; -- cgit v1.2.3 From a169d844c70a8e2a6e29be639b4d0a1c26df0662 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Wed, 22 May 2019 22:14:53 +0200 Subject: Warn the user if run/test is paired with emit options --- src/main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index cbfd946899..4ebd93563f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -985,6 +985,9 @@ int main(int argc, char **argv) { { fprintf(stderr, "Expected source file argument.\n"); return print_error_usage(arg0); + } else if (cmd == CmdRun && emit_file_type != EmitFileTypeBinary) { + fprintf(stderr, "Cannot run non-executable file.\n"); + return print_error_usage(arg0); } assert(cmd != CmdBuild || out_type != OutTypeUnknown); @@ -1189,6 +1192,12 @@ int main(int argc, char **argv) { Buf *test_exe_path = buf_alloc(); *test_exe_path = os_path_resolve(&test_exe_path_unresolved, 1); + if (emit_file_type != EmitFileTypeBinary) { + fprintf(stderr, "Created %s but skipping execution because it is non executable.\n", + buf_ptr(test_exe_path)); + return 0; + } + for (size_t i = 0; i < test_exec_args.length; i += 1) { if (test_exec_args.items[i] == nullptr) { test_exec_args.items[i] = buf_ptr(test_exe_path); -- cgit v1.2.3 From 9a7cf73b3b4fd27f5f251143dd0b50ea90ed338f Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 29 May 2019 18:18:18 -0400 Subject: main: set subsystem in `zig builtin` when explicitly provided --- src/main.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 4ebd93563f..29c17212cf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -954,6 +954,7 @@ int main(int argc, char **argv) { case CmdBuiltin: { CodeGen *g = codegen_create(main_pkg_path, nullptr, &target, out_type, build_mode, override_lib_dir, override_std_dir, nullptr, nullptr); + g->subsystem = subsystem; g->valgrind_support = valgrind_support; g->want_pic = want_pic; g->want_stack_check = want_stack_check; -- cgit v1.2.3