diff options
Diffstat (limited to 'src/python')
-rw-r--r-- | src/python/m5/SimObject.py | 11 | ||||
-rw-r--r-- | src/python/m5/params.py | 10 |
2 files changed, 17 insertions, 4 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 |