diff options
author | Sascha Bischoff <sascha.bischoff@arm.com> | 2015-12-11 17:29:53 +0000 |
---|---|---|
committer | Sascha Bischoff <sascha.bischoff@arm.com> | 2015-12-11 17:29:53 +0000 |
commit | 38a369c473a8c4b53116806fb50797ab73e7442e (patch) | |
tree | 5478aeca243f6f887ed70675202a22243d8606e9 /src/sim | |
parent | ebc9e1d426f7dbe13b63d87afbdf8507265f8040 (diff) | |
download | gem5-38a369c473a8c4b53116806fb50797ab73e7442e.tar.xz |
sim: Add additional debug information when draining
This patch adds some additional information when draining the system which
allows the user to debug which SimObject(s) in the system is failing to drain.
Only enabled for the builds with tracing enabled and is subject to the Drain
debug flag being set at runtime.
Diffstat (limited to 'src/sim')
-rw-r--r-- | src/sim/drain.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/sim/drain.cc b/src/sim/drain.cc index c60734876..085f781dc 100644 --- a/src/sim/drain.cc +++ b/src/sim/drain.cc @@ -43,6 +43,7 @@ #include "base/trace.hh" #include "debug/Drain.hh" #include "sim/sim_exit.hh" +#include "sim/sim_object.hh" DrainManager DrainManager::_instance; @@ -67,8 +68,15 @@ DrainManager::tryDrain() DPRINTF(Drain, "Trying to drain %u objects.\n", drainableCount()); _state = DrainState::Draining; - for (auto *obj : _allDrainable) - _count += obj->dmDrain() == DrainState::Drained ? 0 : 1; + for (auto *obj : _allDrainable) { + DrainState status = obj->dmDrain(); + if (DTRACE(Drain) && status != DrainState::Drained) { + SimObject *temp = dynamic_cast<SimObject*>(obj); + if (temp) + DPRINTF(Drain, "Failed to drain %s\n", temp->name()); + } + _count += status == DrainState::Drained ? 0 : 1; + } if (_count == 0) { DPRINTF(Drain, "Drain done.\n"); |