summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/python/m5/SimObject.py11
-rw-r--r--src/python/m5/params.py10
-rw-r--r--tests/configs/rubytest-ruby.py2
3 files changed, 18 insertions, 5 deletions
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py
index 8e14b63d2..69f79ed61 100644
--- a/src/python/m5/SimObject.py
+++ b/src/python/m5/SimObject.py
@@ -761,13 +761,16 @@ class SimObject(object):
# children.
def getCCObject(self):
if not self._ccObject:
- # Cycles in the configuration heirarchy are not supported. This
+ # Make sure this object is in the configuration hierarchy
+ if not self._parent and not isRoot(self):
+ raise RuntimeError, "Attempt to instantiate orphan node"
+ # Cycles in the configuration hierarchy are not supported. This
# will catch the resulting recursion and stop.
self._ccObject = -1
params = self.getCCParams()
self._ccObject = params.create()
elif self._ccObject == -1:
- raise RuntimeError, "%s: Cycle found in configuration heirarchy." \
+ raise RuntimeError, "%s: Cycle found in configuration hierarchy." \
% self.path()
return self._ccObject
@@ -890,6 +893,10 @@ def isSimObjectSequence(value):
def isSimObjectOrSequence(value):
return isSimObject(value) or isSimObjectSequence(value)
+def isRoot(obj):
+ from m5.objects import Root
+ return obj and obj is Root.getInstance()
+
baseClasses = allClasses.copy()
baseInstances = instanceDict.copy()
diff --git a/src/python/m5/params.py b/src/python/m5/params.py
index cf64070c5..d9578e157 100644
--- a/src/python/m5/params.py
+++ b/src/python/m5/params.py
@@ -1049,8 +1049,14 @@ class PortRef(object):
peer = self.peer
if not self.peer: # nothing to connect to
return
- connectPorts(self.simobj.getCCObject(), self.name, self.index,
- peer.simobj.getCCObject(), peer.name, peer.index)
+ try:
+ connectPorts(self.simobj.getCCObject(), self.name, self.index,
+ peer.simobj.getCCObject(), peer.name, peer.index)
+ except:
+ print "Error connecting port %s.%s to %s.%s" % \
+ (self.simobj.path(), self.name,
+ peer.simobj.path(), peer.name)
+ raise
self.ccConnected = True
peer.ccConnected = True
diff --git a/tests/configs/rubytest-ruby.py b/tests/configs/rubytest-ruby.py
index 5bdfe39dd..ad217a140 100644
--- a/tests/configs/rubytest-ruby.py
+++ b/tests/configs/rubytest-ruby.py
@@ -70,7 +70,7 @@ execfile(os.path.join(config_root, "configs/common", "Options.py"))
#
tester = RubyTester(checks_to_complete = 100, wakeup_frequency = 10)
-system = System(physmem = PhysicalMemory())
+system = System(tester = tester, physmem = PhysicalMemory())
system.ruby = Ruby.create_system(options, system.physmem)