diff options
-rw-r--r-- | src/python/m5/SimObject.py | 11 | ||||
-rw-r--r-- | src/python/m5/params.py | 10 | ||||
-rw-r--r-- | tests/configs/rubytest-ruby.py | 2 |
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) |