changeset 20bbfe5b2b86 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=20bbfe5b2b86
description:
base: remove Trace::enabled flag
The DTRACE() macro tests both Trace::enabled and the specific flag. This
change uses the same administrative interface for enabling/disabling
tracing, but masks the SimpleFlags settings directly. This eliminates a
load for every DTRACE() test, e.g. DPRINTF.
diffstat:
src/base/debug.cc | 26 ++++++++++++++++++++++----
src/base/debug.hh | 31 +++++++++++++++++++++----------
src/base/trace.cc | 15 +++++++++++++--
src/base/trace.hh | 7 ++++---
src/cpu/exetrace.hh | 3 ---
src/cpu/inst_pb_trace.cc | 4 ++--
src/cpu/inteltrace.hh | 3 ---
src/python/m5/trace.py | 4 ++--
src/python/swig/trace.i | 6 ++++--
util/cxx_config/main.cc | 2 +-
util/systemc/main.cc | 2 +-
util/systemc/sc_gem5_control.cc | 2 +-
util/tlm/main.cc | 2 +-
13 files changed, 72 insertions(+), 35 deletions(-)
diffs (truncated from 312 to 300 lines):
diff -r 11da02681277 -r 20bbfe5b2b86 src/base/debug.cc
--- a/src/base/debug.cc Wed Sep 30 11:14:19 2015 -0500
+++ b/src/base/debug.cc Wed Sep 30 15:21:55 2015 -0500
@@ -68,6 +68,8 @@
return flags;
}
+bool SimpleFlag::_active = false;
+
Flag *
findFlag(const std::string &name)
{
@@ -95,17 +97,33 @@
}
void
+SimpleFlag::enableAll()
+{
+ _active = true;
+ for (auto& i : allFlags())
+ i.second->sync();
+}
+
+void
+SimpleFlag::disableAll()
+{
+ _active = false;
+ for (auto& i : allFlags())
+ i.second->sync();
+}
+
+void
CompoundFlag::enable()
{
- SimpleFlag::enable();
- for_each(_kids.begin(), _kids.end(), mem_fun(&Flag::enable));
+ for (auto& k : _kids)
+ k->enable();
}
void
CompoundFlag::disable()
{
- SimpleFlag::disable();
- for_each(_kids.begin(), _kids.end(), mem_fun(&Flag::disable));
+ for (auto& k : _kids)
+ k->disable();
}
struct AllFlags : public Flag
diff -r 11da02681277 -r 20bbfe5b2b86 src/base/debug.hh
--- a/src/base/debug.hh Wed Sep 30 11:14:19 2015 -0500
+++ b/src/base/debug.hh Wed Sep 30 15:21:55 2015 -0500
@@ -45,7 +45,6 @@
protected:
const char *_name;
const char *_desc;
- std::vector<Flag *> _kids;
public:
Flag(const char *name, const char *desc);
@@ -53,33 +52,43 @@
std::string name() const { return _name; }
std::string desc() const { return _desc; }
- std::vector<Flag *> kids() { return _kids; }
+ virtual std::vector<Flag *> kids() { return std::vector<Flag*>(); }
virtual void enable() = 0;
virtual void disable() = 0;
+ virtual void sync() {}
};
class SimpleFlag : public Flag
{
+ static bool _active; // whether debug tracings are enabled
protected:
- bool _status;
+ bool _tracing; // tracing is enabled and flag is on
+ bool _status; // flag status
public:
SimpleFlag(const char *name, const char *desc)
: Flag(name, desc), _status(false)
{ }
- bool status() const { return _status; }
- operator bool() const { return _status; }
- bool operator!() const { return !_status; }
+ bool status() const { return _tracing; }
+ operator bool() const { return _tracing; }
+ bool operator!() const { return !_tracing; }
- void enable() { _status = true; }
- void disable() { _status = false; }
+ void enable() { _status = true; sync(); }
+ void disable() { _status = false; sync(); }
+
+ void sync() { _tracing = _active && _status; }
+
+ static void enableAll();
+ static void disableAll();
};
-class CompoundFlag : public SimpleFlag
+class CompoundFlag : public Flag
{
protected:
+ std::vector<Flag *> _kids;
+
void
addFlag(Flag *f)
{
@@ -99,7 +108,7 @@
Flag *f14 = nullptr, Flag *f15 = nullptr,
Flag *f16 = nullptr, Flag *f17 = nullptr,
Flag *f18 = nullptr, Flag *f19 = nullptr)
- : SimpleFlag(name, desc)
+ : Flag(name, desc)
{
addFlag(f00); addFlag(f01); addFlag(f02); addFlag(f03); addFlag(f04);
addFlag(f05); addFlag(f06); addFlag(f07); addFlag(f08); addFlag(f09);
@@ -107,6 +116,8 @@
addFlag(f15); addFlag(f16); addFlag(f17); addFlag(f18); addFlag(f19);
}
+ std::vector<Flag *> kids() { return _kids; }
+
void enable();
void disable();
};
diff -r 11da02681277 -r 20bbfe5b2b86 src/base/trace.cc
--- a/src/base/trace.cc Wed Sep 30 11:14:19 2015 -0500
+++ b/src/base/trace.cc Wed Sep 30 15:21:55 2015 -0500
@@ -39,6 +39,7 @@
#include <sstream>
#include <string>
+#include "base/debug.hh"
#include "base/misc.hh"
#include "base/output.hh"
#include "base/str.hh"
@@ -54,8 +55,6 @@
namespace Trace
{
-bool enabled = false;
-
// This variable holds the output logger for debug information. Other
// than setting up/redirecting this logger, do *NOT* reference this
// directly
@@ -87,6 +86,18 @@
debug_logger = logger;
}
+void
+enable()
+{
+ Debug::SimpleFlag::enableAll();
+}
+
+void
+disable()
+{
+ Debug::SimpleFlag::disableAll();
+}
+
ObjectMatch ignore;
void
diff -r 11da02681277 -r 20bbfe5b2b86 src/base/trace.hh
--- a/src/base/trace.hh Wed Sep 30 11:14:19 2015 -0500
+++ b/src/base/trace.hh Wed Sep 30 15:21:55 2015 -0500
@@ -116,8 +116,9 @@
/** Delete the current global logger and assign a new one */
void setDebugLogger(Logger *logger);
-/** Enable debug logging */
-extern bool enabled;
+/** Enable/disable debug logging */
+void enable();
+void disable();
} // namespace Trace
@@ -160,7 +161,7 @@
#if TRACING_ON
-#define DTRACE(x) ((Debug::x) && Trace::enabled)
+#define DTRACE(x) (Debug::x)
#define DDUMP(x, data, count) do { \
using namespace Debug; \
diff -r 11da02681277 -r 20bbfe5b2b86 src/cpu/exetrace.hh
--- a/src/cpu/exetrace.hh Wed Sep 30 11:14:19 2015 -0500
+++ b/src/cpu/exetrace.hh Wed Sep 30 15:21:55 2015 -0500
@@ -75,9 +75,6 @@
if (!Debug::ExecEnable)
return NULL;
- if (!Trace::enabled)
- return NULL;
-
return new ExeTracerRecord(when, tc,
staticInst, pc, macroStaticInst);
}
diff -r 11da02681277 -r 20bbfe5b2b86 src/cpu/inst_pb_trace.cc
--- a/src/cpu/inst_pb_trace.cc Wed Sep 30 11:14:19 2015 -0500
+++ b/src/cpu/inst_pb_trace.cc Wed Sep 30 15:21:55 2015 -0500
@@ -123,8 +123,8 @@
InstPBTrace::getInstRecord(Tick when, ThreadContext *tc, const StaticInstPtr
si,
TheISA::PCState pc, const StaticInstPtr mi)
{
- // Only record the trace if Exec debugging in enabled
- if (!Trace::enabled || !Debug::ExecEnable)
+ // Only record the trace if Exec debugging is enabled
+ if (!Debug::ExecEnable)
return NULL;
return new InstPBTraceRecord(*this, when, tc, si, pc, mi);
diff -r 11da02681277 -r 20bbfe5b2b86 src/cpu/inteltrace.hh
--- a/src/cpu/inteltrace.hh Wed Sep 30 11:14:19 2015 -0500
+++ b/src/cpu/inteltrace.hh Wed Sep 30 15:21:55 2015 -0500
@@ -71,9 +71,6 @@
if (!Debug::ExecEnable)
return NULL;
- if (!Trace::enabled)
- return NULL;
-
return new IntelTraceRecord(when, tc, staticInst, pc, macroStaticInst);
}
};
diff -r 11da02681277 -r 20bbfe5b2b86 src/python/m5/trace.py
--- a/src/python/m5/trace.py Wed Sep 30 11:14:19 2015 -0500
+++ b/src/python/m5/trace.py Wed Sep 30 15:21:55 2015 -0500
@@ -32,7 +32,7 @@
from internal.trace import output, ignore
def disable():
- internal.trace.cvar.enabled = False
+ internal.trace.disable()
def enable():
- internal.trace.cvar.enabled = True
+ internal.trace.enable()
diff -r 11da02681277 -r 20bbfe5b2b86 src/python/swig/trace.i
--- a/src/python/swig/trace.i Wed Sep 30 11:14:19 2015 -0500
+++ b/src/python/swig/trace.i Wed Sep 30 15:21:55 2015 -0500
@@ -54,9 +54,11 @@
Trace::getDebugLogger()->setIgnore(ignore);
}
-using Trace::enabled;
+inline void enable() { Trace::enable(); }
+inline void disable() { Trace::disable(); }
%}
extern void output(const char *string);
extern void ignore(const char *expr);
-extern bool enabled;
+extern void enable();
+extern void disable();
diff -r 11da02681277 -r 20bbfe5b2b86 util/cxx_config/main.cc
--- a/util/cxx_config/main.cc Wed Sep 30 11:14:19 2015 -0500
+++ b/util/cxx_config/main.cc Wed Sep 30 15:21:55 2015 -0500
@@ -117,7 +117,7 @@
Stats::initSimStats();
Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
- Trace::enabled = true;
+ Trace::enable();
setDebugFlag("Terminal");
// setDebugFlag("CxxConfig");
diff -r 11da02681277 -r 20bbfe5b2b86 util/systemc/main.cc
--- a/util/systemc/main.cc Wed Sep 30 11:14:19 2015 -0500
+++ b/util/systemc/main.cc Wed Sep 30 15:21:55 2015 -0500
@@ -162,7 +162,7 @@
Stats::initSimStats();
Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
- Trace::enabled = true;
+ Trace::enable();
setDebugFlag("Terminal");
checkpoint_restore = false;
diff -r 11da02681277 -r 20bbfe5b2b86 util/systemc/sc_gem5_control.cc
--- a/util/systemc/sc_gem5_control.cc Wed Sep 30 11:14:19 2015 -0500
+++ b/util/systemc/sc_gem5_control.cc Wed Sep 30 15:21:55 2015 -0500
@@ -241,7 +241,7 @@
Stats::initSimStats();
Stats::registerHandlers(CxxConfig::statsReset, CxxConfig::statsDump);
- Trace::enabled = true;
+ Trace::enable();
config_file = new CxxIniFile();
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev