summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/SConscript17
-rw-r--r--src/python/importer.py12
-rw-r--r--src/sim/init.cc3
-rw-r--r--src/sim/init.hh1
4 files changed, 23 insertions, 10 deletions
diff --git a/src/SConscript b/src/SConscript
index 51616701b..5879fbc93 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -929,12 +929,17 @@ def pythonInit(target, source, env):
dst = file(str(target[0]), 'w')
def dump_mod(sym, endchar=','):
+ def c_str(string):
+ if string is None:
+ return "0"
+ return '"%s"' % string
pysource = PySource.symnames[sym]
- print >>dst, ' { "%s",' % pysource.arcname
- print >>dst, ' "%s",' % pysource.modpath
- print >>dst, ' %s_beg, %s_end,' % (sym, sym)
- print >>dst, ' %s_end - %s_beg,' % (sym, sym)
- print >>dst, ' *(int *)%s_end }%s' % (sym, endchar)
+ print >>dst, ' { %s,' % c_str(pysource.arcname)
+ print >>dst, ' %s,' % c_str(pysource.abspath)
+ print >>dst, ' %s,' % c_str(pysource.modpath)
+ print >>dst, ' %s_beg, %s_end,' % (sym, sym)
+ print >>dst, ' %s_end - %s_beg,' % (sym, sym)
+ print >>dst, ' *(int *)%s_end }%s' % (sym, endchar)
print >>dst, '#include "sim/init.hh"'
@@ -953,7 +958,7 @@ def pythonInit(target, source, env):
# Skip the importer since we've already exported it
continue
dump_mod(sym)
- print >>dst, " { 0, 0, 0, 0, 0, 0 }"
+ print >>dst, " { 0, 0, 0, 0, 0, 0, 0 }"
print >>dst, "};"
diff --git a/src/python/importer.py b/src/python/importer.py
index fe099fdb8..4e364873f 100644
--- a/src/python/importer.py
+++ b/src/python/importer.py
@@ -33,11 +33,11 @@ class CodeImporter(object):
def __init__(self):
self.modules = {}
- def add_module(self, filename, modpath, code):
+ def add_module(self, filename, abspath, modpath, code):
if modpath in self.modules:
raise AttributeError, "%s already found in importer"
- self.modules[modpath] = (filename, code)
+ self.modules[modpath] = (filename, abspath, code)
def find_module(self, fullname, path):
if fullname in self.modules:
@@ -59,7 +59,13 @@ class CodeImporter(object):
try:
mod.__loader__ = self
- srcfile,code = self.modules[fullname]
+ srcfile,abspath,code = self.modules[fullname]
+
+ override = os.environ.get('M5_OVERRIDE_PY_SOURCE', 'false').lower()
+ if override in ('true', 'yes') and os.path.exists(abspath):
+ src = file(abspath, 'r').read()
+ code = compile(src, abspath, 'exec')
+
if os.path.basename(srcfile) == '__init__.py':
mod.__path__ = fullname.split('.')
mod.__file__ = srcfile
diff --git a/src/sim/init.cc b/src/sim/init.cc
index 8057c9369..1ec09369d 100644
--- a/src/sim/init.cc
+++ b/src/sim/init.cc
@@ -154,7 +154,8 @@ initM5Python()
while (pymod->filename) {
PyObject *code = getCode(pymod);
PyObject *result = PyObject_CallMethod(module, PyCC("add_module"),
- PyCC("ssO"), pymod->filename, pymod->modpath, code);
+ PyCC("sssO"), pymod->filename, pymod->abspath, pymod->modpath,
+ code);
if (!result) {
PyErr_Print();
return 1;
diff --git a/src/sim/init.hh b/src/sim/init.hh
index b0f29bf30..76cdcb74e 100644
--- a/src/sim/init.hh
+++ b/src/sim/init.hh
@@ -37,6 +37,7 @@
struct EmbeddedPyModule
{
const char *filename;
+ const char *abspath;
const char *modpath;
const char *code;
const char *code_end;