main: return an an exit code of 1 when we exit due to a python exception.
authorNathan Binkert <nate@binkert.org>
Sat, 4 Aug 2007 23:00:36 +0000 (16:00 -0700)
committerNathan Binkert <nate@binkert.org>
Sat, 4 Aug 2007 23:00:36 +0000 (16:00 -0700)
This requires us to not use PyRun_SimpleString, but PyRun_String since the
latter actually returns a result

--HG--
extra : convert_revision : 3e3916ddd7eef9957569d8e72e73ba4c3160ce20

src/sim/main.cc

index 5bf4add4b47fd17f74d30f76aabaea099e98de84..62ab9445b3a32fa2f13249ad6337e64faa18c307 100644 (file)
@@ -75,6 +75,39 @@ abortHandler(int sigtype)
     ccprintf(cerr, "Program aborted at cycle %d\n", curTick);
 }
 
+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)
 {
@@ -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;
 }