tools/dump-trace: dump extended traces properly

Output formatting was broken for extended traces (with register data
information etc.) before.

Change-Id: I48ca548ab29ecc855d803ce46a7713ef801f53f0
This commit is contained in:
Horst Schirmeier
2013-06-25 17:15:39 +02:00
parent 0cceb4e222
commit 8e5aa9b1bd

View File

@ -1,6 +1,6 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include <string> #include <sstream>
#include "comm/TracePlugin.pb.h" #include "comm/TracePlugin.pb.h"
#include "util/ProtoStream.hpp" #include "util/ProtoStream.hpp"
#include "../../src/core/util/Logger.hpp" #include "../../src/core/util/Logger.hpp"
@ -8,7 +8,7 @@
#include "util/CommandLine.hpp" #include "util/CommandLine.hpp"
using namespace fail; using namespace fail;
using std::string; using std::stringstream;
using std::endl; using std::endl;
using std::cout; using std::cout;
using std::cerr; using std::cerr;
@ -98,26 +98,23 @@ int main(int argc, char *argv[])
cout << "IP " << hex << ev.ip() << dec << " t=" << acctime << "\n"; cout << "IP " << hex << ev.ip() << dec << " t=" << acctime << "\n";
} }
} else { } else {
string ext = ""; // FIXME: use stringstream? stringstream ext;
if (ev.has_trace_ext() && !stats_only) { if (ev.has_trace_ext() && !stats_only) {
const Trace_Event_Extended& temp_ext = ev.trace_ext(); const Trace_Event_Extended& temp_ext = ev.trace_ext();
ext = " DATA "; ext << " DATA " << std::hex;
ext += temp_ext.data(); ext << (uint64_t) temp_ext.data();
int i; for (int i = 0; i < temp_ext.registers_size(); i++) {
for (i = 0 ; i < temp_ext.registers_size() ; i++) {
const Trace_Event_Extended_Registers& temp_reg = temp_ext.registers(i); const Trace_Event_Extended_Registers& temp_reg = temp_ext.registers(i);
ext += "REG: " ; ext << " REG "
ext += temp_reg.id(); << (unsigned) temp_reg.id() << " = "
ext += " "; << (uint32_t) temp_reg.value() << " -> "
ext += temp_reg.value(); << (uint32_t) temp_reg.value_deref();
ext += "=";
ext += temp_reg.value_deref();
} }
if (temp_ext.stack_size() > 0 ) { if (temp_ext.stack_size() > 0 ) {
ext += " STACK: "; ext << " STACK:";
for (i = 0 ; i< temp_ext.stack_size() ; i++) { for (int i = 0; i < temp_ext.stack_size(); i++) {
const Trace_Event_Extended_Stack& temp_stack = temp_ext.stack(i); const Trace_Event_Extended_Stack& temp_stack = temp_ext.stack(i);
ext += temp_stack.value(); ext << " " << (uint32_t) temp_stack.value();
} }
} }
} }
@ -128,7 +125,7 @@ int main(int argc, char *argv[])
<< dec << " width " << ev.width() << dec << " width " << ev.width()
<< hex << " IP " << ev.ip() << hex << " IP " << ev.ip()
<< dec << " t=" << acctime << dec << " t=" << acctime
<< ext << "\n"; << ext.str() << "\n";
} }
stats_reads += (ev.accesstype() == Trace_Event_AccessType_READ); stats_reads += (ev.accesstype() == Trace_Event_AccessType_READ);
stats_writes += (ev.accesstype() == Trace_Event_AccessType_WRITE); stats_writes += (ev.accesstype() == Trace_Event_AccessType_WRITE);