diff options
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; } |