summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/base/SConscript1
-rw-r--r--src/base/trace.cc14
-rw-r--r--src/base/trace.hh79
-rw-r--r--util/systemc/gem5_within_systemc/sc_logger.cc6
-rw-r--r--util/systemc/gem5_within_systemc/sc_logger.hh4
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();
};