diff options
author | Jennifer Averett <Jennifer.Averett@OARcorp.com> | 2010-05-24 20:07:09 +0000 |
---|---|---|
committer | Jennifer Averett <Jennifer.Averett@OARcorp.com> | 2010-05-24 20:07:09 +0000 |
commit | a518bc5b1a39e27a75bb5510ebf272c7658144b1 (patch) | |
tree | 5c8e7bcfb36f333f88f94673627addd5fcd7969d /covoar/CoverageReaderSkyeye.cc | |
parent | 2010-05-24 Jennifer Averett <Jennifer.Averett@OARcorp.com> (diff) | |
download | rtems-testing-a518bc5b1a39e27a75bb5510ebf272c7658144b1.tar.bz2 |
2010-05-24 Jennifer Averett <Jennifer.Averett@OARcorp.com>
* covoar/05_ascending.gif, covoar/05_descending.gif,
covoar/05_unsorted.gif, covoar/ConfigFile.cc, covoar/ConfigFile.h,
covoar/CoverageFactory.cc, covoar/CoverageFactory.h,
covoar/CoverageMap.cc, covoar/CoverageMap.h,
covoar/CoverageMapBase.cc, covoar/CoverageMapBase.h,
covoar/CoverageRanges.cc, covoar/CoverageRanges.h,
covoar/CoverageReaderBase.cc, covoar/CoverageReaderBase.h,
covoar/CoverageReaderQEMU.cc, covoar/CoverageReaderQEMU.h,
covoar/CoverageReaderRTEMS.cc, covoar/CoverageReaderRTEMS.h,
covoar/CoverageReaderSkyeye.cc, covoar/CoverageReaderSkyeye.h,
covoar/CoverageReaderTSIM.cc, covoar/CoverageReaderTSIM.h,
covoar/CoverageWriterBase.cc, covoar/CoverageWriterBase.h,
covoar/CoverageWriterRTEMS.cc, covoar/CoverageWriterRTEMS.h,
covoar/CoverageWriterSkyeye.cc, covoar/CoverageWriterSkyeye.h,
covoar/CoverageWriterTSIM.cc, covoar/CoverageWriterTSIM.h,
covoar/DesiredSymbols.cc, covoar/DesiredSymbols.h,
covoar/ExecutableInfo.cc, covoar/ExecutableInfo.h,
covoar/Explanations.cc, covoar/Explanations.h, covoar/Makefile,
covoar/ObjdumpProcessor.cc, covoar/ObjdumpProcessor.h,
covoar/ReportsBase.cc, covoar/ReportsBase.h, covoar/ReportsHtml.cc,
covoar/ReportsHtml.h, covoar/ReportsText.cc, covoar/ReportsText.h,
covoar/SymbolTable.cc, covoar/SymbolTable.h, covoar/TargetBase.cc,
covoar/TargetBase.h, covoar/TargetFactory.cc, covoar/TargetFactory.h,
covoar/Target_arm.cc, covoar/Target_arm.h, covoar/Target_i386.cc,
covoar/Target_i386.h, covoar/Target_lm32.cc, covoar/Target_lm32.h,
covoar/Target_m68k.cc, covoar/Target_m68k.h,
covoar/Target_powerpc.cc, covoar/Target_powerpc.h,
covoar/Target_sparc.cc, covoar/Target_sparc.h,
covoar/TraceConverter.cc, covoar/TraceList.cc, covoar/TraceList.h,
covoar/TraceReaderBase.cc, covoar/TraceReaderBase.h,
covoar/TraceReaderLogQEMU.cc, covoar/TraceReaderLogQEMU.h,
covoar/TraceWriterBase.cc, covoar/TraceWriterBase.h,
covoar/TraceWriterQEMU.cc, covoar/TraceWriterQEMU.h,
covoar/app_common.cc, covoar/app_common.h, covoar/configfile_test.cc,
covoar/coverage_converter.cc, covoar/covmerge.cc, covoar/covoar.cc,
covoar/covoar.css, covoar/filter.gif, covoar/qemu-dump-trace.c,
covoar/qemu-log.h, covoar/qemu-traces.h, covoar/rtemscov_header.h,
covoar/skyeye_header.h, covoar/table.js: New files.
Diffstat (limited to 'covoar/CoverageReaderSkyeye.cc')
-rw-r--r-- | covoar/CoverageReaderSkyeye.cc | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/covoar/CoverageReaderSkyeye.cc b/covoar/CoverageReaderSkyeye.cc new file mode 100644 index 0000000..ef88a3d --- /dev/null +++ b/covoar/CoverageReaderSkyeye.cc @@ -0,0 +1,130 @@ +/* + * $Id$ + */ + +/*! @file CoverageReaderSkyeye.cc + * @brief CoverageReaderSkyeye Implementation + * + * This file contains the implementation of the functions supporting + * reading the Skyeye coverage data files. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/stat.h> + +#include "CoverageReaderSkyeye.h" +#include "CoverageMap.h" +#include "ExecutableInfo.h" +#include "skyeye_header.h" + +namespace Coverage { + + CoverageReaderSkyeye::CoverageReaderSkyeye() + { + } + + CoverageReaderSkyeye::~CoverageReaderSkyeye() + { + } + + void CoverageReaderSkyeye::processFile( + const char* const file, + ExecutableInfo* const executableInformation + ) + { + CoverageMapBase* aCoverageMap = NULL; + uintptr_t baseAddress; + uint8_t cover; + FILE* coverageFile; + prof_header_t header; + uintptr_t i; + uintptr_t length; + int status; + + // + // Open the coverage file and read the header. + // + coverageFile = fopen( file, "r" ); + if (!coverageFile) { + fprintf( + stderr, + "ERROR: CoverageReaderSkyeye::processFile - Unable to open %s\n", + file + ); + exit( -1 ); + } + + status = fread( &header, sizeof(header), 1, coverageFile ); + if (status != 1) { + fprintf( + stderr, + "ERROR: CoverageReaderSkyeye::processFile - " + "Unable to read header from %s\n", + file + ); + exit( -1 ); + } + + baseAddress = header.prof_start; + length = header.prof_end - header.prof_start; + + #if 0 + fprintf( + stderr, + "%s: 0x%08x 0x%08x 0x%08lx/%ld\n", + file, + header.prof_start, + header.prof_end, + (unsigned long) length, + (unsigned long) length + ); + #endif + + // + // Read and process each line of the coverage file. + // + for (i=0; i<length; i+=8) { + status = fread( &cover, sizeof(uint8_t), 1, coverageFile ); + if (status != 1) { + fprintf( + stderr, + "CoverageReaderSkyeye::ProcessFile - breaking after 0x%08x in %s\n", + (unsigned int) i, + file + ); + break; + } + + // + // Obtain the coverage map containing the address and + // mark the address as executed. + // + // NOTE: This method ONLY works for Skyeye in 32-bit mode. + // + if (cover & 0x01) { + aCoverageMap = executableInformation->getCoverageMap( baseAddress + i ); + if (aCoverageMap) { + aCoverageMap->setWasExecuted( baseAddress + i ); + aCoverageMap->setWasExecuted( baseAddress + i + 1 ); + aCoverageMap->setWasExecuted( baseAddress + i + 2 ); + aCoverageMap->setWasExecuted( baseAddress + i + 3 ); + } + } + + if (cover & 0x10) { + aCoverageMap = executableInformation->getCoverageMap( + baseAddress + i + 4 + ); + if (aCoverageMap) { + aCoverageMap->setWasExecuted( baseAddress + i + 4 ); + aCoverageMap->setWasExecuted( baseAddress + i + 5 ); + aCoverageMap->setWasExecuted( baseAddress + i + 6 ); + aCoverageMap->setWasExecuted( baseAddress + i + 7 ); + } + } + } + + fclose( coverageFile ); + } +} |