From: Sascha Bischoff Date: Fri, 11 Dec 2015 17:29:53 +0000 (+0000) Subject: sim: Add additional debug information when draining X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=38a369c473a8c4b53116806fb50797ab73e7442e;p=gem5.git 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. --- 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(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");