aboutsummaryrefslogtreecommitdiffstats
path: root/passes/abc
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2013-03-17 09:17:18 +0100
committerClifford Wolf <clifford@clifford.at>2013-03-17 09:17:18 +0100
commit1390de4b749e922ff9d7d5b8694aee532a6d28d0 (patch)
treeb875ff4f8898ab0ce24ceb4b7f321b6adc195e38 /passes/abc
parente6cbeb5b16b8bf422c9cc7fe9aaff3fb2fc86d7f (diff)
downloadyosys-1390de4b749e922ff9d7d5b8694aee532a6d28d0.tar.gz
yosys-1390de4b749e922ff9d7d5b8694aee532a6d28d0.tar.bz2
yosys-1390de4b749e922ff9d7d5b8694aee532a6d28d0.zip
Cleaned up ABC file/io error handling
Diffstat (limited to 'passes/abc')
-rw-r--r--passes/abc/abc.cc28
1 files changed, 13 insertions, 15 deletions
diff --git a/passes/abc/abc.cc b/passes/abc/abc.cc
index 04d7ac67d..e8f0a1449 100644
--- a/passes/abc/abc.cc
+++ b/passes/abc/abc.cc
@@ -332,7 +332,8 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
tempdir_name[0] = tempdir_name[4] = '_';
char *p = mkdtemp(tempdir_name);
log_header("Extracting gate logic of module `%s' to `%s/input.v'..\n", module->name.c_str(), tempdir_name);
- assert(p != NULL);
+ if (p == NULL)
+ log_error("For some reason mkdtemp() failed!\n");
std::vector<RTLIL::Cell*> cells;
cells.reserve(module->cells.size());
@@ -355,7 +356,8 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
if (asprintf(&p, "%s/input.v", tempdir_name) < 0) abort();
FILE *f = fopen(p, "wt");
- assert(f != NULL);
+ if (f == NULL);
+ log_error("Opening %s for writing failed: %s\n", p, strerrno(errno));
free(p);
fprintf(f, "module logic (");
@@ -418,7 +420,8 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
if (asprintf(&p, "%s/stdcells.genlib", tempdir_name) < 0) abort();
f = fopen(p, "wt");
- assert(f != NULL);
+ if (f == NULL);
+ log_error("Opening %s for writing failed: %s\n", p, strerrno(errno));
fprintf(f, "GATE ZERO 1 Y=CONST0;\n");
fprintf(f, "GATE ONE 1 Y=CONST1;\n");
fprintf(f, "GATE BUF 1 Y=A; PIN * NONINV 1 999 1 0 1 0\n");
@@ -443,25 +446,20 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
"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);
- }
+ if (f == NULL)
+ log_error("Opening pipe to `%s' for reading failed: %s\n", buffer, strerrno(errno));
while (fgets(buffer, 1024, f) != NULL)
log("ABC: %s", buffer);
errno = 0;
int ret = pclose(f);
- if (ret < 0) {
- log("ABC: pclose failed: %d, %s\n",errno,sys_errlist[errno]);
- assert(0);
- }
+ if (ret < 0)
+ log_error("Closing pipe to `%s' failed: %s\n", buffer, strerrno(errno));
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;
+ case 127: log_error("ABC: execution of command \"%s\" failed: Command not found\n", exe_file.c_str()); break;
+ case 126: log_error("ABC: execution of command \"%s\" failed: Command not executable\n", exe_file.c_str()); break;
+ default: log_error("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();