Changeset 87fc2e4 in rtems-testing


Ignore:
Timestamp:
May 12, 2010, 2:04:48 PM (9 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.11, 8895273c193787f84c4585a10f6d6aceb3b25dc4
Children:
b23d1ad
Parents:
fb545f3
Message:

2010-05-12 Joel Sherrill <joel.sherrilL@…>

Location:
rtems-coverage
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • rtems-coverage/ChangeLog

    rfb545f3 r87fc2e4  
     12010-05-12      Joel Sherrill <joel.sherrilL@OARcorp.com>
     2
     3        * ReportsHtml.cc, ReportsHtml.h: Add separate html file for each
     4        explanation and link to it from the tables.
     5
    162010-05-12      Joel Sherrill <joel.sherrilL@OARcorp.com>
    27
  • rtems-coverage/ReportsHtml.cc

    rfb545f3 r87fc2e4  
    1111#include "CoverageRanges.h"
    1212#include "DesiredSymbols.h"
    13 #include "Explanations.h"
    1413#include "ObjdumpProcessor.h"
    1514
    16 
    1715namespace Coverage {
    1816
    19 ReportsHtml::ReportsHtml():
    20   ReportsBase()
    21 {
    22   reportExtension_m = ".html";
    23 }
    24 
    25 ReportsHtml::~ReportsHtml()
    26 {
    27 }
    28 
    29 FILE* ReportsHtml::OpenFile(
    30   const char* const fileName
    31 )
    32 {
    33   FILE*  aFile;
    34  
    35   // Open the file
    36   aFile = ReportsBase::OpenFile( fileName );
    37 
    38   // Put Header information on the file
    39   fprintf( aFile, "<html>\n");
    40   fprintf( aFile, "<meta http-equiv=\"Content-Language\" content=\"English\" >\n");
    41   fprintf(
    42     aFile,
    43     "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=us-ascii\" >\n"
    44   );
    45   fprintf(
    46     aFile,
    47     "<link rel=\"stylesheet\" type=\"text/css\" href=\"covoar.css\" media=\"screen\" >\n"
    48   );
    49   fprintf( aFile, "<body>\n");
    50 
    51   lastState_m = A_SOURCE;
    52   fprintf( aFile, "<pre class=\"code\">\n" );
    53 
    54   return aFile;
    55 }
    56 
    57 FILE* ReportsHtml::OpenBranchFile(
    58   const char* const fileName,
    59   bool              hasBranches
    60 )
    61 {
    62   FILE *aFile;
    63 
    64   // Open the file
    65   aFile = OpenFile(fileName);
    66 
    67   if ( hasBranches ) {
     17  ReportsHtml::ReportsHtml():
     18    ReportsBase()
     19  {
     20    reportExtension_m = ".html";
     21  }
     22
     23  ReportsHtml::~ReportsHtml()
     24  {
     25  }
     26
     27  FILE* ReportsHtml::OpenFile(
     28    const char* const fileName
     29  )
     30  {
     31    FILE*  aFile;
     32   
     33    // Open the file
     34    aFile = ReportsBase::OpenFile( fileName );
     35
     36    // Put Header information on the file
     37    fprintf(
     38      aFile,
     39      "<html>\n"
     40      "<meta http-equiv=\"Content-Language\" content=\"English\" >\n"
     41      "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=us-ascii\" >\n"
     42      "<link rel=\"stylesheet\" type=\"text/css\" href=\"covoar.css\" media=\"screen\" >\n"
     43      "<body>\n"
     44      "<pre class=\"code\">\n"
     45    );
     46
     47
     48    return aFile;
     49  }
     50
     51  FILE* ReportsHtml::OpenBranchFile(
     52    const char* const fileName,
     53    bool              hasBranches
     54  )
     55  {
     56    FILE *aFile;
     57
     58    // Open the file
     59    aFile = OpenFile(fileName);
     60
     61    if ( hasBranches ) {
     62      // Put header information into the file
     63      fprintf(
     64        aFile,
     65        "<table class=\"covoar-table\">\n"
     66        "<tbody class=\"covoar-tbody\">\n"
     67        "<tr class=\"covoar-tr covoar-tr-first\">\n"
     68        "<th class=\"covoar-th\">Index</th>\n"
     69        "<th class=\"covoar-th\">Symbol</th>\n"
     70        "<th class=\"covoar-th\">Line</th>\n"
     71        "<th class=\"covoar-th\">Size</th>\n"
     72        "<th class=\"covoar-th\">Size</th>\n"
     73        "<th class=\"covoar-th\">Reason</th>\n"
     74        "<th class=\"covoar-th\">Classification</th>\n"
     75        "<th class=\"covoar-th\">Explanation</th>\n"
     76        "</tr>\n"
     77
     78        "<tr class=\"covoar-tr covoar-tr-first\">\n"
     79        "<th class=\"covoar-th\"></th>\n"
     80        "<th class=\"covoar-th\"></th>\n"
     81        "<th class=\"covoar-th\">Bytes</th>\n"
     82        "<th class=\"covoar-th\">Instructions</th>\n"
     83        "<th class=\"covoar-th\"></th>\n"
     84        "<th class=\"covoar-th\"></th>\n"
     85        "<th class=\"covoar-th\"></th>\n"
     86        "</tr>\n"
     87      );
     88    }
     89   
     90    return aFile;
     91  }
     92
     93  FILE*  ReportsHtml::OpenCoverageFile(
     94    const char* const fileName
     95  )
     96  {
     97    FILE *aFile;
     98
     99    // Open the file
     100    aFile = OpenFile(fileName);
     101
    68102    // Put header information into the file
    69     fprintf( aFile, "<table class=\"covoar-table\">\n");
    70     fprintf( aFile, "<tbody class=\"covoar-tbody\">\n");
    71     fprintf( aFile, "<tr class=\"covoar-tr covoar-tr-first\">\n");
    72     fprintf( aFile, "<th class=\"covoar-th\">Index</th>\n");
    73     fprintf( aFile, "<th class=\"covoar-th\">Symbol</th>\n");
    74     fprintf( aFile, "<th class=\"covoar-th\">Line</th>\n");
    75     fprintf( aFile, "<th class=\"covoar-th\">Size</th>\n");
    76     fprintf( aFile, "<th class=\"covoar-th\">Size</th>\n");
    77     fprintf( aFile, "<th class=\"covoar-th\">Reason</th>\n");
    78     fprintf( aFile, "<th class=\"covoar-th\">Classification</th>\n");
    79     fprintf( aFile, "<th class=\"covoar-th\">Explanation</th>\n");
    80     fprintf( aFile, "</tr>\n");
    81 
    82     fprintf( aFile, "<tr class=\"covoar-tr covoar-tr-first\">\n");
    83     fprintf( aFile, "<th class=\"covoar-th\"></th>\n");
    84     fprintf( aFile, "<th class=\"covoar-th\"></th>\n");
    85     fprintf( aFile, "<th class=\"covoar-th\">Bytes</th>\n");
    86     fprintf( aFile, "<th class=\"covoar-th\">Instructions</th>\n");
    87     fprintf( aFile, "<th class=\"covoar-th\"></th>\n");
    88     fprintf( aFile, "<th class=\"covoar-th\"></th>\n");
    89     fprintf( aFile, "<th class=\"covoar-th\"></th>\n");
    90     fprintf( aFile, "</tr>\n");
    91   }
    92  
    93   return aFile;
    94 }
    95 
    96 FILE*  ReportsHtml::OpenCoverageFile(
    97   const char* const fileName
    98 )
    99 {
    100   FILE *aFile;
    101 
    102   // Open the file
    103   aFile = OpenFile(fileName);
    104 
    105   // Put header information into the file
    106   fprintf( aFile, "<table class=\"covoar-table\">\n");
    107   fprintf( aFile, "<tbody class=\"covoar-tbody\">\n");
    108   fprintf( aFile, "<tr class=\"covoar-tr covoar-tr-first\">\n");
    109   fprintf( aFile, "<th class=\"covoar-th\">Index</th>\n");
    110   fprintf( aFile, "<th class=\"covoar-th\">Symbol</th>\n");
    111   fprintf( aFile, "<th class=\"covoar-th\">Range</th>\n");
    112   fprintf( aFile, "<th class=\"covoar-th\">Size</br>Bytes</th>\n");
    113   fprintf( aFile, "<th class=\"covoar-th\">Size</br>Instructions</th>\n");
    114   fprintf( aFile, "<th class=\"covoar-th\">Classification</th>\n");
    115   fprintf( aFile, "<th class=\"covoar-th\">Explanation</th>\n");
    116   fprintf( aFile, "</tr>\n");
    117 
    118   return aFile;
    119 }
    120 
    121 FILE*  ReportsHtml::OpenSizeFile(
    122   const char* const fileName
    123 )
    124 {
    125   FILE *aFile;
    126 
    127   // Open the file
    128   aFile = OpenFile(fileName);
    129 
    130   // Put header information into the file
    131   fprintf( aFile, "<table class=\"covoar-table\">\n");
    132   fprintf( aFile, "<tbody class=\"covoar-tbody\">\n");
    133   fprintf( aFile, "<tr class=\"covoar-tr covoar-tr-first\">\n");
    134   fprintf( aFile, "<th class=\"covoar-th\">Size</th>\n");
    135   fprintf( aFile, "<th class=\"covoar-th\">Symbol</th>\n");
    136   fprintf( aFile, "<th class=\"covoar-th\">File</th>\n");
    137   fprintf( aFile, "</tr>\n");
    138 
    139   return aFile;
    140 }
    141 
    142 void ReportsHtml::PutAnnotatedLine(
    143   FILE*                aFile,
    144   AnnotatedLineState_t state,
    145   std::string          line,
    146   uint32_t             id
    147 )
    148 {
    149   std::string stateText;
    150   char        number[10];
    151 
    152  
    153   sprintf(number,"%d", id);
    154 
    155   // Set the stateText based upon the current state.
    156   switch (state) {
    157     case  A_SOURCE:
    158       stateText = "</pre>\n<pre class=\"code\">\n";
    159       break;
    160     case  A_EXECUTED:
    161       stateText = "</pre>\n<pre class=\"codeExecuted\">\n";
    162       break;
    163     case  A_NEVER_EXECUTED:
    164       stateText = "</pre>\n";
    165       stateText += "<a name=\"range";
    166       stateText += number;
    167       stateText += "\"></a><pre class=\"codeNotExecuted\">\n";
    168       break;
    169     case  A_BRANCH_TAKEN:
    170       stateText = "</pre>\n";
    171       stateText += "<a name=\"range";
    172       stateText += number;
    173       stateText += "\"></a><pre class=\"codeAlwaysTaken\">\n";
    174       break;
    175     case  A_BRANCH_NOT_TAKEN:
    176       stateText = "</pre>\n";
    177       stateText += "<a name=\"range";
    178       stateText += number;
    179       stateText += "\"></a><pre class=\"codeNeverTaken\">\n";
    180       break;
    181     default:
    182       fprintf(stderr, "ERROR:  ReportsHtml::PutAnnotatedLine Unknown state\n");
    183       exit( -1 );
    184       break;
    185   }
    186 
    187   // If the state has not changed there is no need to change the text block
    188   // format.  If it has changed close out the old format and open up the
    189   // new format.
    190   if ( state != lastState_m ) {
    191     fprintf( aFile, stateText.c_str() );
    192     lastState_m = state;
    193   }
    194 
    195   // For all the characters in the line replace html reserved special characters
    196   // and output the line. Note that for a /pre block this is only a '<' symbol.
    197   for (unsigned int i=0; i<line.size(); i++ )
    198   {
    199     if ( line[i] == '<' )
    200       fprintf( aFile, "&lt;" );
     103    fprintf(
     104      aFile,
     105      "<table class=\"covoar-table\">\n"
     106      "<tbody class=\"covoar-tbody\">\n"
     107      "<tr class=\"covoar-tr covoar-tr-first\">\n"
     108      "<th class=\"covoar-th\">Index</th>\n"
     109      "<th class=\"covoar-th\">Symbol</th>\n"
     110      "<th class=\"covoar-th\">Range</th>\n"
     111      "<th class=\"covoar-th\">Size</br>Bytes</th>\n"
     112      "<th class=\"covoar-th\">Size</br>Instructions</th>\n"
     113      "<th class=\"covoar-th\">Classification</th>\n"
     114      "<th class=\"covoar-th\">Explanation</th>\n"
     115      "</tr>\n"
     116    );
     117
     118    return aFile;
     119  }
     120
     121  FILE*  ReportsHtml::OpenSizeFile(
     122    const char* const fileName
     123  )
     124  {
     125    FILE *aFile;
     126
     127    // Open the file
     128    aFile = OpenFile(fileName);
     129
     130    // Put header information into the file
     131    fprintf(
     132      aFile,
     133      "<table class=\"covoar-table\">\n"
     134      "<tbody class=\"covoar-tbody\">\n"
     135      "<tr class=\"covoar-tr covoar-tr-first\">\n"
     136      "<th class=\"covoar-th\">Size</th>\n"
     137      "<th class=\"covoar-th\">Symbol</th>\n"
     138      "<th class=\"covoar-th\">File</th>\n"
     139      "</tr>\n"
     140    );
     141    return aFile;
     142  }
     143
     144  void ReportsHtml::PutAnnotatedLine(
     145    FILE*                aFile,
     146    AnnotatedLineState_t state,
     147    std::string          line,
     148    uint32_t             id
     149  )
     150  {
     151    std::string stateText;
     152    char        number[10];
     153
     154   
     155    sprintf(number,"%d", id);
     156
     157    // Set the stateText based upon the current state.
     158    switch (state) {
     159      case  A_SOURCE:
     160        stateText = "</pre>\n<pre class=\"code\">\n";
     161        break;
     162      case  A_EXECUTED:
     163        stateText = "</pre>\n<pre class=\"codeExecuted\">\n";
     164        break;
     165      case  A_NEVER_EXECUTED:
     166        stateText = "</pre>\n";
     167        stateText += "<a name=\"range";
     168        stateText += number;
     169        stateText += "\"></a><pre class=\"codeNotExecuted\">\n";
     170        break;
     171      case  A_BRANCH_TAKEN:
     172        stateText = "</pre>\n";
     173        stateText += "<a name=\"range";
     174        stateText += number;
     175        stateText += "\"></a><pre class=\"codeAlwaysTaken\">\n";
     176        break;
     177      case  A_BRANCH_NOT_TAKEN:
     178        stateText = "</pre>\n";
     179        stateText += "<a name=\"range";
     180        stateText += number;
     181        stateText += "\"></a><pre class=\"codeNeverTaken\">\n";
     182        break;
     183      default:
     184        fprintf(stderr, "ERROR:  ReportsHtml::PutAnnotatedLine Unknown state\n");
     185        exit( -1 );
     186        break;
     187    }
     188
     189    // If the state has not changed there is no need to change the text block
     190    // format.  If it has changed close out the old format and open up the
     191    // new format.
     192    if ( state != lastState_m ) {
     193      fprintf( aFile, stateText.c_str() );
     194      lastState_m = state;
     195    }
     196
     197    // For all the characters in the line replace html reserved special
     198    // characters and output the line. Note that for a /pre block this
     199    // is only a '<' symbol.
     200    for (unsigned int i=0; i<line.size(); i++ ) {
     201      if ( line[i] == '<' )
     202        fprintf( aFile, "&lt;" );
     203      else
     204        fprintf( aFile, "%c", line[i] );
     205    }
     206    fprintf( aFile, "\n");
     207  }
     208
     209  bool ReportsHtml::PutNoBranchInfo(
     210    FILE* report
     211  )
     212  {
     213    if ( BranchInfoAvailable )
     214      fprintf( report, "All branch paths taken.\n" );
    201215    else
    202       fprintf( aFile, "%c", line[i] );
    203   }
    204   fprintf( aFile, "\n");
    205 }
    206 
    207 bool ReportsHtml::PutNoBranchInfo(
    208   FILE* report
    209 )
    210 {
    211   if ( BranchInfoAvailable )
    212     fprintf( report, "All branch paths taken.\n" );
    213   else
    214     fprintf( report, "No branch information found.\n" );
    215   return true;
    216 }
    217 
    218 bool ReportsHtml::PutBranchEntry(
    219   FILE*                                            report,
    220   unsigned int                                     count,
    221   Coverage::DesiredSymbols::symbolSet_t::iterator  symbolPtr,
    222   Coverage::CoverageRanges::ranges_t::iterator     rangePtr
    223 )
    224 {
    225   const Coverage::Explanation* explanation;
    226 
    227 
    228   // Mark the background color different for odd and even lines.
    229   fprintf( report, "</tr>\n");
    230   if ( ( count%2 ) == 0 )
    231     fprintf( report, "<tr class=\"covoar-tr covoar-tr-even\">\n");
    232   else
    233     fprintf( report, "<tr class=\"covoar-tr covoar-tr-odd\">\n");
    234 
    235   // index
    236   fprintf(
    237     report,
    238     "<td class=\"covoar-td\" align=\"center\"><a href =\"annotated.html#range%d\">%d</td>\n",
    239      rangePtr->id,
    240      rangePtr->id
    241    );
    242 
    243   // symbol
    244   fprintf(
    245     report,
    246     "<td class=\"covoar-td\" align=\"center\">%s</td>\n",   
    247     symbolPtr->first.c_str()
    248   );
    249 
    250   // line
    251   fprintf(
    252     report,
    253     "<td class=\"covoar-td\" align=\"center\">%s</td>\n",   
    254     rangePtr->lowSourceLine.c_str()
    255   );
    256  
    257   // Size in bytes
    258   fprintf(
    259     report,
    260     "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
    261     rangePtr->highAddress - rangePtr->lowAddress + 1
    262   );
    263 
    264   // Size in instructions
    265   fprintf(
    266     report,
    267     "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
    268   );
    269 
    270   // Reason Branch was uncovered
    271   if (rangePtr->reason ==
    272     Coverage::CoverageRanges::UNCOVERED_REASON_BRANCH_ALWAYS_TAKEN)
    273     fprintf(
    274       report,
    275       "<td class=\"covoar-td\" align=\"center\">Always Taken</td>\n"
    276     );
    277   else if (rangePtr->reason ==
    278     Coverage::CoverageRanges::UNCOVERED_REASON_BRANCH_NEVER_TAKEN)
    279     fprintf(
    280       report,
    281       "<td class=\"covoar-td\" align=\"center\">Never Taken</td>\n"
    282     );
    283 
    284   // See if an explanation is available
    285   explanation = AllExplanations->lookupExplanation( rangePtr->lowSourceLine );
    286   if ( !explanation ) {
    287     fprintf(
    288       report,
    289       "<td class=\"covoar-td\" align=\"center\">NONE</td>\n"
    290     );
    291     fprintf(
    292       report,
    293       "<td class=\"covoar-td\" align=\"center\">No Explanation</td>\n"
    294     );
    295   } else {
    296     fprintf(
    297       report,
    298       "<td class=\"covoar-td\" align=\"center\">%s</td>\n",
    299       explanation->classification.c_str()
    300     );
    301     fprintf(
    302       report,
    303       "<td class=\"covoar-td\" align=\"center\">FILL ME IN</td>\n"
    304     );
    305 #if 0
    306     for ( unsigned int i=0 ;
    307           i < explanation->explanation.size();
    308           i++) {
     216      fprintf( report, "No branch information found.\n" );
     217    return true;
     218  }
     219
     220  bool ReportsHtml::PutBranchEntry(
     221    FILE*                                            report,
     222    unsigned int                                     count,
     223    Coverage::DesiredSymbols::symbolSet_t::iterator  symbolPtr,
     224    Coverage::CoverageRanges::ranges_t::iterator     rangePtr
     225  )
     226  {
     227    const Coverage::Explanation* explanation;
     228
     229    // Mark the background color different for odd and even lines.
     230    fprintf( report, "</tr>\n");
     231    if ( ( count%2 ) == 0 )
     232      fprintf( report, "<tr class=\"covoar-tr covoar-tr-even\">\n");
     233    else
     234      fprintf( report, "<tr class=\"covoar-tr covoar-tr-odd\">\n");
     235
     236    // index
     237    fprintf(
     238      report,
     239      "<td class=\"covoar-td\" align=\"center\">"
     240      "<a href =\"annotated.html#range%d\">%d</td>\n",
     241      rangePtr->id,
     242      rangePtr->id
     243     );
     244
     245    // symbol
     246    fprintf(
     247      report,
     248      "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
     249      symbolPtr->first.c_str()
     250    );
     251
     252    // line
     253    fprintf(
     254      report,
     255      "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
     256      rangePtr->lowSourceLine.c_str()
     257    );
     258   
     259    // Size in bytes
     260    fprintf(
     261      report,
     262      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     263      rangePtr->highAddress - rangePtr->lowAddress + 1
     264    );
     265
     266    // Size in instructions
     267    fprintf(
     268      report,
     269      "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     270    );
     271
     272    // Reason Branch was uncovered
     273    if (rangePtr->reason ==
     274      Coverage::CoverageRanges::UNCOVERED_REASON_BRANCH_ALWAYS_TAKEN)
     275      fprintf(
     276        report,
     277        "<td class=\"covoar-td\" align=\"center\">Always Taken</td>\n"
     278      );
     279    else if (rangePtr->reason ==
     280      Coverage::CoverageRanges::UNCOVERED_REASON_BRANCH_NEVER_TAKEN)
     281      fprintf(
     282        report,
     283        "<td class=\"covoar-td\" align=\"center\">Never Taken</td>\n"
     284      );
     285
     286    // See if an explanation is available
     287    explanation = AllExplanations->lookupExplanation( rangePtr->lowSourceLine );
     288    if ( !explanation ) {
     289      fprintf(
     290        report,
     291        "<td class=\"covoar-td\" align=\"center\">No Explanation</td>\n"
     292      );
     293    } else {
     294      char explanationFile[48];
     295
     296      sprintf( explanationFile, "explanation%d.html", rangePtr->id );
     297      fprintf(
     298        report,
     299        "<td class=\"covoar-td\" align=\"center\">%s</td>\n"
     300        "<td class=\"covoar-td\" align=\"center\">"
     301        "<a href=\"%s\">Explanation</a></td>\n",
     302        explanation->classification.c_str(),
     303        explanationFile
     304      );
     305      WriteExplationFile( explanationFile, explanation );
     306    }
     307
     308    fprintf( report, "</tr>\n");
     309
     310    return true;
     311  }
     312
     313  bool ReportsHtml::WriteExplationFile(
     314    const char*                  fileName,
     315    const Coverage::Explanation* explanation
     316  )
     317  {
     318    FILE* report;
     319
     320    report = OpenFile( fileName );
     321
     322    for ( unsigned int i=0 ; i < explanation->explanation.size(); i++) {
    309323      fprintf(
    310         report,
    311         "%s\n",
    312         explanation->explanation[i].c_str()
    313       );
    314     }
    315 #endif
    316   }
    317 
    318   fprintf( report, "</tr>\n");
    319 
    320   return true;
    321 }
    322 
    323 void ReportsHtml::putCoverageNoRange(
    324   FILE*         report,
    325   unsigned int  count,
    326   std::string   symbol
    327 )
    328 {
    329 
    330   // Mark the background color different for odd and even lines.
    331   fprintf( report, "</tr>\n");
    332   if ( ( count%2 ) == 0 )
    333     fprintf( report, "<tr class=\"covoar-tr covoar-tr-even\">\n");
    334   else
    335     fprintf( report, "<tr class=\"covoar-tr covoar-tr-odd\">\n");
    336 
    337   // index
    338   fprintf(
    339     report,
    340     "<td class=\"covoar-td\" align=\"center\"></td>\n"
    341    );
    342 
    343   // symbol
    344   fprintf(
    345     report,
    346     "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
    347     symbol.c_str()
    348   );
    349 
    350   // starting line
    351   fprintf(
    352     report,
    353     "<td class=\"covoar-td\" align=\"center\"></td>\n"
    354    );
    355    
    356   // Size in bytes
    357   fprintf(
    358     report,
    359     "<td class=\"covoar-td\" align=\"center\"></td>\n"
    360   );
    361 
    362   // Size in instructions
    363   fprintf(
    364     report,
    365     "<td class=\"covoar-td\" align=\"center\"></td>\n"
    366   );
    367 
    368   // See if an explanation is available
    369   fprintf(
    370     report,
    371     "<td class=\"covoar-td\" align=\"center\"></td>\n"
    372   );
    373   fprintf(
    374     report,
    375     "<td class=\"covoar-td\" align=\"center\">"
    376     "This symbol was never referenced by an analyzed executable.  "
    377     "Therefore there is no size or disassembly for this symbol.  "
    378     "This could be due to symbol misspelling or lack of a test for"
    379     "this symbol.</td>\n"
    380   );
    381 
    382   fprintf( report, "</tr>\n");
    383 }
    384 
    385 bool ReportsHtml::PutCoverageLine(
    386   FILE*                                            report,
    387   unsigned int                                     count,
    388   Coverage::DesiredSymbols::symbolSet_t::iterator  symbolPtr,
    389   Coverage::CoverageRanges::ranges_t::iterator     rangePtr
    390 )
    391 {
    392   const Coverage::Explanation*   explanation;
    393 
    394 
    395   // Mark the background color different for odd and even lines.
    396   fprintf( report, "</tr>\n");
    397   if ( ( count%2 ) == 0 )
    398     fprintf( report, "<tr class=\"covoar-tr covoar-tr-even\">\n");
    399   else
    400     fprintf( report, "<tr class=\"covoar-tr covoar-tr-odd\">\n");
    401 
    402   // index
    403   fprintf(
    404     report,
    405     "<td class=\"covoar-td\" align=\"center\"><a href =\"annotated.html#range%d\">%d</td>\n",
    406      rangePtr->id,
    407      rangePtr->id
    408    );
    409 
    410   // symbol
    411   fprintf(
    412     report,
    413     "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
    414     symbolPtr->first.c_str()
    415   );
    416 
    417   // starting line
    418   fprintf(
    419     report,
    420     "<td class=\"covoar-td\" align=\"center\">%s(0x%x)</br>%s(0x%x)</td>\n",
    421     rangePtr->lowSourceLine.c_str(),
    422     rangePtr->lowAddress,
    423     rangePtr->highSourceLine.c_str(),
    424     rangePtr->highAddress
    425    );
    426    
    427   // Size in bytes
    428   fprintf(
    429     report,
    430     "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
    431     rangePtr->highAddress - rangePtr->lowAddress + 1
    432   );
    433 
    434   // Size in instructions
    435   fprintf(
    436     report,
    437     "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
    438   );
    439 
    440   // See if an explanation is available
    441   explanation = AllExplanations->lookupExplanation( rangePtr->lowSourceLine );
    442   if ( !explanation ) {
    443     fprintf(
    444       report,
    445       "<td class=\"covoar-td\" align=\"center\">NONE</td>\n"
    446     );
    447     fprintf(
    448       report,
    449       "<td class=\"covoar-td\" align=\"center\">No Explanation</td>\n"
    450     );
    451   } else {
    452     fprintf(
    453       report,
    454       "<td class=\"covoar-td\" align=\"center\">%s</td>\n",
    455       explanation->classification.c_str()
    456     );
    457     fprintf(
    458       report,
    459       "<td class=\"covoar-td\" align=\"center\">FILL ME IN</td>\n"
    460     );
    461 
    462 
    463     #if  0
    464     for ( unsigned int i=0; i < explanation->explanation.size(); i++) {
    465       fprintf( report,"%s\n", explanation->explanation[i].c_str() );
    466     }
    467     #endif
    468   }
    469 
    470   fprintf( report, "</tr>\n");
    471 
    472   return true;
    473 }
    474 
    475 bool  ReportsHtml::PutSizeLine(
    476   FILE*                                           report,
    477   unsigned int                                    count,
    478   Coverage::DesiredSymbols::symbolSet_t::iterator symbol,
    479   Coverage::CoverageRanges::ranges_t::iterator    range
    480 )
    481 {
    482   // Mark the background color different for odd and even lines.
    483   fprintf( report, "</tr>\n");
    484   if ( ( count%2 ) == 0 )
    485     fprintf( report, "<tr class=\"covoar-tr covoar-tr-even\">\n");
    486   else
    487     fprintf( report, "<tr class=\"covoar-tr covoar-tr-odd\">\n");
    488 
    489   // size
    490   fprintf(
    491     report,
    492     "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
    493     range->highAddress - range->lowAddress + 1
    494   );
    495 
    496   // symbol
    497   fprintf(
    498     report,
    499     "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
    500     symbol->first.c_str()
    501   );
    502 
    503   // file
    504   fprintf(
    505     report,
    506     "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
    507     range->lowSourceLine.c_str()
    508   );
    509 
    510 
    511 
    512   return true;
    513 }
    514 
    515 void ReportsHtml::CloseAnnotatedFile(
    516   FILE*  aFile
    517 )
    518 {
    519   fprintf( aFile,"</pre>\n");
    520   fprintf( aFile,"</body>\n");
    521   fprintf( aFile,"</html>");
    522 
    523   CloseFile(aFile);
    524 }
    525 
    526 void ReportsHtml::CloseBranchFile(
    527   FILE*  aFile,
    528   bool   hasBranches
    529 )
    530 {
    531   if ( hasBranches ) {
     324        report,
     325        "%s\n",
     326        explanation->explanation[i].c_str()
     327      );
     328    }
     329    CloseFile( report );
     330    return true;
     331  }
     332
     333  void ReportsHtml::putCoverageNoRange(
     334    FILE*         report,
     335    unsigned int  count,
     336    std::string   symbol
     337  )
     338  {
     339
     340    // Mark the background color different for odd and even lines.
     341    fprintf( report, "</tr>\n");
     342    if ( ( count%2 ) == 0 )
     343      fprintf( report, "<tr class=\"covoar-tr covoar-tr-even\">\n");
     344    else
     345      fprintf( report, "<tr class=\"covoar-tr covoar-tr-odd\">\n");
     346
     347    // index
     348    fprintf(
     349      report,
     350      "<td class=\"covoar-td\" align=\"center\"></td>\n"
     351     );
     352
     353    // symbol
     354    fprintf(
     355      report,
     356      "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
     357      symbol.c_str()
     358    );
     359
     360    // starting line
     361    fprintf(
     362      report,
     363      "<td class=\"covoar-td\" align=\"center\"></td>\n"
     364     );
     365     
     366    // Size in bytes
     367    fprintf(
     368      report,
     369      "<td class=\"covoar-td\" align=\"center\"></td>\n"
     370    );
     371
     372    // Size in instructions
     373    fprintf(
     374      report,
     375      "<td class=\"covoar-td\" align=\"center\"></td>\n"
     376    );
     377
     378    // See if an explanation is available
     379    fprintf(
     380      report,
     381      "<td class=\"covoar-td\" align=\"center\"></td>\n"
     382    );
     383    fprintf(
     384      report,
     385      "<td class=\"covoar-td\" align=\"center\">"
     386      "This symbol was never referenced by an analyzed executable.  "
     387      "Therefore there is no size or disassembly for this symbol.  "
     388      "This could be due to symbol misspelling or lack of a test for"
     389      "this symbol.</td>\n"
     390    );
     391
     392    fprintf( report, "</tr>\n");
     393  }
     394
     395  bool ReportsHtml::PutCoverageLine(
     396    FILE*                                            report,
     397    unsigned int                                     count,
     398    Coverage::DesiredSymbols::symbolSet_t::iterator  symbolPtr,
     399    Coverage::CoverageRanges::ranges_t::iterator     rangePtr
     400  )
     401  {
     402    const Coverage::Explanation*   explanation;
     403
     404
     405    // Mark the background color different for odd and even lines.
     406    fprintf( report, "</tr>\n");
     407    if ( ( count%2 ) == 0 )
     408      fprintf( report, "<tr class=\"covoar-tr covoar-tr-even\">\n");
     409    else
     410      fprintf( report, "<tr class=\"covoar-tr covoar-tr-odd\">\n");
     411
     412    // index
     413    fprintf(
     414      report,
     415      "<td class=\"covoar-td\" align=\"center\"><a href =\"annotated.html#range%d\">%d</td>\n",
     416       rangePtr->id,
     417       rangePtr->id
     418     );
     419
     420    // symbol
     421    fprintf(
     422      report,
     423      "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
     424      symbolPtr->first.c_str()
     425    );
     426
     427    // starting line
     428    fprintf(
     429      report,
     430      "<td class=\"covoar-td\" align=\"center\">%s(0x%x)</br>%s(0x%x)</td>\n",
     431      rangePtr->lowSourceLine.c_str(),
     432      rangePtr->lowAddress,
     433      rangePtr->highSourceLine.c_str(),
     434      rangePtr->highAddress
     435     );
     436     
     437    // Size in bytes
     438    fprintf(
     439      report,
     440      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     441      rangePtr->highAddress - rangePtr->lowAddress + 1
     442    );
     443
     444    // Size in instructions
     445    fprintf(
     446      report,
     447      "<td class=\"covoar-td\" align=\"center\">XXX</td>\n"
     448    );
     449
     450    // See if an explanation is available
     451    explanation = AllExplanations->lookupExplanation( rangePtr->lowSourceLine );
     452    if ( !explanation ) {
     453      fprintf(
     454        report,
     455        "<td class=\"covoar-td\" align=\"center\">NONE</td>\n"
     456      );
     457      fprintf(
     458        report,
     459        "<td class=\"covoar-td\" align=\"center\">No Explanation</td>\n"
     460      );
     461    } else {
     462      char explanationFile[48];
     463
     464      sprintf( explanationFile, "explanation%d.html", rangePtr->id );
     465      fprintf(
     466        report,
     467        "<td class=\"covoar-td\" align=\"center\">%s</td>\n"
     468        "<td class=\"covoar-td\" align=\"center\">"
     469        "<a href=\"%s\">Explanation</a></td>\n",
     470        explanation->classification.c_str(),
     471        explanationFile
     472      );
     473      WriteExplationFile( explanationFile, explanation );
     474    }
     475
     476    fprintf( report, "</tr>\n");
     477
     478    return true;
     479  }
     480
     481  bool  ReportsHtml::PutSizeLine(
     482    FILE*                                           report,
     483    unsigned int                                    count,
     484    Coverage::DesiredSymbols::symbolSet_t::iterator symbol,
     485    Coverage::CoverageRanges::ranges_t::iterator    range
     486  )
     487  {
     488    // Mark the background color different for odd and even lines.
     489    fprintf( report, "</tr>\n");
     490    if ( ( count%2 ) == 0 )
     491      fprintf( report, "<tr class=\"covoar-tr covoar-tr-even\">\n");
     492    else
     493      fprintf( report, "<tr class=\"covoar-tr covoar-tr-odd\">\n");
     494
     495    // size
     496    fprintf(
     497      report,
     498      "<td class=\"covoar-td\" align=\"center\">%d</td>\n",
     499      range->highAddress - range->lowAddress + 1
     500    );
     501
     502    // symbol
     503    fprintf(
     504      report,
     505      "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
     506      symbol->first.c_str()
     507    );
     508
     509    // file
     510    fprintf(
     511      report,
     512      "<td class=\"covoar-td\" align=\"center\">%s</td>\n",     
     513      range->lowSourceLine.c_str()
     514    );
     515
     516
     517
     518    return true;
     519  }
     520
     521  void ReportsHtml::CloseAnnotatedFile(
     522    FILE*  aFile
     523  )
     524  {
     525    fprintf(
     526      aFile,
     527      "</pre>\n"
     528      "</body>\n"
     529      "</html>"
     530    );
     531
     532    CloseFile(aFile);
     533  }
     534
     535  void ReportsHtml::CloseBranchFile(
     536    FILE*  aFile,
     537    bool   hasBranches
     538  )
     539  {
     540    if ( hasBranches ) {
     541      fprintf(
     542        aFile,
     543        "</tbody>\n"
     544        "</table>\n"
     545      );
     546    }
     547    fprintf(
     548      aFile,
     549      "</pre>\n"
     550      "</body>\n"
     551      "</html>"
     552    );
     553
     554    CloseFile(aFile);
     555  }
     556
     557  void ReportsHtml::CloseCoverageFile(
     558    FILE*  aFile
     559  )
     560  {
     561    fprintf(
     562      aFile,
     563      "</tbody>\n"
     564      "</table>\n"
     565      "</pre>\n"
     566      "</body>\n"
     567      "</html>"
     568    );
     569
     570    CloseFile(aFile);
     571  }
     572
     573  void ReportsHtml::CloseSizeFile(
     574    FILE*  aFile
     575  )
     576  {
    532577    fprintf( aFile, "</tbody>\n" );
    533578    fprintf( aFile, "</table>\n" );
    534   }
    535   fprintf( aFile, "</pre>\n" );
    536   fprintf( aFile, "</body>\n");
    537   fprintf( aFile, "</html>");
    538 
    539   CloseFile(aFile);
     579    fprintf( aFile, "</pre>\n" );
     580    fprintf( aFile, "</pre>\n" );
     581    fprintf( aFile,"</body>\n");
     582    fprintf( aFile,"</html>");
     583
     584    CloseFile( aFile );
     585  }
     586
    540587}
    541 
    542 void ReportsHtml::CloseCoverageFile(
    543   FILE*  aFile
    544 )
    545 {
    546   fprintf( aFile, "</tbody>\n" );
    547   fprintf( aFile, "</table>\n" );
    548   fprintf( aFile, "</pre>\n" );
    549   fprintf( aFile,"</body>\n");
    550   fprintf( aFile,"</html>");
    551 
    552   CloseFile(aFile);
    553 }
    554 
    555 void ReportsHtml::CloseSizeFile(
    556   FILE*  aFile
    557 )
    558 {
    559   fprintf( aFile, "</tbody>\n" );
    560   fprintf( aFile, "</table>\n" );
    561   fprintf( aFile, "</pre>\n" );
    562   fprintf( aFile, "</pre>\n" );
    563   fprintf( aFile,"</body>\n");
    564   fprintf( aFile,"</html>");
    565 
    566   CloseFile( aFile );
    567 }
    568 
    569 }
  • rtems-coverage/ReportsHtml.h

    rfb545f3 r87fc2e4  
    1616#include <stdint.h>
    1717#include "ReportsBase.h"
     18#include "Explanations.h"
    1819
    1920namespace Coverage {
     
    131132    );
    132133
    133 };
     134    virtual bool WriteExplationFile(
     135      const char*                  fileName,
     136      const Coverage::Explanation* explanation
     137    );
     138  };
    134139
    135140}
Note: See TracChangeset for help on using the changeset viewer.