more debugging support
authorNathan Binkert <binkertn@umich.edu>
Mon, 1 Mar 2004 00:29:30 +0000 (19:29 -0500)
committerNathan Binkert <binkertn@umich.edu>
Mon, 1 Mar 2004 00:29:30 +0000 (19:29 -0500)
base/trace.cc:
    code to set/clear/print trace flags from the debugger.

--HG--
extra : convert_revision : f2a549e9af05c4a177186b9f1792a0493ce15c95

base/trace.cc

index cca58d669fd7dce790bff53df47ec7482efc96e7..e56bdb11b450dba96ec331794a37c4b8b19e0a9e 100644 (file)
@@ -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);
+}