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/ExecutableInfo.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/ExecutableInfo.cc')
-rw-r--r-- | tester/covoar/ExecutableInfo.cc | 129 |
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; + } + +} |