summaryrefslogtreecommitdiffstats
path: root/covoar/CoverageReaderSkyeye.cc
diff options
context:
space:
mode:
authorJennifer Averett <Jennifer.Averett@OARcorp.com>2010-05-24 20:07:09 +0000
committerJennifer Averett <Jennifer.Averett@OARcorp.com>2010-05-24 20:07:09 +0000
commita518bc5b1a39e27a75bb5510ebf272c7658144b1 (patch)
tree5c8e7bcfb36f333f88f94673627addd5fcd7969d /covoar/CoverageReaderSkyeye.cc
parent2010-05-24 Jennifer Averett <Jennifer.Averett@OARcorp.com> (diff)
downloadrtems-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.cc130
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 );
+ }
+}