summaryrefslogtreecommitdiffstats
path: root/tester/covoar/TraceConverter.cc
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2014-05-09 21:50:37 +1000
committerChris Johns <chrisj@rtems.org>2014-06-18 16:48:08 +1200
commit100f517ab37265acdf067e36b6860020ec8b2184 (patch)
tree2316c8b888e11dcbcfbfc66a0c1e31991ea20656 /tester/covoar/TraceConverter.cc
parent4.11: Add ntp patch. (diff)
downloadrtems-tools-100f517ab37265acdf067e36b6860020ec8b2184.tar.bz2
covoar: Merger the covoar source from rtems-testing.git.
Use waf to build covoar.
Diffstat (limited to 'tester/covoar/TraceConverter.cc')
-rw-r--r--tester/covoar/TraceConverter.cc104
1 files changed, 104 insertions, 0 deletions
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 <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <getopt.h>
+
+#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 );
+
+}