diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/python/m5/SimObject.py | 17 | ||||
-rw-r--r-- | src/python/m5/params.py | 9 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py index 05cb3bb54..fe0f1f606 100644 --- a/src/python/m5/SimObject.py +++ b/src/python/m5/SimObject.py @@ -931,6 +931,10 @@ class SimObject(object): d.type = self.type if hasattr(self, 'cxx_class'): d.cxx_class = self.cxx_class + # Add the name and path of this object to be able to link to + # the stats + d.name = self.get_name() + d.path = self.path() for param in sorted(self._params.keys()): value = self._values.get(param) @@ -949,15 +953,18 @@ class SimObject(object): pass for n in sorted(self._children.keys()): - d[self._children[n].get_name()] = self._children[n].get_config_as_dict() + child = self._children[n] + # Use the name of the attribute (and not get_name()) as + # the key in the JSON dictionary to capture the hierarchy + # in the Python code that assembled this system + d[n] = child.get_config_as_dict() for port_name in sorted(self._ports.keys()): port = self._port_refs.get(port_name, None) if port != None: - # Might want to actually make this reference the object - # in the future, although execing the string problem would - # get some of the way there - d[port_name] = port.ini_str() + # Represent each port with a dictionary containing the + # prominent attributes + d[port_name] = port.get_config_as_dict() return d diff --git a/src/python/m5/params.py b/src/python/m5/params.py index b7fa60782..3dcbecd2f 100644 --- a/src/python/m5/params.py +++ b/src/python/m5/params.py @@ -1363,6 +1363,10 @@ class PortRef(object): def ini_str(self): return str(self.peer) + # for config.json + def get_config_as_dict(self): + return {'role' : self.role, 'peer' : str(self.peer)} + def __getattr__(self, attr): if attr == 'peerObj': # shorthand for proxies @@ -1480,6 +1484,11 @@ class VectorPortRef(object): def ini_str(self): return ' '.join([el.ini_str() for el in self.elements]) + # for config.json + def get_config_as_dict(self): + return {'role' : self.role, + 'peer' : [el.ini_str() for el in self.elements]} + def __getitem__(self, key): if not isinstance(key, int): raise TypeError, "VectorPort index must be integer" |