base: add the --debug-flag to DPRINTF output with FmtFlag
authorCiro Santilli <ciro.santilli@arm.com>
Tue, 8 Oct 2019 13:31:47 +0000 (14:31 +0100)
committerCiro Santilli <ciro.santilli@arm.com>
Tue, 26 Nov 2019 12:46:59 +0000 (12:46 +0000)
This makes it easier to determine which messages come from which
flags when enabling multiple flags at once.

This commit covers the bulk of the debug messages, which use the DPRINTF*
family of macros. There however macros that use DTRACE to check for
enable, those will be covered in future patches.

Change-Id: I6738b18f08ccfd1e11f2874b426c1827b42e82a2
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22004
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/base/SConscript
src/base/trace.cc
src/base/trace.hh
util/systemc/gem5_within_systemc/sc_logger.cc
util/systemc/gem5_within_systemc/sc_logger.hh

index fe92b43875c67c960a32b7c22a6021fe5986c3b0..5bf0633a97d82a341e82e484e2b81e8146f4bf28 100644 (file)
@@ -111,6 +111,7 @@ GTest('chunk_generator.test', 'chunk_generator.test.cc')
 DebugFlag('Annotate', "State machine annotation debugging")
 DebugFlag('AnnotateQ', "State machine annotation queue debugging")
 DebugFlag('AnnotateVerbose', "Dump all state machine annotation details")
+DebugFlag('FmtFlag', "Show the --debug-flag that enabled each debug message")
 DebugFlag('GDBAcc', "Remote debugger accesses")
 DebugFlag('GDBExtra', "Dump extra information on reads and writes")
 DebugFlag('GDBMisc', "Breakpoints, traps, watchpoints, etc.")
index 06f9eeb2157d36fc7623b8f7ff58b26dff2f46ad..c7f338bf55d7f0aad6171668a5f601c192403387 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 ARM Limited
+ * Copyright (c) 2014, 2019 ARM Limited
  * All rights reserved
  *
  * Copyright (c) 2001-2006 The Regents of The University of Michigan
@@ -45,6 +45,7 @@
 #include "base/logging.hh"
 #include "base/output.hh"
 #include "base/str.hh"
