summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/python/m5/SimObject.py17
-rw-r--r--src/python/m5/params.py9
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"