From eb83111f0258ee41af021091bb78b3b5e5f6f3d3 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 7 May 2016 19:58:02 -0700 Subject: add debug safety for division See #149 --- src/link.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/link.cpp') diff --git a/src/link.cpp b/src/link.cpp index c7c4b2bb68..a2fab50373 100644 --- a/src/link.cpp +++ b/src/link.cpp @@ -821,17 +821,23 @@ void codegen_link(CodeGen *g, const char *out_file) { fprintf(stderr, "\n"); } - int return_code; Buf ld_stderr = BUF_INIT; Buf ld_stdout = BUF_INIT; - int err = os_exec_process(buf_ptr(g->linker_path), lj.args, &return_code, &ld_stderr, &ld_stdout); + Termination term; + int err = os_exec_process(buf_ptr(g->linker_path), lj.args, &term, &ld_stderr, &ld_stdout); if (err) { fprintf(stderr, "linker not found: '%s'\n", buf_ptr(g->linker_path)); exit(1); } - if (return_code != 0) { - fprintf(stderr, "linker failed with return code %d\n", return_code); + if (term.how != TerminationIdClean || term.code != 0) { + if (term.how == TerminationIdClean) { + fprintf(stderr, "linker failed with return code %d\n", term.code); + } else if (term.how == TerminationIdSignaled) { + fprintf(stderr, "linker failed with signal %d\n", term.code); + } else { + fprintf(stderr, "linker failed\n"); + } fprintf(stderr, "%s ", buf_ptr(g->linker_path)); for (int i = 0; i < lj.args.length; i += 1) { fprintf(stderr, "%s ", lj.args.at(i)); -- cgit v1.2.3