summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChun-Chen TK Hsu <chunchenhsu@google.com>2019-09-06 19:57:15 +0800
committerChun-Chen TK Hsu <chunchenhsu@google.com>2019-09-10 10:01:24 +0000
commitebc1caf9e818d046a18919209a2afee55a37caf1 (patch)
tree18080fad4d0406bdd42195fe5d707fec078c55c1
parent946250181a9561fb80a8bd36e9c16b69ba1667ef (diff)
downloadgem5-ebc1caf9e818d046a18919209a2afee55a37caf1.tar.xz
stats: Ignore non-Group objects in stat hierarchy
Some objects, such as SystemC modules, are not a subclass of Stat::Group. Calling the addStatGroup function on them causes errors. This changes ignores those objects that are not Stat::Group in the stat hierarchy. Signed-off-by: Chun-Chen TK Hsu <chunchenhsu@google.com> Change-Id: I9b62419417b7af7331461fbfaf15e45a4ee2b35f Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20680 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
-rw-r--r--src/python/m5/stats/__init__.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/python/m5/stats/__init__.py b/src/python/m5/stats/__init__.py
index 77ed5e8de..4b118ea13 100644
--- a/src/python/m5/stats/__init__.py
+++ b/src/python/m5/stats/__init__.py
@@ -257,7 +257,19 @@ def _bindStatHierarchy(root):
for idx, obj in enumerate(obj):
_bind_obj("{}{}".format(name, idx), obj)
else:
- root.addStatGroup(name, obj.getCCObject())
+ # We need this check because not all obj.getCCObject() is an
+ # instance of Stat::Group. For example, sc_core::sc_module, the C++
+ # class of SystemC_ScModule, is not a subclass of Stat::Group. So
+ # it will cause a type error if obj is a SystemC_ScModule when
+ # calling addStatGroup().
+ if isinstance(obj.getCCObject(), _m5.stats.Group):
+ parent = root
+ while parent:
+ if hasattr(parent, 'addStatGroup'):
+ parent.addStatGroup(name, obj.getCCObject())
+ break
+ parent = parent.get_parent();
+
_bindStatHierarchy(obj)
for name, obj in root._children.items():