summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2004-02-29 19:29:30 -0500
committerNathan Binkert <binkertn@umich.edu>2004-02-29 19:29:30 -0500
commit45f377bcd8c07b100aacc2de07023c836af04174 (patch)
tree2daa723d06dc172a97a8976fcd8e9e2d38bb3f91 /base
parent2272164d6652c554fb3bab7bddfd0d53151e4115 (diff)
downloadgem5-45f377bcd8c07b100aacc2de07023c836af04174.tar.xz
more debugging support
base/trace.cc: code to set/clear/print trace flags from the debugger. --HG-- extra : convert_revision : f2a549e9af05c4a177186b9f1792a0493ce15c95
Diffstat (limited to 'base')
-rw-r--r--base/trace.cc63
1 files changed, 63 insertions, 0 deletions
diff --git a/base/trace.cc b/base/trace.cc
index cca58d669..e56bdb11b 100644
--- a/base/trace.cc
+++ b/base/trace.cc
@@ -319,3 +319,66 @@ echoTrace(bool on)
}
}
}
+
+extern "C"
+void
+printTraceFlags()
+{
+ using namespace Trace;
+ for (int i = 0; i < numFlagStrings; ++i)
+ if (flags[i])
+ cprintf("%s\n", flagStrings[i]);
+}
+
+void
+tweakTraceFlag(const char *string, bool value)
+{
+ using namespace Trace;
+ std::string str(string);
+
+ for (int i = 0; i < numFlagStrings; ++i) {
+ if (str != flagStrings[i])
+ continue;
+
+ int idx = i;
+
+ if (idx < NumFlags) {
+ flags[idx] = value;
+ } else {
+ idx -= NumFlags;
+ if (idx >= NumCompoundFlags) {
+ ccprintf(cerr, "Invalid compound flag");
+ return;
+ }
+
+ const Flags *flagVec = compoundFlags[idx];
+
+ for (int j = 0; flagVec[j] != -1; ++j) {
+ if (flagVec[j] >= NumFlags) {
+ ccprintf(cerr, "Invalid compound flag");
+ return;
+ }
+ flags[flagVec[j]] = value;
+ }
+ }
+
+ cprintf("flag %s was %s\n", string, value ? "set" : "cleared");
+ return;
+ }
+
+ cprintf("could not find flag %s\n", string);
+}
+
+extern "C"
+void
+setTraceFlag(const char *string)
+{
+ tweakTraceFlag(string, true);
+}
+
+extern "C"
+void
+clearTraceFlag(const char *string)
+{
+ tweakTraceFlag(string, false);
+}