diff options
author | Johann Glaser <Johann.Glaser@gmx.at> | 2013-03-16 22:04:55 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2013-03-17 09:06:03 +0100 |
commit | 0cb4a5936f92f0a526b4082a3cd52b3d98bae2fb (patch) | |
tree | d893f78fa8c99a2c0e50d4b3d9395510468b8705 /passes | |
parent | fb494d4dd74b1b372f01d0f80329b4b467fcd2d4 (diff) | |
download | yosys-0cb4a5936f92f0a526b4082a3cd52b3d98bae2fb.tar.gz yosys-0cb4a5936f92f0a526b4082a3cd52b3d98bae2fb.tar.bz2 yosys-0cb4a5936f92f0a526b4082a3cd52b3d98bae2fb.zip |
added error checking at execution of ABC
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'passes')
-rw-r--r-- | passes/abc/abc.cc | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/passes/abc/abc.cc b/passes/abc/abc.cc index c2c03e4a5..04d7ac67d 100644 --- a/passes/abc/abc.cc +++ b/passes/abc/abc.cc @@ -441,10 +441,28 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std else snprintf(buffer, 1024, "%s -c 'read_verilog %s/input.v; read_library %s/stdcells.genlib; " "map; write_verilog %s/output.v' 2>&1", exe_file.c_str(), tempdir_name, tempdir_name, tempdir_name); + errno = ENOMEM; // popen does not set errno if memory allocation fails, therefore set it by hand f = popen(buffer, "r"); + if (!f) { + log("ABC: popen failed: %d, %s\n",errno,sys_errlist[errno]); + assert(0); + } while (fgets(buffer, 1024, f) != NULL) log("ABC: %s", buffer); - fclose(f); + errno = 0; + int ret = pclose(f); + if (ret < 0) { + log("ABC: pclose failed: %d, %s\n",errno,sys_errlist[errno]); + assert(0); + } + if (WEXITSTATUS(ret) != 0) { + switch (WEXITSTATUS(ret)) { + case 127: log("ABC: execution of command \"%s\" failed: Command not found\n",exe_file.c_str()); break; + case 126: log("ABC: execution of command \"%s\" failed: Command not executable\n",exe_file.c_str()); break; + default: log("ABC: execution of command \"%s\" failed: the shell returned %d\n",exe_file.c_str(),WEXITSTATUS(ret)); break; + } + assert(0); + } if (asprintf(&p, "%s/output.v", tempdir_name) < 0) abort(); f = fopen(p, "rt"); |