summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSascha Bischoff <sascha.bischoff@arm.com>2015-12-11 17:29:53 +0000
committerSascha Bischoff <sascha.bischoff@arm.com>2015-12-11 17:29:53 +0000
commit38a369c473a8c4b53116806fb50797ab73e7442e (patch)
tree5478aeca243f6f887ed70675202a22243d8606e9
parentebc9e1d426f7dbe13b63d87afbdf8507265f8040 (diff)
downloadgem5-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.
-rw-r--r--src/sim/drain.cc12
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");