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