diff options
-rw-r--r-- | src/base/SConscript | 1 | ||||
-rw-r--r-- | src/base/trace.cc | 14 | ||||
-rw-r--r-- | src/base/trace.hh | 79 | ||||
-rw-r--r-- | util/systemc/gem5_within_systemc/sc_logger.cc | 6 | ||||
-rw-r--r-- | util/systemc/gem5_within_systemc/sc_logger.hh | 4 |
5 files changed, 60 insertions, 44 deletions
diff --git a/src/base/SConscript b/src/base/SConscript index fe92b4387..5bf0633a9 100644 --- a/src/base/SConscript +++ b/src/base/SConscript @@ -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.") diff --git a/src/base/trace.cc b/src/base/trace.cc index 06f9eeb21..c7f338bf5 100644 --- a/src/base/trace.cc +++ b/src/base/trace.cc @@ -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 << ": "; diff --git a/src/base/trace.hh b/src/base/trace.hh index 4af413321..0fe798ec6 100644 --- a/src/base/trace.hh +++ b/src/base/trace.hh @@ -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 @@ -60,21 +60,29 @@ class Logger 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 diff --git a/util/systemc/gem5_within_systemc/sc_logger.cc b/util/systemc/gem5_within_systemc/sc_logger.cc index a8b9020f4..195a0cbaf 100644 --- a/util/systemc/gem5_within_systemc/sc_logger.cc +++ b/util/systemc/gem5_within_systemc/sc_logger.cc @@ -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; diff --git a/util/systemc/gem5_within_systemc/sc_logger.hh b/util/systemc/gem5_within_systemc/sc_logger.hh index 4143f8bb8..0f9c6a18f 100644 --- a/util/systemc/gem5_within_systemc/sc_logger.hh +++ b/util/systemc/gem5_within_systemc/sc_logger.hh @@ -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(); }; |