/*
- * Copyright (c) 2000-2005 The Regents of The University of Michigan
+ * Copyright (c) 2008 The Hewlett-Packard Development Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
*/
#include <Python.h>
-#include <signal.h>
-#include <iostream>
-#include <string>
-
-#include "base/cprintf.hh"
-#include "base/misc.hh"
-#include "config/pythonhome.hh"
-#include "python/swig/init.hh"
-#include "sim/async.hh"
-#include "sim/host.hh"
-#include "sim/root.hh"
-
-using namespace std;
-
-/// Stats signal handler.
-void
-dumpStatsHandler(int sigtype)
-{
- async_event = true;
- async_statdump = true;
-}
-
-void
-dumprstStatsHandler(int sigtype)
-{
- async_event = true;
- async_statdump = true;
- async_statreset = true;
-}
-
-/// Exit signal handler.
-void
-exitNowHandler(int sigtype)
-{
- async_event = true;
- async_exit = true;
-}
-
-/// Abort signal handler.
-void
-abortHandler(int sigtype)
-{
- ccprintf(cerr, "Program aborted at cycle %d\n", curTick);
-}
+#include "sim/init.hh"
+#include "sim/init_signals.hh"
+// main() is now pretty stripped down and just sets up python and then
+// calls initM5Python which loads the various embedded python modules
+// into the python environment and then starts things running by
+// calling m5Main.
int
main(int argc, char **argv)
{
- signal(SIGFPE, SIG_IGN); // may occur on misspeculated paths
- signal(SIGTRAP, SIG_IGN);
- signal(SIGUSR1, dumpStatsHandler); // dump intermediate stats
- signal(SIGUSR2, dumprstStatsHandler); // dump and reset stats
- signal(SIGINT, exitNowHandler); // dump final stats and exit
- signal(SIGABRT, abortHandler);
+ int ret;
- Py_SetProgramName(argv[0]);
-
- // default path to m5 python code is the currently executing
- // file... Python ZipImporter will find embedded zip archive.
- // The M5_ARCHIVE environment variable can be used to override this.
- char *m5_archive = getenv("M5_ARCHIVE");
- string pythonpath = m5_archive ? m5_archive : argv[0];
+ // Initialize m5 special signal handling.
+ initSignals();
- char *oldpath = getenv("PYTHONPATH");
- if (oldpath != NULL) {
- pythonpath += ":";
- pythonpath += oldpath;
- }
-
- if (setenv("PYTHONPATH", pythonpath.c_str(), true) == -1)
- fatal("setenv: %s\n", strerror(errno));
-
- char *python_home = getenv("PYTHONHOME");
- if (!python_home)
- python_home = PYTHONHOME;
- Py_SetPythonHome(python_home);
+ Py_SetProgramName(argv[0]);
// initialize embedded Python interpreter
Py_Initialize();
- PySys_SetArgv(argc, argv);
- // initialize SWIG modules
- init_swig();
+ // Initialize the embedded m5 python library
+ ret = initM5Python();
- PyRun_SimpleString("import m5.main");
- PyRun_SimpleString("m5.main.main()");
+ if (ret == 0) {
+ // start m5
+ ret = m5Main(argc, argv);
+ }
// clean up Python intepreter.
Py_Finalize();
+
+ return ret;
}