+#include "debug/FmtFlag.hh"
 
 const std::string &name()
 {
@@ -101,8 +102,10 @@ disable()
 
 ObjectMatch ignore;
 
+
 void
-Logger::dump(Tick when, const std::string &name, const void *d, int len)
+Logger::dump(Tick when, const std::string &name,
+         const void *d, int len, const std::string &flag)
 {
     if (!name.empty() && ignore.match(name))
         return;
@@ -133,7 +136,7 @@ Logger::dump(Tick when, const std::string &name, const void *d, int len)
         }
 
         ccprintf(line, "\n");
-        logMessage(when, name, line.str());
+        logMessage(when, name, flag, line.str());
 
         if (c < 16)
             break;
@@ -142,7 +145,7 @@ Logger::dump(Tick when, const std::string &name, const void *d, int len)
 
 void
 OstreamLogger::logMessage(Tick when, const std::string &name,
-                          const std::string &message)
+        const std::string &flag, const std::string &message)
 {
     if (!name.empty() && ignore.match(name))
         return;
@@ -150,6 +153,9 @@ OstreamLogger::logMessage(Tick when, const std::string &name,
     if (when != MaxTick)
         ccprintf(stream, "%7d: ", when);
 
+    if (DTRACE(FmtFlag) && !flag.empty())
+        stream << flag << ": ";
+
     if (!name.empty())
         stream << name << ": ";
 
index 4af413321e1ad8542c030f079f9f8344ce356241..0fe798ec6242a314b5c28fba186e21d36f5c0a14 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 ARM Limited
+ * Copyright (c) 2014, 2019 ARM Limited
  * All rights reserved
  *
  * Copyright (c) 2001-2006 The Regents of The University of Michigan
@@ -59,22 +59,30 @@ class Logger
     template <typename ...Args>
     void dprintf(Tick when, const std::string &name, const char *fmt,
                  const Args &...args)
+    {
+        dprintf_flag(when, name, "", fmt, args...);
+    }
+
+    /** Log a single message with a flag prefix. */
+    template <typename ...Args>
+    void dprintf_flag(Tick when, const std::string &name,
+            const std::string &flag,
+            const char *fmt, const Args &...args)
     {
         if (!name.empty() && ignore.match(name))
             return;
-
         std::ostringstream line;
         ccprintf(line, fmt, args...);
-        logMessage(when, name, line.str());
+        logMessage(when, name, flag, line.str());
     }
 
     /** Dump a block of data of length len */
-    virtual void dump(Tick when, const std::string &name,
-                      const void *d, int len);
+    void dump(Tick when, const std::string &name,
+            const void *d, int len, const std::string &flag);
 
     /** Log formatted message */
     virtual void logMessage(Tick when, const std::string &name,
-                            const std::string &message) = 0;
+            const std::string &flag, const std::string &message) = 0;
 
     /** Return an ostream that can be used to send messages to
      *  the 'same place' as formatted logMessage messages.  This
@@ -104,7 +112,7 @@ class OstreamLogger : public Logger
     { }
 
     void logMessage(Tick when, const std::string &name,
-                    const std::string &message) override;
+            const std::string &flag, const std::string &message) override;
 
     std::ostream &getOstream() override { return stream; }
 };
@@ -166,46 +174,47 @@ class Named
 
 #define DTRACE(x) (Debug::x)
 
-#define DDUMP(x, data, count) do {                                        \
-    using namespace Debug;                                                \
-    if (DTRACE(x))                                                        \
-        Trace::getDebugLogger()->dump(curTick(), name(), data, count);    \
+#define DDUMP(x, data, count) do {               \
+    using namespace Debug;                       \
+    if (DTRACE(x))                               \
+        Trace::getDebugLogger()->dump(           \
+            curTick(), name(), data, count, #x); \
 } while (0)
 
-#define DPRINTF(x, ...) do {                                              \
-    using namespace Debug;                                                \
-    if (DTRACE(x)) {                                                      \
-        Trace::getDebugLogger()->dprintf(curTick(), name(),               \
-            __VA_ARGS__);                                                 \
-    }                                                                     \
+#define DPRINTF(x, ...) do {                     \
+    using namespace Debug;                       \
+    if (DTRACE(x)) {                             \
+        Trace::getDebugLogger()->dprintf_flag(   \
+            curTick(), name(), #x, __VA_ARGS__); \
+    }                                            \
 } while (0)
 
-#define DPRINTFS(x, s, ...) do {                                          \
-    using namespace Debug;                                                \
-    if (DTRACE(x)) {                                                      \
-        Trace::getDebugLogger()->dprintf(curTick(), s->name(),            \
-            __VA_ARGS__);                                                 \
-    }                                                                     \
+#define DPRINTFS(x, s, ...) do {                        \
+    using namespace Debug;                              \
+    if (DTRACE(x)) {                                    \
+        Trace::getDebugLogger()->dprintf_flag(          \
+                curTick(), s->name(), #x, __VA_ARGS__); \
+    }                                                   \
 } while (0)
 
-#define DPRINTFR(x, ...) do {                                             \
-    using namespace Debug;                                                \
-    if (DTRACE(x)) {                                                      \
-        Trace::getDebugLogger()->dprintf((Tick)-1, std::string(),         \
-            __VA_ARGS__);                                                 \
-    }                                                                     \
+#define DPRINTFR(x, ...) do {                          \
+    using namespace Debug;                             \
+    if (DTRACE(x)) {                                   \
+        Trace::getDebugLogger()->dprintf_flag(         \
+            (Tick)-1, std::string(), #x, __VA_ARGS__); \
+    }                                                  \
 } while (0)
 
-#define DDUMPN(data, count) do {                                          \
-    Trace::getDebugLogger()->dump(curTick(), name(), data, count);        \
+#define DDUMPN(data, count) do {                                       \
+    Trace::getDebugLogger()->dump(curTick(), name(), data, count);     \
 } while (0)
 
-#define DPRINTFN(...) do {                                                \
-    Trace::getDebugLogger()->dprintf(curTick(), name(), __VA_ARGS__);     \
+#define DPRINTFN(...) do {                                             \
+    Trace::getDebugLogger()->dprintf(curTick(), name(), __VA_ARGS__);  \
 } while (0)
 
-#define DPRINTFNR(...) do {                                               \
-    Trace::getDebugLogger()->dprintf((Tick)-1, std::string(), __VA_ARGS__);  \
+#define DPRINTFNR(...) do {                                                 \
+    Trace::getDebugLogger()->dprintf((Tick)-1, std::string(), __VA_ARGS__); \
 } while (0)
 
 #else // !TRACING_ON
index a8b9020f4039083b161e6b5f13ab57fbc7506090..195a0cbafa20e7da2a734df836842bcf848360ce 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 ARM Limited
+ * Copyright (c) 2014, 2019 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -79,7 +79,7 @@ class CuttingStreambuf : public std::streambuf
 
 void CuttingStreambuf::outputLine()
 {
-    logger->logMessage((Tick)-1, "gem5", line.str());
+    logger->logMessage((Tick)-1, "gem5", "", line.str());
     line.clear();
     line.str("");
 }
@@ -133,7 +133,7 @@ Logger::~Logger()
 /** Log a single message as a single sc_report call */
 void
 Logger::logMessage(Tick when, const std::string &name,
-    const std::string &message)
+    const std::string &flag, const std::string &message)
 {
     /* Need to chop the newline off the message */
     std::string message_without_nl = message;
index 4143f8bb84359c3cf32bc3579b17a507bd82bfb4..0f9c6a18f3c0831d97e95f722e1c530a421c8df4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 ARM Limited
+ * Copyright (c) 2014, 2019 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -70,7 +70,7 @@ class Logger : public Trace::Logger
 
     /** Log a single message as a single sc_report call */
     void logMessage(Tick when, const std::string &name,
-        const std::string &message);
+            const std::string &flag, const std::string &message) override;
 
     std::ostream &getOstream();
 };