diff options
author | Nathan Binkert <nate@binkert.org> | 2007-08-04 16:00:36 -0700 |
---|---|---|
committer | Nathan Binkert <nate@binkert.org> | 2007-08-04 16:00:36 -0700 |
commit | d8900d8478d86789d1120f11c9918d65a456d96e (patch) | |
tree | 550d3b9c0fb275fd8977c570aa8fe37513d8294e /src/sim/main.cc | |
parent | e8e1ddd5305c4f7d4764f2cd28f70f911a29806f (diff) | |
download | gem5-d8900d8478d86789d1120f11c9918d65a456d96e.tar.xz |
main: return an an exit code of 1 when we exit due to a python exception.
This requires us to not use PyRun_SimpleString, but PyRun_String since the
latter actually returns a result
--HG--
extra : convert_revision : 3e3916ddd7eef9957569d8e72e73ba4c3160ce20
Diffstat (limited to 'src/sim/main.cc')
-rw-r--r-- | src/sim/main.cc | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/src/sim/main.cc b/src/sim/main.cc index 5bf4add4b..62ab9445b 100644 --- a/src/sim/main.cc +++ b/src/sim/main.cc @@ -76,6 +76,39 @@ abortHandler(int sigtype) } int +python_main() +{ + PyObject *module; + PyObject *dict; + PyObject *result; + + module = PyImport_AddModule("__main__"); + if (module == NULL) + fatal("Could not import __main__"); + + dict = PyModule_GetDict(module); + + result = PyRun_String("import m5.main", Py_file_input, dict, dict); + if (!result) { + PyErr_Print(); + return 1; + } + Py_DECREF(result); + + result = PyRun_String("m5.main.main()", Py_file_input, dict, dict); + if (!result) { + PyErr_Print(); + return 1; + } + Py_DECREF(result); + + if (Py_FlushLine()) + PyErr_Clear(); + + return 0; +} + +int main(int argc, char **argv) { signal(SIGFPE, SIG_IGN); // may occur on misspeculated paths @@ -114,9 +147,10 @@ main(int argc, char **argv) // initialize SWIG modules init_swig(); - PyRun_SimpleString("import m5.main"); - PyRun_SimpleString("m5.main.main()"); + int ret = python_main(); // clean up Python intepreter. Py_Finalize(); + + return ret; } |