summaryrefslogtreecommitdiffstats
path: root/tester/covoar/CoverageWriterSkyeye.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/CoverageWriterSkyeye.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/CoverageWriterSkyeye.cc')
-rw-r--r--tester/covoar/CoverageWriterSkyeye.cc90
1 files changed, 90 insertions, 0 deletions
diff --git a/tester/covoar/CoverageWriterSkyeye.cc b/tester/covoar/CoverageWriterSkyeye.cc
new file mode 100644
index 0000000..e0aa943
--- /dev/null
+++ b/tester/covoar/CoverageWriterSkyeye.cc
@@ -0,0 +1,90 @@
+/*! @file CoverageWriterSkyeye.cc
+ * @brief CoverageWriterSkyeye Implementation
+ *
+ * This file contains the implementation of the CoverageWriter class
+ * for the coverage files written by the multi-architecture simulator
+ * Skyeye (http://www.skyeye.org).
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "CoverageWriterSkyeye.h"
+#include "skyeye_header.h"
+
+namespace Coverage {
+
+ CoverageWriterSkyeye::CoverageWriterSkyeye()
+ {
+ }
+
+ CoverageWriterSkyeye::~CoverageWriterSkyeye()
+ {
+ }
+
+ void CoverageWriterSkyeye::writeFile(
+ const char* const file,
+ CoverageMapBase* coverage,
+ uint32_t lowAddress,
+ uint32_t highAddress
+ )
+ {
+ uint32_t a;
+ uint8_t cover;
+ FILE* coverageFile;
+ prof_header_t header;
+ int status;
+
+ /*
+ * read the file and update the coverage map passed in
+ */
+ coverageFile = fopen( file, "w" );
+ if ( !coverageFile ) {
+ fprintf(
+ stderr,
+ "ERROR: CoverageWriterSkyeye::writeFile - unable to open %s\n",
+ file
+ );
+ exit(-1);
+ }
+
+ /* clear out the header and fill it in */
+ memset( &header, 0, sizeof(header) );
+ header.ver = 0x1;
+ header.header_length = sizeof(header);
+ header.prof_start = lowAddress;
+ header.prof_end = highAddress;
+ strcpy( header.desc, "Skyeye Coverage Data" );
+
+ status = fwrite(&header, 1, sizeof(header), coverageFile);
+ if (status != sizeof(header)) {
+ fprintf(
+ stderr,
+ "ERROR: CoverageWriterSkyeye::writeFile - unable to write header "
+ "to %s\n",
+ file
+ );
+ exit(-1);
+ }
+
+ for ( a=lowAddress ; a < highAddress ; a+= 8 ) {
+ cover = ((coverage->wasExecuted( a )) ? 0x01 : 0);
+ cover |= ((coverage->wasExecuted( a + 4 )) ? 0x10 : 0);
+ status = fwrite(&cover, 1, sizeof(cover), coverageFile);
+ if (status != sizeof(cover)) {
+ fprintf(
+ stderr,
+ "ERROR: CoverageWriterSkyeye::writeFile - write to %s "
+ "at address 0x%08x failed\n",
+ file,
+ a
+ );
+ exit( -1 );
+ }
+ // fprintf( stderr, "0x%x %d\n", a, cover );
+ }
+
+ fclose( coverageFile );
+ }
+}