From 100f517ab37265acdf067e36b6860020ec8b2184 Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Fri, 9 May 2014 21:50:37 +1000 Subject: covoar: Merger the covoar source from rtems-testing.git. Use waf to build covoar. --- tester/covoar/TraceConverter.cc | 104 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 tester/covoar/TraceConverter.cc (limited to 'tester/covoar/TraceConverter.cc') diff --git a/tester/covoar/TraceConverter.cc b/tester/covoar/TraceConverter.cc new file mode 100644 index 0000000..0f7a44e --- /dev/null +++ b/tester/covoar/TraceConverter.cc @@ -0,0 +1,104 @@ +/*! @file TraceReaderLogQEMU.cc + * @brief TraceReaderLogQEMU Implementation + * + * This file contains the implementation of the functions supporting + * reading the QEMU coverage data files. + */ + +#include +#include +#include +#include +#include + +#include "qemu-log.h" + +#include "TraceReaderLogQEMU.h" +#include "TraceWriterQEMU.h" +#include "TraceList.h" +#include "ObjdumpProcessor.h" +#include "app_common.h" +#include "TargetFactory.h" + +char* progname; + +void usage() +{ + fprintf( + stderr, + "Usage: %s [-v] -c CPU -e executable -t tracefile [-E logfile]\n", + progname + ); + exit(1); +} + +int main( + int argc, + char** argv +) +{ + int opt; + Trace::TraceReaderLogQEMU log; + Trace::TraceWriterQEMU trace; + const char *cpuname = ""; + const char *executable = ""; + const char *tracefile = ""; + const char *logname = "/tmp/qemu.log"; + Coverage::ExecutableInfo* executableInfo; + + // + // Process command line options. + // + progname = argv[0]; + + while ((opt = getopt(argc, argv, "c:e:l:L:t:v")) != -1) { + switch (opt) { + case 'c': cpuname = optarg; break; + case 'e': executable = optarg; break; + case 'l': logname = optarg; break; + case 'L': dynamicLibrary = optarg; break; + case 't': tracefile = optarg; break; + case 'v': Verbose = true; break; + default: usage(); + } + } + + // Make sure we have all the required parameters + if ( !cpuname ) { + fprintf( stderr, "cpuname not specified\n" ); + usage(); + } + + if ( !executable ) { + fprintf( stderr, "executable not specified\n" ); + usage(); + } + + if ( !tracefile ) { + fprintf( stderr, "output trace file not specified\n" ); + usage(); + } + + // Create toolnames. + TargetInfo = Target::TargetFactory( cpuname ); + + if (dynamicLibrary) + executableInfo = new Coverage::ExecutableInfo( executable, dynamicLibrary ); + else + executableInfo = new Coverage::ExecutableInfo( executable ); + + objdumpProcessor = new Coverage::ObjdumpProcessor(); + + // If a dynamic library was specified, determine the load address. + if (dynamicLibrary) + executableInfo->setLoadAddress( + objdumpProcessor->determineLoadAddress( executableInfo ) + ); + + objdumpProcessor->loadAddressTable( executableInfo ); + + log.processFile( logname ); + + trace.writeFile( tracefile, &log ); + +} -- cgit v1.2.3