Changeset 69984ed in rtems-testing


Ignore:
Timestamp:
May 14, 2010, 5:26:35 PM (9 years ago)
Author:
Jennifer Averett <Jennifer.Averett@…>
Branches:
4.11, 8895273c193787f84c4585a10f6d6aceb3b25dc4
Children:
180e6f7
Parents:
2d88955
Message:

2010-05-14 Jennifer Averett <Jennifer.Averett@…>

Location:
rtems-coverage
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • rtems-coverage/ChangeLog

    r2d88955 r69984ed  
     12010-05-14      Jennifer Averett <Jennifer.Averett@OARcorp.com>
     2
     3        * CoverageRanges.cc, CoverageRanges.h, DesiredSymbols.cc,
     4        DesiredSymbols.h, ReportsBase.cc, ReportsBase.h, ReportsHtml.cc,
     5        ReportsHtml.h, ReportsText.cc, ReportsText.h, covoar.cc, covoar.css:
     6        Added an instruction count to the range information. Added method
     7        calculateStatistics to fill in missing statistics information.
     8        Modified branch stat info to include branchesExecuted and
     9        branchesNotExecuted. Added verbose output to report generation. Added
     10        heading to html reports.
     11
    1122010-05-13      Jennifer Averett <Jennifer.Averett@OARcorp.com
    213
  • rtems-coverage/CoverageRanges.cc

    r2d88955 r69984ed  
    3131    uint32_t          lowAddressArg,
    3232    uint32_t          highAddressArg,
    33     uncoveredReason_t why
     33    uncoveredReason_t why,
     34    uint32_t          numInstructions
    3435  )
    3536  {
     
    3738
    3839    id_m++;
    39     c.id          = id_m;
    40     c.lowAddress  = lowAddressArg;
    41     c.highAddress = highAddressArg;
    42     c.reason      = why;
     40    c.id               = id_m;
     41    c.lowAddress       = lowAddressArg;
     42    c.highAddress      = highAddressArg;
     43    c.reason           = why;
     44    c.instructionCount = numInstructions;
    4345    set.push_back(c);
    4446  }
  • rtems-coverage/CoverageRanges.h

    r2d88955 r69984ed  
    4848      uint32_t          highAddress;
    4949      std::string       highSourceLine;
     50      uint32_t          instructionCount;
    5051      uncoveredReason_t reason;
    5152    } coverageRange_t;
     
    7879      uint32_t          lowAddressArg,
    7980      uint32_t          highAddressArg,
    80       uncoveredReason_t why
     81      uncoveredReason_t why,
     82      uint32_t          numInstructions
    8183    );
    8284 
  • rtems-coverage/DesiredSymbols.cc

    r2d88955 r69984ed  
    133133  }
    134134
    135   void DesiredSymbols::computeUncovered( void )
    136   {
    137     uint32_t                              a, la, ha;
     135  void DesiredSymbols::caculateStatistics( void )
     136  {
     137    uint32_t                              a;
    138138    uint32_t                              endAddress;
    139139    DesiredSymbols::symbolSet_t::iterator sitr;
    140     CoverageRanges*                       theBranches;
    141140    CoverageMapBase*                      theCoverageMap;
    142     CoverageRanges*                       theRanges;
    143141
    144142    // Look at each symbol.
     
    153151        continue;
    154152
     153      // Increment the total sizeInBytes byt the bytes in the symbol
     154      stats.sizeInBytes += sitr->second.stats.sizeInBytes;
     155
     156      // Now scan through the coverage map of this symbol.
     157      endAddress = sitr->second.stats.sizeInBytes - 1;
     158      a = 0;
     159      while (a <= endAddress) {
     160
     161        // If we are at the start of instruction increment
     162        // instruction type counters as needed.
     163        if ( theCoverageMap->isStartOfInstruction( a ) ) {
     164
     165          stats.sizeInInstructions++;
     166          sitr->second.stats.sizeInInstructions++;
     167
     168          if (!theCoverageMap->wasExecuted( a ) ) {
     169            stats.uncoveredInstructions++;
     170            sitr->second.stats.uncoveredInstructions++;
     171
     172            if ( theCoverageMap->isBranch( a )) {
     173              stats.branchesNotExecuted++;
     174              sitr->second.stats.branchesNotExecuted++;
     175             }
     176          } else if (theCoverageMap->isBranch( a )) {
     177            stats.branchesExecuted++;
     178            sitr->second.stats.branchesExecuted++;
     179          }
     180 
     181        }
     182
     183 
     184        if (!theCoverageMap->wasExecuted( a )) {
     185          stats.uncoveredBytes++;
     186          sitr->second.stats.uncoveredBytes++;
     187        }       
     188        a++;
     189
     190      }
     191    }
     192  }
     193
     194
     195  void DesiredSymbols::computeUncovered( void )
     196  {
     197    uint32_t                              a, la, ha;
     198    uint32_t                              endAddress;
     199    uint32_t                              count;
     200    DesiredSymbols::symbolSet_t::iterator sitr;
     201    CoverageRanges*                       theBranches;
     202    CoverageMapBase*                      theCoverageMap;
     203    CoverageRanges*                       theRanges;
     204
     205    // Look at each symbol.
     206    for (sitr = SymbolsToAnalyze->set.begin();
     207         sitr != SymbolsToAnalyze->set.end();
     208         sitr++) {
     209
     210      // If the unified coverage map does not exist, the symbol was
     211      // never referenced by any executable.  Just skip it.
     212      theCoverageMap = sitr->second.unifiedCoverageMap;
     213      if (!theCoverageMap)
     214        continue;
     215
    155216      // Create containers for the symbol's uncovered ranges and branches.
    156217      theRanges = new CoverageRanges();
     
    163224      a = 0;
    164225      while (a <= endAddress) {
    165 
     226       
    166227        // If an address was NOT executed, find consecutive unexecuted
    167228        // addresses and add them to the uncovered ranges.
    168229        if (!theCoverageMap->wasExecuted( a )) {
     230
    169231          la = a;
     232          count = 1;
    170233          for (ha=a+1;
    171234               ha<=endAddress && !theCoverageMap->wasExecuted( ha );
    172235               ha++)
    173             ;
     236          {
     237            if ( theCoverageMap->isStartOfInstruction( ha ) )
     238              count++;
     239          }
    174240          ha--;
    175241
    176242          stats.uncoveredRanges++;
     243          sitr->second.stats.uncoveredRanges++;
    177244          theRanges->add(
    178245            sitr->second.baseAddress + la,
    179246            sitr->second.baseAddress + ha,
    180             CoverageRanges::UNCOVERED_REASON_NOT_EXECUTED
     247            CoverageRanges::UNCOVERED_REASON_NOT_EXECUTED,
     248            count
    181249          );
    182250          a = ha + 1;
     
    186254        // to the uncoverd branches.
    187255        else if (theCoverageMap->isBranch( a )) {
    188           stats.branchesFound++;
    189256          la = a;
    190257          for (ha=a+1;
     
    196263          if (theCoverageMap->wasAlwaysTaken( la )) {
    197264            stats.branchesAlwaysTaken++;
     265            sitr->second.stats.branchesAlwaysTaken++;
    198266            theBranches->add(
    199267              sitr->second.baseAddress + la,
    200268              sitr->second.baseAddress + ha,
    201               CoverageRanges::UNCOVERED_REASON_BRANCH_ALWAYS_TAKEN
     269              CoverageRanges::UNCOVERED_REASON_BRANCH_ALWAYS_TAKEN,
     270              1
    202271            );
    203272            if (Verbose)
     
    213282          else if (theCoverageMap->wasNeverTaken( la )) {
    214283            stats.branchesNeverTaken++;
     284            sitr->second.stats.branchesNeverTaken++;
    215285            theBranches->add(
    216286              sitr->second.baseAddress + la,
    217287              sitr->second.baseAddress + ha,
    218               CoverageRanges::UNCOVERED_REASON_BRANCH_NEVER_TAKEN
     288              CoverageRanges::UNCOVERED_REASON_BRANCH_NEVER_TAKEN,
     289              1
    219290            );
    220291            if (Verbose)
     
    235306  }
    236307
     308
    237309  void DesiredSymbols::createCoverageMap(
    238310    const std::string& symbolName,
     
    481553
    482554  uint32_t DesiredSymbols::getNumberBranchesFound( void ) const {
    483     return stats.branchesFound;
     555    return (stats.branchesNotExecuted + stats.branchesExecuted);
    484556  };
    485557
  • rtems-coverage/DesiredSymbols.h

    r2d88955 r69984ed  
    3838
    3939    /*!
    40      *  This member variable contains the total number of branches found.
    41      */
    42     int branchesFound;
     40     *  This member variable contains the total number of branches where
     41     *  one or more paths were executed.
     42     */
     43    int branchesExecuted;
    4344
    4445    /*!
     
    4748     */
    4849    int branchesNeverTaken;
     50
     51    /*!
     52     *  This member variable contains the total number of branches not
     53     *  executed AT ALL.
     54     */
     55    int branchesNotExecuted;
    4956
    5057    /*!
     
    93100     Statistics():
    94101       branchesAlwaysTaken(0),
    95        branchesFound(0),
     102       branchesExecuted(0),
    96103       branchesNeverTaken(0),
     104       branchesNotExecuted(0),
    97105       sizeInBytes(0),
    98106       sizeInInstructions(0),
     
    103111     }
    104112
    105 
    106      
    107113  };
    108114
     
    195201
    196202    /*!
     203     *  This method loops through the coverage map and
     204     *  calculates the statistics that have not already
     205     *  been filled in.
     206     */
     207    void caculateStatistics( void );
     208
     209    /*!
    197210     *  This method analyzes each symbols coverage map to determine any
    198211     *  uncovered ranges or branches.
  • rtems-coverage/ReportsBase.cc

    r2d88955 r69984ed  
    374374  Coverage::DesiredSymbols::symbolSet_t::iterator ditr;
    375375  FILE*                                           report;
    376   Coverage::CoverageRanges::ranges_t::iterator    ritr;
    377376  Coverage::CoverageRanges*                       theRanges;
    378377  unsigned int                                    count;
     
    384383  }
    385384
    386   // Process uncovered ranges for each symbol.
     385  // Process each symbol.
    387386  count = 0;
    388387  for (ditr = SymbolsToAnalyze->set.begin();
     
    390389       ditr++) {
    391390
    392     theRanges = ditr->second.uncoveredRanges;
    393 
    394     if (theRanges && !theRanges->set.empty()) {
    395 
    396       for (ritr =  theRanges->set.begin() ;
    397            ritr != theRanges->set.end() ;
    398            ritr++ ) {
    399         PutSymbolSummaryLine( report, count, ditr, ritr );
    400         count++;
    401       }
    402     }
     391    PutSymbolSummaryLine( report, count, ditr );
     392    count++;
    403393  }
    404394
     
    424414
    425415    reportName = "index" + reports->ReportExtension();
     416    if (Verbose)
     417      fprintf(
     418        stderr, "Generate %s\n", reportName.c_str()
     419      );
    426420    reports->WriteIndex( reportName.c_str() );
    427421
    428422    reportName = "annotated" + reports->ReportExtension();
     423    if (Verbose)
     424      fprintf(
     425        stderr, "Generate %s\n", reportName.c_str()
     426      );
    429427    reports->WriteAnnotatedReport( reportName.c_str() );
    430428
    431429    reportName = "branch" + reports->ReportExtension();
     430    if (Verbose)
     431      fprintf(
     432        stderr, "Generate %s\n", reportName.c_str()
     433      );
    432434    reports->WriteBranchReport(reportName.c_str() );
    433435
    434436    reportName = "uncovered" + reports->ReportExtension();
     437    if (Verbose)
     438      fprintf(
     439        stderr, "Generate %s\n", reportName.c_str()
     440      );
    435441    reports->WriteCoverageReport(reportName.c_str() );
    436442
    437443    reportName = "sizes" + reports->ReportExtension();
     444    if (Verbose)
     445      fprintf(
     446        stderr, "Generate %s\n", reportName.c_str()
     447      );
    438448    reports->WriteSizeReport(reportName.c_str() );
    439449
    440450    reportName = "symbolSummary" + reports->ReportExtension();
     451    if (Verbose)
     452      fprintf(
     453        stderr, "Generate %s\n", reportName.c_str()
     454      );
    441455    reports->WriteSymbolSummaryReport(reportName.c_str() );
    442456  }
  • rtems-coverage/ReportsBase.h

    r2d88955 r69984ed  
    315315      FILE*                                           report,
    316316      unsigned int                                    number,
    317       Coverage::DesiredSymbols::symbolSet_t::iterator symbol,
    318       Coverage::CoverageRanges::ranges_t::iterator    range
     317      Coverage::DesiredSymbols::symbolSet_t::iterator symbol
    319318    )=0;
    320319};
  • rtems-coverage/ReportsHtml.cc

    r2d88955 r69984ed  
    101101      "<link rel=\"stylesheet\" type=\"text/css\" href=\"covoar.css\" media=\"screen\" >\n"
    102102      "<script type=\"text/javascript\" src=\"table.js\"></script>\n"
    103       "<body>\n"
    104103    );
    105104
     
    118117    fprintf(
    119118      aFile,
     119      "<pre class=\"heading-title\">Annotated Report</pre>\n"
     120      "<body>\n"
    120121      "<pre class=\"code\">\n"
    121122    );
     
    138139      fprintf(
    139140        aFile,
    140         "<table class=\"covoar table-autosort:0 table-autofilter"
     141        "<pre class=\"heading-title\">Branch Report</pre>\n"
     142        "<body>\n"
     143         "<table class=\"covoar table-autosort:0 table-autofilter"
    141144           TABLE_HEADER_CLASS "\">\n"
    142145        "<thead>\n"
     
    169172    fprintf(
    170173      aFile,
     174        "<pre class=\"heading-title\">Coverage Report</pre>\n"
     175        "<body>\n"
    171176      "<table class=\"covoar table-autosort:0 table-autofilter"
    172177           TABLE_HEADER_CLASS "\">\n"
     
    198203    fprintf(
    199204      aFile,
     205      "<pre class=\"heading-title\">Size Report</pre>\n"
     206      "<body>\n"
    200207      "<table class=\"covoar table-autosort:0 table-autofilter"
    201208           TABLE_HEADER_CLASS "\">\n"
     
    223230    fprintf(
    224231      aFile,
     232      "<pre class=\"heading-title\">Symbol Summary Report</pre>\n"
     233      "<body>\n"
    225234      "<table class=\"covoar table-autosort:0 table-autofilter"
    226235           TABLE_HEADER_CLASS "\">\n"
     
    360369    fprintf(
    361370      report,
    362       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     371      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     372      rangePtr->instructionCount
    363373    );
    364374
     
    528538    fprintf(
    529539      report,
    530       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     540      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     541      rangePtr->instructionCount
    531542    );
    532543
     
    604615    FILE*                                           report,
    605616    unsigned int                                    count,
    606     Coverage::DesiredSymbols::symbolSet_t::iterator symbol,
    607     Coverage::CoverageRanges::ranges_t::iterator    range
    608   )
    609   {
     617    Coverage::DesiredSymbols::symbolSet_t::iterator symbol
     618  )
     619  {
     620 
    610621    // Mark the background color different for odd and even lines.
    611622    if ( ( count%2 ) == 0 )
     
    624635    fprintf(
    625636      report,
    626       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     637      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     638      symbol->second.stats.sizeInBytes
    627639    );
    628640
     
    630642    fprintf(
    631643      report,
    632       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     644      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     645      symbol->second.stats.sizeInInstructions
    633646    );
    634647
     
    637650      report,
    638651      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",     
    639       symbol->second.uncoveredRanges->set.size()
     652      symbol->second.stats.uncoveredRanges
    640653    );
    641654
     
    643656    fprintf(
    644657      report,
    645       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     658      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     659      symbol->second.stats.uncoveredBytes
    646660    );
    647661
     
    649663    fprintf(
    650664      report,
    651       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     665      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     666       symbol->second.stats.uncoveredInstructions
    652667    );
    653668
     
    656671      report,
    657672      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",     
    658       symbol->second.uncoveredBranches->set.size()
     673      symbol->second.stats.branchesNotExecuted +  symbol->second.stats.branchesExecuted
    659674    );
    660675
     
    662677    fprintf(
    663678      report,
    664       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     679      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     680      symbol->second.stats.branchesAlwaysTaken
    665681    );
    666682
     
    668684    fprintf(
    669685      report,
    670       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
    671     );
    672 
    673 
    674     // % Uncovered Instructions
    675     fprintf(
    676       report,
    677       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
    678     );
     686      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     687      symbol->second.stats.branchesNeverTaken
     688     );
     689
     690    // % Uncovered Instructions
     691    if ( symbol->second.stats.sizeInInstructions == 0 )
     692      fprintf(
     693        report,
     694        "<td class=\"covoar-td\" align=\"center\">N/A</td>\n"
     695      );
     696    else     
     697      fprintf(
     698        report,
     699        "<td class=\"covoar-td\" align=\"center\">%.2f</td>\n",
     700        (symbol->second.stats.uncoveredInstructions*100.0)/
     701         symbol->second.stats.sizeInInstructions
     702      );
    679703
    680704    // % Uncovered Bytes
    681     fprintf(
    682       report,
    683       "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
    684     );
     705    if ( symbol->second.stats.sizeInBytes == 0 )
     706      fprintf(
     707        report,
     708        "<td class=\"covoar-td\" align=\"center\">N/A</td>\n"
     709      );
     710    else     
     711      fprintf(
     712        report,
     713        "<td class=\"covoar-td\" align=\"center\">%.2f</td>\n",
     714        (symbol->second.stats.uncoveredBytes*100.0)/
     715         symbol->second.stats.sizeInBytes
     716      );
    685717
    686718    fprintf( report, "</tr>\n");
  • rtems-coverage/ReportsHtml.h

    r2d88955 r69984ed  
    152152      FILE*                                           report,
    153153      unsigned int                                    number,
    154       Coverage::DesiredSymbols::symbolSet_t::iterator symbol,
    155       Coverage::CoverageRanges::ranges_t::iterator    range
     154      Coverage::DesiredSymbols::symbolSet_t::iterator symbol
    156155    );
    157156
  • rtems-coverage/ReportsText.cc

    r2d88955 r69984ed  
    207207
    208208bool  ReportsText::PutSymbolSummaryLine(
    209   FILE*                                      report,
    210   unsigned int                                     number,
    211   Coverage::DesiredSymbols::symbolSet_t::iterator symbol,
    212   Coverage::CoverageRanges::ranges_t::iterator    range
    213 )
    214 {
    215   fprintf(
    216     report,
    217     "%d\t%s\t%s\n",
    218     range->highAddress - range->lowAddress + 1,
    219     symbol->first.c_str(),
    220     range->lowSourceLine.c_str()
    221   );
    222   return true;
    223 }
    224 
    225 }
     209  FILE*                                           report,
     210  unsigned int                                    number,
     211  Coverage::DesiredSymbols::symbolSet_t::iterator symbol
     212)
     213{
     214  return true;
     215}
     216
     217}
  • rtems-coverage/ReportsText.h

    r2d88955 r69984ed  
    9898      FILE*                                           report,
    9999      unsigned int                                    number,
    100       Coverage::DesiredSymbols::symbolSet_t::iterator symbol,
    101       Coverage::CoverageRanges::ranges_t::iterator    range
     100      Coverage::DesiredSymbols::symbolSet_t::iterator symbol
    102101    );
    103102
  • rtems-coverage/covoar.cc

    r2d88955 r69984ed  
    351351  SymbolsToAnalyze->computeUncovered();
    352352
     353  // Calculate remainder of statistics.
     354  if (Verbose)
     355    fprintf( stderr, "Calculate statistics\n" );
     356  SymbolsToAnalyze->caculateStatistics();
     357
    353358  // Look up the source lines for any uncovered ranges and branches.
    354359  if (Verbose)
     
    361366  // Report the coverage data.
    362367  //
     368  if (Verbose)
     369    fprintf(
     370      stderr, "Generate Reports\n"
     371    );
    363372  Coverage::GenerateReports();
    364373
  • rtems-coverage/covoar.css

    r2d88955 r69984ed  
    225225    text-align:  center;
    226226    color: rgb(0,0,0);
    227     font-size: 0.9em;
     227    font-size: 4.0em;
    228228    font-weight: bold;
     229    line-height: 0.9;
    229230    padding-top: 5px;
    230231    padding-left: 0px;
Note: See TracChangeset for help on using the changeset viewer.