summaryrefslogtreecommitdiffstats
path: root/tester/covoar/ExecutableInfo.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/ExecutableInfo.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/ExecutableInfo.cc')
-rw-r--r--tester/covoar/ExecutableInfo.cc129
1 files changed, 129 insertions, 0 deletions
diff --git a/tester/covoar/ExecutableInfo.cc b/tester/covoar/ExecutableInfo.cc
new file mode 100644
index 0000000..0a7eac3
--- /dev/null
+++ b/tester/covoar/ExecutableInfo.cc
@@ -0,0 +1,129 @@
+/*! @file ExecutableInfo.cc
+ * @brief ExecutableInfo Implementation
+ *
+ * This file contains the implementation of the functionality
+ * of the ExecutableInfo class.
+ */
+
+#include <stdio.h>
+
+#include "ExecutableInfo.h"
+#include "app_common.h"
+#include "CoverageMap.h"
+#include "DesiredSymbols.h"
+#include "SymbolTable.h"
+
+namespace Coverage {
+
+ ExecutableInfo::ExecutableInfo(
+ const char* const theExecutableName,
+ const char* const theLibraryName
+ )
+ {
+ executableName = theExecutableName;
+ loadAddress = 0;
+ libraryName = "";
+ if (theLibraryName)
+ libraryName = theLibraryName;
+ theSymbolTable = new SymbolTable();
+ }
+
+ ExecutableInfo::~ExecutableInfo()
+ {
+ if (theSymbolTable)
+ delete theSymbolTable;
+ }
+
+ void ExecutableInfo::dumpCoverageMaps( void ) {
+ ExecutableInfo::coverageMaps_t::iterator itr;
+
+ for (itr = coverageMaps.begin(); itr != coverageMaps.end(); itr++) {
+ fprintf( stderr, "Coverage Map for %s\n", ((*itr).first).c_str() );;
+ ((*itr).second)->dump();
+ }
+ }
+
+ void ExecutableInfo::dumpExecutableInfo( void ){
+ fprintf( stdout, "\n== Executable info ==\n");
+ fprintf( stdout, "executableName = %s\n", executableName.c_str());
+ fprintf( stdout, "libraryName = %s\n", libraryName.c_str());
+ fprintf( stdout, "loadAddress = %u\n", loadAddress);
+ theSymbolTable->dumpSymbolTable();
+ }
+
+ CoverageMapBase* ExecutableInfo::getCoverageMap ( uint32_t address )
+ {
+ CoverageMapBase* aCoverageMap = NULL;
+ coverageMaps_t::iterator it;
+ std::string itsSymbol;
+
+ // Obtain the coverage map containing the specified address.
+ itsSymbol = theSymbolTable->getSymbol( address );
+ if (itsSymbol != "") {
+ it = coverageMaps.find( itsSymbol );
+ aCoverageMap = (*it).second;
+ }
+
+ return aCoverageMap;
+ }
+
+ std::string ExecutableInfo::getFileName ( void ) const
+ {
+ return executableName;
+ }
+
+ std::string ExecutableInfo::getLibraryName( void ) const
+ {
+ return libraryName;
+ }
+
+ uint32_t ExecutableInfo::getLoadAddress( void ) const
+ {
+ return loadAddress;
+ }
+
+
+ SymbolTable* ExecutableInfo::getSymbolTable ( void ) const
+ {
+ return theSymbolTable;
+ }
+
+ CoverageMapBase* ExecutableInfo::createCoverageMap (
+ const std::string& symbolName,
+ uint32_t lowAddress,
+ uint32_t highAddress
+ )
+ {
+ CoverageMapBase *theMap;
+ ExecutableInfo::coverageMaps_t::iterator itr;
+
+ itr = coverageMaps.find( symbolName );
+ if ( itr == coverageMaps.end() ) {
+ theMap = new CoverageMap( lowAddress, highAddress );
+ coverageMaps[ symbolName ] = theMap;
+ } else {
+ theMap = itr->second;
+ theMap->Add( lowAddress, highAddress );
+ }
+ return theMap;
+ }
+
+ bool ExecutableInfo::hasDynamicLibrary( void )
+ {
+ return (libraryName != "");
+ }
+
+ void ExecutableInfo::mergeCoverage( void ) {
+ ExecutableInfo::coverageMaps_t::iterator itr;
+
+ for (itr = coverageMaps.begin(); itr != coverageMaps.end(); itr++) {
+ SymbolsToAnalyze->mergeCoverageMap( (*itr).first, (*itr).second );
+ }
+ }
+
+ void ExecutableInfo::setLoadAddress( uint32_t address )
+ {
+ loadAddress = address;
+ }
+
+}