summaryrefslogtreecommitdiff
path: root/src/base/trace.cc
diff options
context:
space:
mode:
authorAndreas Sandberg <Andreas.Sandberg@ARM.com>2014-08-26 10:13:45 -0400
committerAndreas Sandberg <Andreas.Sandberg@ARM.com>2014-08-26 10:13:45 -0400
commit70176fecd1ff04f7b8957f3110497d758310b569 (patch)
treeec2f32ee03a8a43a31bcfedd164b1ec3ee229532 /src/base/trace.cc
parentf3e5fee74373d16849a58a80827c54c773aa05e2 (diff)
downloadgem5-70176fecd1ff04f7b8957f3110497d758310b569.tar.xz
base: Replace the internal varargs stuff with C++11 constructs
We currently use our own home-baked support for type-safe variadic functions. This is confusing and somewhat limited (e.g., cprintf only supports a limited number of arguments). This changeset converts all uses of our internal varargs support to use C++11 variadic macros.
Diffstat (limited to 'src/base/trace.cc')
-rw-r--r--src/base/trace.cc53
1 files changed, 14 insertions, 39 deletions
diff --git a/src/base/trace.cc b/src/base/trace.cc
index fa55e42a9..00a4c3e6b 100644
--- a/src/base/trace.cc
+++ b/src/base/trace.cc
@@ -38,7 +38,6 @@
#include "base/output.hh"
#include "base/str.hh"
#include "base/trace.hh"
-#include "base/varargs.hh"
using namespace std;
@@ -70,59 +69,35 @@ setOutput(const string &filename)
ObjectMatch ignore;
-void
-dprintf(Tick when, const std::string &name, const char *format,
- CPRINTF_DEFINITION)
+
+bool
+__dprintf_prologue(Tick when, const std::string &name)
{
if (!name.empty() && ignore.match(name))
- return;
+ return false;
std::ostream &os = *dprintf_stream;
- string fmt = "";
- CPrintfArgsList args(VARARGS_ALLARGS);
+ if (when != MaxTick)
+ ccprintf(os, "%7d: ", when);
- if (!name.empty()) {
- fmt = "%s: " + fmt;
- args.push_front(name);
- }
-
- if (when != (Tick)-1) {
- fmt = "%7d: " + fmt;
- args.push_front(when);
- }
+ if (!name.empty())
+ os << name << ": ";
- fmt += format;
-
- ccprintf(os, fmt.c_str(), args);
- os.flush();
+ return true;
}
void
dump(Tick when, const std::string &name, const void *d, int len)
{
- if (!name.empty() && ignore.match(name))
- return;
-
- std::ostream &os = *dprintf_stream;
-
- string fmt = "";
- CPrintfArgsList args;
-
- if (!name.empty()) {
- fmt = "%s: " + fmt;
- args.push_front(name);
- }
-
- if (when != (Tick)-1) {
- fmt = "%7d: " + fmt;
- args.push_front(when);
- }
-
const char *data = static_cast<const char *>(d);
+ std::ostream &os = *dprintf_stream;
int c, i, j;
+
for (i = 0; i < len; i += 16) {
- ccprintf(os, fmt, args);
+ if (!__dprintf_prologue(when, name))
+ return;
+
ccprintf(os, "%08x ", i);
c = len - i;
if (c > 16) c = 16;