From ebc1caf9e818d046a18919209a2afee55a37caf1 Mon Sep 17 00:00:00 2001 From: Chun-Chen TK Hsu Date: Fri, 6 Sep 2019 19:57:15 +0800 Subject: 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 Change-Id: I9b62419417b7af7331461fbfaf15e45a4ee2b35f Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20680 Reviewed-by: Jason Lowe-Power Reviewed-by: Andreas Sandberg Maintainer: Jason Lowe-Power Maintainer: Andreas Sandberg Tested-by: kokoro --- src/python/m5/stats/__init__.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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(): -- cgit v1.2.3