From 499a1cc7e813ca6eee54f5e1a11fdd984adcbfb7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Carvalho" Date: Sun, 21 Mar 2021 16:00:57 -0300 Subject: [PATCH] base-stats,mem: Fix empty Stats::Info names Sub-groups should not contain empty names. To make sure that is the case, generate tokens even if the string is empty. Before the name 'group1..group2' would generate 2 tokens: 'group1' and 'group2'. As such, validateStatName would not be able to detect it was an invalid name. With this change three tokens will be generated: 'group1', '', and 'group2'. The empty string will then trigger the item->empty() check, which will successfully inform that such stat name is not valid. SLICC was breaking this rule with one of its stats by creating a sub-group (inTransLatHist) whose parent had an empty name, so it has been fixed. Change-Id: Ica5ca684911374d59a0a809636594d048d755deb Signed-off-by: Daniel R. Carvalho Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/43590 Reviewed-by: Giacomo Travaglini Maintainer: Giacomo Travaglini Tested-by: kokoro --- src/base/stats/info.cc | 2 +- src/mem/slicc/symbols/StateMachine.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base/stats/info.cc b/src/base/stats/info.cc index c6024e7d84..de1fb7f811 100644 --- a/src/base/stats/info.cc +++ b/src/base/stats/info.cc @@ -86,7 +86,7 @@ validateStatName(const std::string &name) return false; std::vector vec; - tokenize(vec, name, '.'); + tokenize(vec, name, '.', false); std::vector::const_iterator item = vec.begin(); while (item != vec.end()) { if (item->empty()) diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py index 77c999d70e..0c4651dad7 100644 --- a/src/mem/slicc/symbols/StateMachine.py +++ b/src/mem/slicc/symbols/StateMachine.py @@ -870,7 +870,7 @@ $c_ident::regStats() for (${ident}_Event event = ${ident}_Event_FIRST; event < ${ident}_Event_NUM; ++event) { - std::string stat_name = ".inTransLatHist." + + std::string stat_name = "inTransLatHist." + ${ident}_Event_to_string(event); statistics::Scalar* r = new statistics::Scalar(&stats, (stat_name + ".total").c_str());