diff options
author | Chris Johns <chrisj@rtems.org> | 2014-05-09 21:50:37 +1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2014-06-18 16:48:08 +1200 |
commit | 100f517ab37265acdf067e36b6860020ec8b2184 (patch) | |
tree | 2316c8b888e11dcbcfbfc66a0c1e31991ea20656 /tester/covoar/CoverageWriterSkyeye.cc | |
parent | 4.11: Add ntp patch. (diff) | |
download | rtems-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.cc | 90 |
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 ); + } +} |