<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>change log for gcc-testing (2010-05-07)</title>
</head>
<body text='#000000' bgcolor='#ffffff'>
<a name='cs1'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>humph</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-05-07 Glenn Humphrey

        * CoverageReaderQEMU.cc, CoverageReaderRTEMS.cc,
        CoverageReaderSkyeye.cc, CoverageReaderTSIM.cc, DesiredSymbols.cc,
        DesiredSymbols.h, ExecutableInfo.cc, ExecutableInfo.h,
        ObjdumpProcessor.cc, ObjdumpProcessor.h, SymbolTable.cc,
        SymbolTable.h, covoar.cc: Removed the use of nm to generate the
        symbol for each executable. Modified the ObjdumpProcessor to populate
        the symbol table and create the coverage maps.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ChangeLog.diff?r1=text&tr1=1.205&r2=text&tr2=1.206&diff_format=h">M</a></td><td width='1%'>1.206</td><td width='100%'>rtems-coverage/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderQEMU.cc.diff?r1=text&tr1=1.11&r2=text&tr2=1.12&diff_format=h">M</a></td><td width='1%'>1.12</td><td width='100%'>rtems-coverage/CoverageReaderQEMU.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc.diff?r1=text&tr1=1.4&r2=text&tr2=1.5&diff_format=h">M</a></td><td width='1%'>1.5</td><td width='100%'>rtems-coverage/CoverageReaderRTEMS.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc.diff?r1=text&tr1=1.8&r2=text&tr2=1.9&diff_format=h">M</a></td><td width='1%'>1.9</td><td width='100%'>rtems-coverage/CoverageReaderSkyeye.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderTSIM.cc.diff?r1=text&tr1=1.6&r2=text&tr2=1.7&diff_format=h">M</a></td><td width='1%'>1.7</td><td width='100%'>rtems-coverage/CoverageReaderTSIM.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/DesiredSymbols.h.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>rtems-coverage/DesiredSymbols.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/DesiredSymbols.cc.diff?r1=text&tr1=1.5&r2=text&tr2=1.6&diff_format=h">M</a></td><td width='1%'>1.6</td><td width='100%'>rtems-coverage/DesiredSymbols.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ExecutableInfo.h.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>rtems-coverage/ExecutableInfo.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ExecutableInfo.cc.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>rtems-coverage/ExecutableInfo.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ObjdumpProcessor.h.diff?r1=text&tr1=1.8&r2=text&tr2=1.9&diff_format=h">M</a></td><td width='1%'>1.9</td><td width='100%'>rtems-coverage/ObjdumpProcessor.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ObjdumpProcessor.cc.diff?r1=text&tr1=1.28&r2=text&tr2=1.29&diff_format=h">M</a></td><td width='1%'>1.29</td><td width='100%'>rtems-coverage/ObjdumpProcessor.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/SymbolTable.h.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>rtems-coverage/SymbolTable.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/SymbolTable.cc.diff?r1=text&tr1=1.5&r2=text&tr2=1.6&diff_format=h">M</a></td><td width='1%'>1.6</td><td width='100%'>rtems-coverage/SymbolTable.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/covoar.cc.diff?r1=text&tr1=1.13&r2=text&tr2=1.14&diff_format=h">M</a></td><td width='1%'>1.14</td><td width='100%'>rtems-coverage/covoar.cc</td></tr>
</table>
<pre>
<font color='#006600'>diff -u gcc-testing/rtems-coverage/ChangeLog:1.205 gcc-testing/rtems-coverage/ChangeLog:1.206
--- gcc-testing/rtems-coverage/ChangeLog:1.205  Fri May  7 13:29:44 2010
+++ gcc-testing/rtems-coverage/ChangeLog        Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -1,3 +1,13 @@
</font><font color='#000088'>+2010-05-07    Glenn Humphrey
+
+       * CoverageReaderQEMU.cc, CoverageReaderRTEMS.cc,
+       CoverageReaderSkyeye.cc, CoverageReaderTSIM.cc, DesiredSymbols.cc,
+       DesiredSymbols.h, ExecutableInfo.cc, ExecutableInfo.h,
+       ObjdumpProcessor.cc, ObjdumpProcessor.h, SymbolTable.cc,
+       SymbolTable.h, covoar.cc: Removed the use of nm to generate the
+       symbol for each executable. Modified the ObjdumpProcessor to populate
+       the symbol table and create the coverage maps.
+
</font> 2010-05-07        Joel Sherrill <joel.sherrill@oarcorp.com>
 
        * do_coverage: Pick up style sheet for reports.

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderQEMU.cc:1.11 gcc-testing/rtems-coverage/CoverageReaderQEMU.cc:1.12
--- gcc-testing/rtems-coverage/CoverageReaderQEMU.cc:1.11       Thu Apr 29 14:12:31 2010
+++ gcc-testing/rtems-coverage/CoverageReaderQEMU.cc    Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -14,8 +14,8 @@
</font> #include <sys/stat.h>
 
 #include "CoverageReaderQEMU.h"
<font color='#880000'>-#include "ExecutableInfo.h"
</font> #include "CoverageMap.h"
<font color='#000088'>+#include "ExecutableInfo.h"
</font> 
 /* XXX really not always right */
 typedef uint32_t target_ulong;

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc:1.4 gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc:1.5
--- gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc:1.4       Fri Mar  5 10:45:37 2010
+++ gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc   Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -14,6 +14,7 @@
</font> #include <sys/stat.h>
 
 #include "CoverageReaderRTEMS.h"
<font color='#000088'>+#include "CoverageMap.h"
</font> #include "ExecutableInfo.h"
 #include "rtemscov_header.h"
 
<font color='#997700'>@@ -32,25 +33,26 @@
</font>     ExecutableInfo* const executableInformation
   )
   {
<font color='#880000'>-    FILE                        *coverageFile;
</font><font color='#000088'>+    CoverageMapBase*             aCoverageMap = NULL;
</font>     uintptr_t                    baseAddress;
<font color='#880000'>-    uintptr_t                    length;
-    int                          status;
-    uintptr_t                    i;
</font>     uint8_t                      cover;
<font color='#000088'>+    FILE*                        coverageFile;
</font>     rtems_coverage_map_header_t  header;
<font color='#000088'>+    uintptr_t                    i;
+    uintptr_t                    length;
</font>     struct stat                  statbuf;
<font color='#000088'>+    int                          status;
</font> 
     //
     // Verify that the coverage file has a non-zero size.
     //
     status = stat( file, &statbuf );
<font color='#880000'>-    if ( status == -1 ) {
</font><font color='#000088'>+    if (status == -1) {
</font>       fprintf( stderr, "Unable to stat %s\n", file );
       return false;
     }
 
<font color='#880000'>-    if ( statbuf.st_size == 0 ) {
</font><font color='#000088'>+    if (statbuf.st_size == 0) {
</font>       fprintf( stderr, "%s is 0 bytes long\n", file );
       return false;
     }
<font color='#997700'>@@ -59,13 +61,13 @@
</font>     // Open the coverage file and read the header.
     //
     coverageFile = fopen( file, "r" );
<font color='#880000'>-    if ( !coverageFile ) {
</font><font color='#000088'>+    if (!coverageFile) {
</font>       fprintf( stderr, "Unable to open %s\n", file );
       return false;
     }
 
     status = fread( &header, sizeof(header), 1, coverageFile );
<font color='#880000'>-    if ( status != 1 ) {
</font><font color='#000088'>+    if (status != 1) {
</font>       fprintf( stderr, "Unable to read header from %s\n", file );
       return false;
     }
<font color='#997700'>@@ -88,9 +90,9 @@
</font>     //
     // Read and process each line of the coverage file.
     //
<font color='#880000'>-    for ( i=0 ; i<length ; i++ ) {
</font><font color='#000088'>+    for (i=0; i<length; i++) {
</font>       status = fread( &cover, sizeof(uint8_t), 1, coverageFile );
<font color='#880000'>-      if ( status != 1 ) {
</font><font color='#000088'>+      if (status != 1) {
</font>         fprintf(
           stderr,
           "CoverageReaderRTEMS::ProcessFile - breaking after 0x%08x in %s\n",
<font color='#997700'>@@ -100,8 +102,14 @@
</font>         break;
       }
 
<font color='#880000'>-      if ( cover ) {
-        executableInformation->markWasExecuted( baseAddress + i );
</font><font color='#000088'>+      //
+      // Obtain the coverage map containing the address and
+      // mark the address as executed.
+      //
+      if (cover) {
+        aCoverageMap = executableInformation->getCoverageMap( baseAddress + i );
+        if (aCoverageMap)
+          aCoverageMap->setWasExecuted( baseAddress + i );
</font>       }
     }
 

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc:1.8 gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc:1.9
--- gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc:1.8      Fri Mar  5 10:45:37 2010
+++ gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc  Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -14,6 +14,7 @@
</font> #include <sys/stat.h>
 
 #include "CoverageReaderSkyeye.h"
<font color='#000088'>+#include "CoverageMap.h"
</font> #include "ExecutableInfo.h"
 #include "skyeye_header.h"
 
<font color='#997700'>@@ -32,14 +33,15 @@
</font>     ExecutableInfo* const executableInformation
   )
   {
<font color='#880000'>-    uintptr_t     baseAddress;
-    uint8_t       cover;
-    FILE*         coverageFile;
-    prof_header_t header;
-    uintptr_t     i;
-    uintptr_t     length;
-    struct stat   statbuf;
-    int           status;
</font><font color='#000088'>+    CoverageMapBase* aCoverageMap = NULL;
+    uintptr_t        baseAddress;
+    uint8_t          cover;
+    FILE*            coverageFile;
+    prof_header_t    header;
+    uintptr_t        i;
+    uintptr_t        length;
+    struct stat      statbuf;
+    int              status;
</font> 
     //
     // Verify that the coverage file has a non-zero size.
<font color='#997700'>@@ -100,17 +102,32 @@
</font>         break;
       }
 
<font color='#000088'>+      //
+      // Obtain the coverage map containing the address and
+      // mark the address as executed.
+      //
+      // NOTE: This method ONLY works for Skyeye in 32-bit mode.
+      //
</font>       if (cover & 0x01) {
<font color='#880000'>-        executableInformation->markWasExecuted( baseAddress + i );
-        executableInformation->markWasExecuted( baseAddress + i + 1 );
-        executableInformation->markWasExecuted( baseAddress + i + 2 );
-        executableInformation->markWasExecuted( baseAddress + i + 3 );
</font><font color='#000088'>+        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 );
+        }
</font>       }
<font color='#000088'>+
</font>       if (cover & 0x10) {
<font color='#880000'>-        executableInformation->markWasExecuted( baseAddress + i + 4 );
-        executableInformation->markWasExecuted( baseAddress + i + 5 );
-        executableInformation->markWasExecuted( baseAddress + i + 6 );
-        executableInformation->markWasExecuted( baseAddress + i + 7 );
</font><font color='#000088'>+        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 );
+        }
</font>       }
     }
 

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderTSIM.cc:1.6 gcc-testing/rtems-coverage/CoverageReaderTSIM.cc:1.7
--- gcc-testing/rtems-coverage/CoverageReaderTSIM.cc:1.6        Fri Mar  5 10:45:37 2010
+++ gcc-testing/rtems-coverage/CoverageReaderTSIM.cc    Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -14,6 +14,7 @@
</font> #include <sys/stat.h>
 
 #include "CoverageReaderTSIM.h"
<font color='#000088'>+#include "CoverageMap.h"
</font> #include "ExecutableInfo.h"
 
 namespace Coverage {
<font color='#997700'>@@ -31,23 +32,24 @@
</font>     ExecutableInfo* const executableInformation
   )
   {
<font color='#880000'>-    int         baseAddress;
-    int         cover;
-    FILE*       coverageFile;
-    int         i;
-    struct stat statbuf;
-    int         status;
</font><font color='#000088'>+    CoverageMapBase* aCoverageMap = NULL;
+    int              baseAddress;
+    int              cover;
+    FILE*            coverageFile;
+    int              i;
+    struct stat      statbuf;
+    int              status;
</font> 
     //
     // Verify that the coverage file has a non-zero size.
     //
     status = stat( file, &statbuf );
<font color='#880000'>-    if ( status == -1 ) {
</font><font color='#000088'>+    if (status == -1) {
</font>       fprintf( stderr, "Unable to stat %s\n", file );
       return false;
     }
 
<font color='#880000'>-    if ( statbuf.st_size == 0 ) {
</font><font color='#000088'>+    if (statbuf.st_size == 0) {
</font>       fprintf( stderr, "%s is 0 bytes long\n", file );
       return false;
     }
<font color='#997700'>@@ -56,7 +58,7 @@
</font>     // Open the coverage file.
     //
     coverageFile = fopen( file, "r" );
<font color='#880000'>-    if ( !coverageFile ) {
</font><font color='#000088'>+    if (!coverageFile) {
</font>       fprintf( stderr, "Unable to open %s\n", file );
       return false;
     }
<font color='#997700'>@@ -66,13 +68,13 @@
</font>     //
     while ( 1 ) {
       status = fscanf( coverageFile, "%x : ", &baseAddress );
<font color='#880000'>-      if ( status == EOF || status == 0 ) {
</font><font color='#000088'>+      if (status == EOF || status == 0) {
</font>         break;
       }
<font color='#880000'>-      // fprintf( stderr, "%08x : ", baseAddress );
-      for ( i=0 ; i < 0x80 ; i+=4 ) {
</font><font color='#000088'>+
+      for (i=0; i < 0x80; i+=4) {
</font>         status = fscanf( coverageFile, "%d", &cover );
<font color='#880000'>-   if ( status == EOF || status == 0 ) {
</font><font color='#000088'>+      if (status == EOF || status == 0) {
</font>           fprintf(
             stderr,
             "CoverageReaderTSIM: WARNING! Short line in %s at address 0x%08x\n",
<font color='#997700'>@@ -81,16 +83,23 @@
</font>           );
           break;
        }
<font color='#880000'>-        // fprintf( stderr, "%d ", cover );
-        if ( cover & 1 ) {
-          executableInformation->markWasExecuted( baseAddress + i );
-          executableInformation->markWasExecuted( baseAddress + i + 1 );
-          executableInformation->markWasExecuted( baseAddress + i + 2 );
-          executableInformation->markWasExecuted( baseAddress + i + 3 );
</font><font color='#000088'>+
+        //
+        // Obtain the coverage map containing the address and
+        // mark the address as executed.
+        //
+        if (cover & 1) {
+          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 );
+          }
</font>         }
       }
<font color='#880000'>-      // fprintf( stderr, "\n" );
-<span style="background-color: #FF0000">  </span>
</font>     }
 
     fclose( coverageFile );

<font color='#006600'>diff -u gcc-testing/rtems-coverage/DesiredSymbols.h:1.2 gcc-testing/rtems-coverage/DesiredSymbols.h:1.3
--- gcc-testing/rtems-coverage/DesiredSymbols.h:1.2     Thu Apr 29 14:12:31 2010
+++ gcc-testing/rtems-coverage/DesiredSymbols.h Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -210,10 +210,10 @@
</font>     );
 
     /*!
<font color='#880000'>-     *  This method preprocess each symbols coverage map to marking nop
</font><font color='#000088'>+     *  This method preprocesses each symbol's coverage map to mark nop
</font>      *  and branch information.
      */
<font color='#880000'>-    void Preprocess( void );
</font><font color='#000088'>+    void preprocess( void );
</font> 
   private:
 

<font color='#006600'>diff -u gcc-testing/rtems-coverage/DesiredSymbols.cc:1.5 gcc-testing/rtems-coverage/DesiredSymbols.cc:1.6
--- gcc-testing/rtems-coverage/DesiredSymbols.cc:1.5    Thu Apr 29 14:12:31 2010
+++ gcc-testing/rtems-coverage/DesiredSymbols.cc        Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -106,12 +106,12 @@
</font>     #undef MAX_LINE_LENGTH
   }
 
<font color='#880000'>-  void DesiredSymbols::Preprocess( void )
</font><font color='#000088'>+  void DesiredSymbols::preprocess( void )
</font>   {
<font color='#880000'>-    CoverageMapBase*                                             theCoverageMap;
-    std::list<ObjdumpProcessor::objdumpLine_t>::reverse_iterator itr;
-    std::list<ObjdumpProcessor::objdumpLine_t>::iterator         fitr;
-    DesiredSymbols::symbolSet_t::iterator                        sitr;
</font><font color='#000088'>+    ObjdumpProcessor::objdumpLines_t::iterator         fitr;
+    ObjdumpProcessor::objdumpLines_t::reverse_iterator itr;
+    DesiredSymbols::symbolSet_t::iterator              sitr;
+    CoverageMapBase*                                   theCoverageMap;
</font> 
     // Look at each symbol.
     for (sitr = SymbolsToAnalyze->set.begin();
<font color='#997700'>@@ -145,26 +145,28 @@
</font>           break;
       }
 
<font color='#880000'>-      for (fitr = sitr->second.instructions.begin(), fitr++;
</font><font color='#000088'>+      // Mark any branch instructions.
+      for (fitr = sitr->second.instructions.begin();
</font>            fitr != sitr->second.instructions.end();
            fitr++) {
         if (fitr->isBranch) {
<font color='#880000'>-           theCoverageMap->setIsBranch( fitr->address -  sitr->second.baseAddress );
</font><font color='#000088'>+           theCoverageMap->setIsBranch(
+             fitr->address - sitr->second.baseAddress
+           );
</font>         }
       }
<font color='#880000'>-
</font>     }
   }
 
   void DesiredSymbols::computeUncovered( void )
   {
<font color='#880000'>-    uint32_t                                             a, la, ha;
-    uint32_t                                             endAddress;
-    std::list<ObjdumpProcessor::objdumpLine_t>::reverse_iterator itr;
-    DesiredSymbols::symbolSet_t::iterator                sitr;
-    CoverageRanges*                                      theBranches;
-    CoverageMapBase*                                     theCoverageMap;
-    CoverageRanges*                                      theRanges;
</font><font color='#000088'>+    uint32_t                                           a, la, ha;
+    uint32_t                                           endAddress;
+    ObjdumpProcessor::objdumpLines_t::reverse_iterator itr;
+    DesiredSymbols::symbolSet_t::iterator              sitr;
+    CoverageRanges*                                    theBranches;
+    CoverageMapBase*                                   theCoverageMap;
+    CoverageRanges*                                    theRanges;
</font> 
     // Look at each symbol.
     for (sitr = SymbolsToAnalyze->set.begin();

<font color='#006600'>diff -u gcc-testing/rtems-coverage/ExecutableInfo.h:1.1 gcc-testing/rtems-coverage/ExecutableInfo.h:1.2
--- gcc-testing/rtems-coverage/ExecutableInfo.h:1.1     Fri Mar  5 10:45:38 2010
+++ gcc-testing/rtems-coverage/ExecutableInfo.h Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -77,45 +77,18 @@
</font>     void initialize( void );
 
     /*!
<font color='#880000'>-     *  This method marks the specified address of the executable
-     *  as a branch instruction and indicates that it was NOT taken.
</font><font color='#000088'>+     *  This method creates a coverage map for the specified symbol.
</font>      *
<font color='#880000'>-     *  @param[in] address indicates the address of the branch instruction
-     *             that was NOT taken
-     */
-    void markBranchNotTaken(
-      uint32_t address
-    );
-
-    /*!
-     *  This method marks the specified address of the executable
-     *  as a branch instruction and indicates that it was taken.
-     *
-     *  @param[in] address indicates the address of the branch instruction
-     *             that was taken
-     */
-    void markBranchTaken(
-      uint32_t address
-    );
-
-    /*!
-     *  This method marks the specified address of the executable
-     *  as the starting address for an instruction.
-     *
-     *  @param[in] address indicates the address of the start of an instruction
-     */
-    void markStartOfInstruction(
-      uint32_t address
-    );
-
-    /*!
-     *  This method marks the specified address of the executable
-     *  as an address that was executed.
</font><font color='#000088'>+     *  @param[in] symbolName specifies the name of the symbol
+     *  @param[in] lowAddress specifies the low address of the coverage map
+     *  @param[in] highAddress specifies the high address of the coverage map
</font>      *
<font color='#880000'>-     *  @param[in] address indicates the address that was executed
</font><font color='#000088'>+     *  @return Returns a pointer to the coverage map
</font>      */
<font color='#880000'>-    void markWasExecuted(
-      uint32_t address
</font><font color='#000088'>+    CoverageMapBase* createCoverageMap (
+      const std::string& symbolName,
+      uint32_t           lowAddress,
+      uint32_t           highAddress
</font>     );
 
     /*!

<font color='#006600'>diff -u gcc-testing/rtems-coverage/ExecutableInfo.cc:1.2 gcc-testing/rtems-coverage/ExecutableInfo.cc:1.3
--- gcc-testing/rtems-coverage/ExecutableInfo.cc:1.2    Thu Mar 11 09:58:10 2010
+++ gcc-testing/rtems-coverage/ExecutableInfo.cc        Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -68,136 +68,30 @@
</font> 
   void ExecutableInfo::initialize( void )
   {
<font color='#880000'>-    CoverageMapBase                       *aCoverageMap;
-    uint32_t                               highAddress;
-    SymbolTable::symbolInfo*               info;
-    DesiredSymbols::symbolSet_t::iterator  itr;
-    uint32_t                               lowAddress;
-    std::string                            symbol;
-
-    // Create and initialize symbol table.
-    if ( Verbose )
-      fprintf( stderr, "Reading symbol table of %s\n", fileName.c_str() );
</font><font color='#000088'>+    // Create the symbol table.
</font>     theSymbolTable = new SymbolTable();
<font color='#880000'>-    theSymbolTable->load( fileName );
-
-    // Create a coverage map for each symbol to analyze.
-    for (itr = SymbolsToAnalyze->set.begin();
-         itr != SymbolsToAnalyze->set.end();
-         itr++) {
-
-      symbol = (*itr).first;
-      info = NULL;
-      info = theSymbolTable->getInfo( symbol );
-      if (!info) {
-        /* A little too verbose :-D */
-        #if 0
-        if (Verbose)
-          fprintf(
-            stderr,
-            "Unable to find symbol information for %s\n",
-            symbol.c_str()
-          );
-        #endif
-        continue;
-      }
-
-      lowAddress = info->startingAddress;
-      highAddress = lowAddress + info->length - 1;
-
-      aCoverageMap = NULL;
-      aCoverageMap = new CoverageMap( lowAddress, highAddress );
-      if (!aCoverageMap) {
-        fprintf(
-          stderr, "Unable to create coverage map for %s\n", symbol.c_str()
-        );
-        continue;
-      }
-
-      coverageMaps[ symbol ] = aCoverageMap;
-    }
-  }
-
-  void ExecutableInfo::markBranchNotTaken(
-    uint32_t address
-  )
-  {
-    CoverageMapBase* aCoverageMap = NULL;
-    uint32_t         beginning;
-
-    // Obtain the coverage map containing the specified address.
-    aCoverageMap = getCoverageMap( address );
-
-    // Ensure that coverage map exists.
-    if (aCoverageMap) {
-
-      // Determine the beginning address of the instruction that
-      // contains the specified address.  We only want to mark the
-      // beginning address of the instruction.
-      if (aCoverageMap->getBeginningOfInstruction( address, &beginning )) {
-        aCoverageMap->setIsBranch( beginning );
-        aCoverageMap->setWasNotTaken( beginning );
-        if (Verbose)
-          fprintf(
-            stderr, "Marking branch not taken at 0x%x\n", beginning
-          );
-      }
-    }
</font>   }
 
<font color='#880000'>-  void ExecutableInfo::markBranchTaken(
-    uint32_t address
</font><font color='#000088'>+  CoverageMapBase* ExecutableInfo::createCoverageMap (
+    const std::string& symbolName,
+    uint32_t           lowAddress,
+    uint32_t           highAddress
</font>   )
   {
<font color='#880000'>-    CoverageMapBase* aCoverageMap = NULL;
-    uint32_t         beginning;
-
-    // Obtain the coverage map containing the specified address.
-    aCoverageMap = getCoverageMap( address );
</font><font color='#000088'>+    CoverageMapBase* theMap = NULL;
</font> 
<font color='#880000'>-    // Ensure that coverage map exists.
-    if (aCoverageMap) {
</font><font color='#000088'>+    theMap = new CoverageMap( lowAddress, highAddress );
</font> 
<font color='#880000'>-      // Determine the beginning address of the instruction that
-      // contains the specified address.  We only want to mark the
-      // beginning address of the instruction.
-      if (aCoverageMap->getBeginningOfInstruction( address, &beginning )) {
-        aCoverageMap->setIsBranch( beginning );
-        aCoverageMap->setWasTaken( beginning );
-        if (Verbose)
-          fprintf(
-            stderr, "Marking branch taken at 0x%x\n", beginning
-          );
-      }
-    }
-  }
-
-  void ExecutableInfo::markStartOfInstruction(
-    uint32_t address<span style="background-color: #FF0000"> </span>
-  )
-  {
-    CoverageMapBase* aCoverageMap = NULL;
-
-    // Obtain the coverage map containing the specified address.
-    aCoverageMap = getCoverageMap( address );
-
-    // Ensure that coverage map exists.
-    if (aCoverageMap)
-      aCoverageMap->setIsStartOfInstruction( address );
-  }
-
-  void ExecutableInfo::markWasExecuted(
-    uint32_t address
-  )
-  {
-    CoverageMapBase* aCoverageMap = NULL;
</font><font color='#000088'>+    if (!theMap)
+      fprintf(
+        stderr, "Unable to create coverage map for %s\n",
+        symbolName.c_str()
+      );
</font> 
<font color='#880000'>-    // Obtain the coverage map containing the specified address.
-    aCoverageMap = getCoverageMap( address );
</font><font color='#000088'>+    else
+      coverageMaps[ symbolName ] = theMap;
</font> 
<font color='#880000'>-    // Ensure that coverage map exists.
-    if (aCoverageMap)
-      aCoverageMap->setWasExecuted( address );
</font><font color='#000088'>+    return theMap;
</font>   }
 
   void ExecutableInfo::mergeCoverage( void ) {

<font color='#006600'>diff -u gcc-testing/rtems-coverage/ObjdumpProcessor.h:1.8 gcc-testing/rtems-coverage/ObjdumpProcessor.h:1.9
--- gcc-testing/rtems-coverage/ObjdumpProcessor.h:1.8   Thu Apr 29 14:12:31 2010
+++ gcc-testing/rtems-coverage/ObjdumpProcessor.h       Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -72,6 +72,8 @@
</font> 
     } objdumpLine_t;
 
<font color='#000088'>+    typedef std::list<objdumpLine_t> objdumpLines_t;
+
</font>     typedef std::list<uint32_t> objdumpFile_t;
 
     /*!
<font color='#997700'>@@ -132,8 +134,7 @@
</font>   private:
 
     objdumpFile_t       objdumpList;
<font color='#880000'>-    Target::TargetBase  *target_m;
-
</font><font color='#000088'>+    Target::TargetBase* target_m;
</font> 
     /*!
      *  This method determines whether the specified line is a

<font color='#006600'>diff -u gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.28 gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.29
--- gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.28 Thu Apr 29 14:12:31 2010
+++ gcc-testing/rtems-coverage/ObjdumpProcessor.cc      Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -19,11 +19,61 @@
</font> 
 #include "ObjdumpProcessor.h"
 #include "app_common.h"
<font color='#000088'>+#include "CoverageMap.h"
</font> #include "ExecutableInfo.h"
<font color='#000088'>+#include "SymbolTable.h"
</font> #include "TargetFactory.h"
 
 namespace Coverage {
 
<font color='#000088'>+  void finalizeSymbol(
+    ExecutableInfo* const            executableInfo,
+    std::string&                     symbolName,
+    uint32_t                         lowAddress,
+    uint32_t                         highAddress,
+    ObjdumpProcessor::objdumpLines_t instructions,
+    SymbolInformation*               symbolInfo
+  ) {
+
+    CoverageMapBase*                           aCoverageMap = NULL;
+    ObjdumpProcessor::objdumpLines_t::iterator itr;
+    SymbolTable*                               theSymbolTable;
+
+    // If there are NOT already saved instructions, save them.
+    if (symbolInfo->instructions.empty()) {
+      symbolInfo->sourceFile = executableInfo->getFileName();
+      symbolInfo->baseAddress = lowAddress;
+      symbolInfo->instructions = instructions;
+    }
+
+    // Add the symbol to this executable's symbol table.
+    theSymbolTable = executableInfo->getSymbolTable();
+    theSymbolTable->addSymbol(
+      symbolName, lowAddress, highAddress - lowAddress + 1
+    );
+
+    // Create a coverage map for the symbol.
+    aCoverageMap = executableInfo->createCoverageMap(
+      symbolName, lowAddress, highAddress
+    );
+
+    if (aCoverageMap) {
+
+      // Mark the start of each instruction in the coverage map.
+      for (itr = instructions.begin();
+           itr != instructions.end();
+           itr++ ) {
+
+        aCoverageMap->setIsStartOfInstruction( itr->address );
+      }
+
+      // Create a unified coverage map for the symbol.
+      SymbolsToAnalyze->createCoverageMap(
+        symbolName, highAddress - lowAddress + 1
+      );
+    }
+  }
+
</font>   ObjdumpProcessor::ObjdumpProcessor()
   {
     target_m = Target::TargetFactory(Tools->getTarget());
<font color='#997700'>@@ -90,7 +140,7 @@
</font>     if ( FileIsNewer( exeFileName.c_str(), dumpFile )) {
       sprintf(
         buffer,
<font color='#880000'>-        "%s -da --source %s | sed -e \'s/ *$//\' >%s",
</font><font color='#000088'>+        "%s -da --section=.text --source %s | sed -e \'s/ *$//\' >%s",
</font>         Tools->getObjdump(),
          exeFileName.c_str(),
         dumpFile
<font color='#997700'>@@ -100,7 +150,7 @@
</font>       if (status) {
         fprintf(
           stderr,
<font color='#880000'>-          "ERROR: ObjdumpProcessor::load - command (%s) failed with %d\n",
</font><font color='#000088'>+          "ERROR: ObjdumpProcessor::getFile - command (%s) failed with %d\n",
</font>           buffer,
           status
         );
<font color='#997700'>@@ -113,7 +163,7 @@
</font>     if (!objdumpFile) {
       fprintf(
         stderr,
<font color='#880000'>-        "ERROR: ObjdumpProcessor::load - unable to open %s\n",
</font><font color='#000088'>+        "ERROR: ObjdumpProcessor::getFile - unable to open %s\n",
</font>         dumpFile
       );
       exit(-1);
<font color='#997700'>@@ -175,26 +225,26 @@
</font>     }
   }
 
<font color='#880000'>-
</font>   void ObjdumpProcessor::load(
     ExecutableInfo* const executableInformation
   )
   {
<font color='#880000'>-    uint32_t           baseAddress;
</font><font color='#000088'>+    uint32_t           address;
+    uint32_t           baseAddress = 0;
</font>     char               buffer[ 512 ];
     char*              cStatus;
<font color='#880000'>-    uint32_t           endAddress = 0xffffffff;
</font><font color='#000088'>+    std::string        currentSymbol = "";
</font>     uint32_t           instructionAddress;
     int                items;
     objdumpLine_t      lineInfo;
     FILE*              objdumpFile;
     bool               processSymbol = false;
<font color='#880000'>-    bool               saveInstructionDump = false;
</font>     char               symbol[ 100 ];
<font color='#880000'>-    SymbolInformation* symbolInfo = NULL;
</font><font color='#000088'>+    SymbolInformation* symbolInformation = NULL;
</font>     char               terminator;
<font color='#000088'>+    objdumpLines_t     theInstructions;
</font> 
<font color='#880000'>-
</font><font color='#000088'>+    // Obtain the objdump file.
</font>     objdumpFile = getFile( executableInformation->getFileName() );
 
     // Process all lines from the objdump file.
<font color='#997700'>@@ -203,8 +253,29 @@
</font>       // Get the line.
       cStatus = fgets( buffer, 512, objdumpFile );
       if (cStatus == NULL) {
<font color='#000088'>+
+        // If we are currently processing a symbol, finalize it.
+        if ((processSymbol) && (symbolInformation)) {
+          finalizeSymbol(
+            executableInformation,
+            currentSymbol,
+            baseAddress,
+            address,  // XXX fix to determine corrent end address
+            theInstructions,
+            symbolInformation
+          );
+          fprintf(
+            stderr,
+            "WARNING: ObjdumpProcessor::load - analysis of symbol %s \n"
+            "         may be incorrect.  It was the last symbol in %s\n"
+            "         and the length of its last instruction is assumed to be one.\n",
+            currentSymbol.c_str(),
+            executableInformation->getFileName().c_str()
+          );
+        }
</font>         break;
       }
<font color='#000088'>+
</font>       buffer[ strlen(buffer) - 1] = '\0';
 
       lineInfo.line          = buffer;
<font color='#997700'>@@ -215,40 +286,42 @@
</font>       lineInfo.isBranch      = false;
 
       // Look for the start of a symbol's objdump and extract
<font color='#880000'>-      // address and symbol.
</font><font color='#000088'>+      // address and symbol (i.e. address <symbolname>:).
</font>       items = sscanf(
         buffer,
         "%x <%[^>]>%c",
<font color='#880000'>-        &baseAddress, symbol, &terminator
</font><font color='#000088'>+        &address, symbol, &terminator
</font>       );
 
<font color='#880000'>-      // If all items found ...
</font><font color='#000088'>+      // If all items found, we are at the beginning of a symbol's objdump.
</font>       if ((items == 3) && (terminator == ':')) {
 
<font color='#880000'>-        // we are at the beginning of a symbol's objdump and
-        // must end any processing of the previous symbol.
-        processSymbol = false;
-        saveInstructionDump = false;
</font><font color='#000088'>+        // If we are currently processing a symbol, finalize it.
+        if ((processSymbol) && (symbolInformation)) {
+          finalizeSymbol(
+            executableInformation,
+            currentSymbol,
+            baseAddress,
+            address - 1,
+            theInstructions,
+            symbolInformation
+          );
+        }
</font> 
<font color='#880000'>-        // See if the symbol is one that we care about.
-        symbolInfo = SymbolsToAnalyze->find( symbol );
</font><font color='#000088'>+        // Start processing of a new symbol.
+        baseAddress = 0;
+        currentSymbol = "";
+        processSymbol = false;
+        theInstructions.clear();
</font> 
<font color='#880000'>-        // If it is, ...
-        if (symbolInfo) {
</font><font color='#000088'>+        // See if the new symbol is one that we care about.
+        symbolInformation = SymbolsToAnalyze->find( symbol );
</font> 
<font color='#880000'>-          // indicate that we are processing a symbols objdump and
-          // compute the ending address for termination.
</font><font color='#000088'>+        if (symbolInformation) {
+          baseAddress = address;
+          currentSymbol = symbol;
</font>           processSymbol = true;
<font color='#880000'>-          endAddress = baseAddress +
-           executableInformation->getSymbolTable()->getLength( symbol ) - 1;
-
-          // If there are NOT already instructions available, indicate that they
-          // are to be saved.
-          if (symbolInfo->instructions.empty()) {
-            saveInstructionDump = true;
-            symbolInfo->sourceFile = executableInformation->getFileName();
-            symbolInfo->baseAddress = baseAddress;
-          }
</font><font color='#000088'>+          theInstructions.push_back( lineInfo );
</font>         }
       }
 
<font color='#997700'>@@ -264,36 +337,16 @@
</font>         // If it looks like an instruction ...
         if ((items == 2) && (terminator == ':')) {
 
<font color='#880000'>-          // and we are NOT beyond the end of the symbol's objdump,
-          if (instructionAddress <= endAddress) {
-
-            // update the line's information and ...
-            lineInfo.address       = instructionAddress;
-            lineInfo.isInstruction = true;
-            lineInfo.isNop         = isNop( buffer, lineInfo.nopSize );
-            lineInfo.isBranch      = isBranchLine( buffer );
-
-            // mark the address as the beginning of an instruction.
-            executableInformation->markStartOfInstruction( instructionAddress );
-          }
-
-          // If we are beyond the end of the symbol's objdump,
-          // it's time to end processing of this symbol.
-          else {
-            processSymbol = false;
-            saveInstructionDump = false;
-          }
</font><font color='#000088'>+          // update the line's information, save it and ...
+          lineInfo.address       = instructionAddress;
+          lineInfo.isInstruction = true;
+          lineInfo.isNop         = isNop( buffer, lineInfo.nopSize );
+          lineInfo.isBranch      = isBranchLine( buffer );
</font>         }
<font color='#880000'>-      }
-
-      // If we are processing a symbol, ...
-      if (processSymbol && saveInstructionDump) {
-
-        // add line to the current symbol's information and ...
-        symbolInfo->instructions.push_back( lineInfo );
</font> 
<font color='#000088'>+        // Always save the line.
+        theInstructions.push_back( lineInfo );
</font>       }
     }
   }
<font color='#880000'>-
</font> }

<font color='#006600'>diff -u gcc-testing/rtems-coverage/SymbolTable.h:1.2 gcc-testing/rtems-coverage/SymbolTable.h:1.3
--- gcc-testing/rtems-coverage/SymbolTable.h:1.2        Tue Apr 13 14:23:22 2010
+++ gcc-testing/rtems-coverage/SymbolTable.h    Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -46,6 +46,21 @@
</font>     virtual ~SymbolTable();
 
     /*!
<font color='#000088'>+     *  This method adds the specified symbol information to the
+     *  symbol table.
+     *
+     *  @param[in] symbol specifies the symbol to add
+     *  @param[in] start specifies the symbol's start address
+     *  @param[in] length specifies the symbol's length
+     *
+     */
+    void addSymbol(
+      const std::string& symbol,
+      const uint32_t     start,
+      const uint32_t     length
+    );
+
+    /*!
</font>      *  This method returns the symbol information for the specified symbol.
      *
      *  @param[in] symbol specifies the symbol for which to obtain information
<font color='#997700'>@@ -78,33 +93,20 @@
</font>       uint32_t address
     );
 
<font color='#880000'>-    /*!
-     *  This method loads the symbol table from the specified executable.
-     *
-     *  @param[in] executableName specifies the file name of the executable
-     *
-     *  @return Returns TRUE if the symbol table was loaded and
-     *          FALSE otherwise.
-     */
-    bool load(
-      const std::string& executableName
-    );
-
</font>   private:
 
     /*!
<font color='#880000'>-     *  This map associates each address from an executable
-     *  with the symbol that contains the address.
</font><font color='#000088'>+     *  This map associates the end address of a symbol's address
+     *  range with the symbol's address range definition.
</font>      */
     typedef struct {
<font color='#880000'>-       uint32_t min;
-       uint32_t max;
</font><font color='#000088'>+       uint32_t    low;
+       uint32_t    high;
</font>        std::string symbol;
     } symbol_entry_t;
     typedef std::map< uint32_t, symbol_entry_t > contents_t;
     contents_t contents;
 
<font color='#880000'>-
</font>     /*!
      *  This map associates each symbol from an executable with
      *  the symbol's information.

<font color='#006600'>diff -u gcc-testing/rtems-coverage/SymbolTable.cc:1.5 gcc-testing/rtems-coverage/SymbolTable.cc:1.6
--- gcc-testing/rtems-coverage/SymbolTable.cc:1.5       Sat Apr 24 10:34:00 2010
+++ gcc-testing/rtems-coverage/SymbolTable.cc   Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -27,6 +27,29 @@
</font>   {
   }
 
<font color='#000088'>+  void SymbolTable::addSymbol(
+    const std::string& symbol,
+    const uint32_t     start,
+    const uint32_t     length
+  )
+  {
+    uint32_t       end = 0;
+    symbol_entry_t entry;
+    symbolInfo     symbolData;
+
+    // Add an entry to the address map.
+    end = start + length - 1;
+    entry.low = start;
+    entry.high = end;
+    entry.symbol = symbol;
+    contents[ end ] = entry;
+
+    // Add an entry to the symbol information map.
+    symbolData.startingAddress = start;
+    symbolData.length = length;
+    info[ symbol ] = symbolData;
+  }
+
</font>   SymbolTable::symbolInfo* SymbolTable::getInfo(
     const std::string& symbol
   )
<font color='#997700'>@@ -55,116 +78,22 @@
</font>     uint32_t address
   )
   {
<font color='#880000'>-    contents_t::iterator it = contents.end();
</font><font color='#000088'>+    contents_t::iterator it;
</font> 
<font color='#000088'>+    // Ensure that the symbol table is not empty.
</font>     if ( contents.size() == 0 )
       return "";
 
<font color='#880000'>-    it--;
-    if (address > ((*it).first)) {
-      return "";
-    }
-
</font><font color='#000088'>+    // Find the first entry whose end address is greater
+    // than the specified address.
</font>     it = contents.lower_bound( address );
<font color='#880000'>-    if (((*it).second).min <= address ) {
-      return ((*it).second).symbol;
-    } else {
-      return "";
-    }
-  }
</font> 
<font color='#880000'>-  bool SymbolTable::load(
-    const std::string& executableName
-  )
-  {
-    char        buffer[512];
-    char       *cStatus;
-    uint32_t    end = 0;
-    int         items;
-    uint32_t    length = 0;
-    FILE       *nmFile = NULL;
-    uint32_t    start = 0;
-    char        symbol[ 100 ];
-    symbolInfo  symbolData;
-    char        nmName[128];
-
-
-    sprintf(
-      nmName,
-      "%s.nm",
-      executableName.c_str()
-    );
-
-    // Generate the nm output
-    if (FileIsNewer(executableName.c_str(), nmName )){
-
-      sprintf( buffer, "%s -n -f sysv %s | sed -e \'s/ *$//\' >%s",
-        Tools->getNm(), executableName.c_str(), nmName );
-
-      if ( system( buffer ) ) {
-        fprintf(
-          stderr,
-          "ERROR: SymbolTable::load - command (%s) failed\n",
-          buffer
-        );
-        exit( -1 );
-      }
-    }
-
-    // Read the file and process each desired symbol
-    nmFile = fopen( nmName, "r" );
-    if ( !nmFile ) {
-      fprintf(
-        stderr,
-        "ERROR: SymbolTable::load - unable to open %s\n",
-        nmName
-      );
-      exit(-1);
-    }
-
-    // Process all lines from the nm file.
-    while ( 1 ) {
-
-      // Get the line.
-      cStatus = fgets( buffer, 512, nmFile );
-      if ( cStatus == NULL ) {
-        break;
-      }
-      buffer[ strlen(buffer) - 1] = '\0';
-
-      // Extract the symbol, start address and length.
-      items = sscanf(
-        buffer,
-        "%[^| ] |%x|%*[^|]| FUNC|%x",
-        symbol, &start, &length
-      );
-
-      // If all items found ...
-      if (items == 3) {
-
-        // and it is a desired symbol, ...
-        if (SymbolsToAnalyze->isDesired( symbol )) {
-
-          // add the symbol information to the symbol table.
-          end = start + length - 1;
-          symbol_entry_t entry = { start, end, symbol };
-          contents[end] = entry;
-
-          symbolData.startingAddress = start;
-          symbolData.length = length;
-          info[ symbol ] = symbolData;
-
-          // Also create a coverage map for the results of the analysis.
-          SymbolsToAnalyze->createCoverageMap( symbol, length );
-        }
-      }
-    }
-
-    fclose( nmFile );
-
-    // Remove temporary file
-    // (void) system( "rm -f nm.tmp" );
-    return true;
</font><font color='#000088'>+    // If an entry was found and its low address is less than or
+    // equal to the specified address, then return the symbol.
+    if ((it != contents.end()) && ((it->second).low <= address ))
+      return (it->second).symbol;
+
+    return "";
</font>   }
 
 }

<font color='#006600'>diff -u gcc-testing/rtems-coverage/covoar.cc:1.13 gcc-testing/rtems-coverage/covoar.cc:1.14
--- gcc-testing/rtems-coverage/covoar.cc:1.13   Thu May  6 12:54:13 2010
+++ gcc-testing/rtems-coverage/covoar.cc        Fri May  7 13:53:58 2010
</font><font color='#997700'>@@ -342,10 +342,10 @@
</font>       eitr++;
   }
 
<font color='#880000'>-  // Do necessary preprocessing uncovered ranges and branches
</font><font color='#000088'>+  // Do necessary preprocessing of uncovered ranges and branches
</font>   if (Verbose)
<font color='#880000'>-     fprintf( stderr, "Preprocess uncovered ranges and branches\n" );
-  SymbolsToAnalyze->Preprocess();
</font><font color='#000088'>+    fprintf( stderr, "Preprocess uncovered ranges and branches\n" );
+  SymbolsToAnalyze->preprocess();
</font> 
   // Determine the uncovered ranges and branches.
   if (Verbose)
</pre>
<p> </p>
<a name='cs2'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>joel</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-05-07 Joel Sherrill <joel.sherrill@oarcorp.com>

        * ReportsBase.cc: Fix name of coverage report.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ChangeLog.diff?r1=text&tr1=1.203&r2=text&tr2=1.204&diff_format=h">M</a></td><td width='1%'>1.204</td><td width='100%'>rtems-coverage/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ReportsBase.cc.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>rtems-coverage/ReportsBase.cc</td></tr>
</table>
<pre>
<font color='#006600'>diff -u gcc-testing/rtems-coverage/ChangeLog:1.203 gcc-testing/rtems-coverage/ChangeLog:1.204
--- gcc-testing/rtems-coverage/ChangeLog:1.203  Fri May  7 13:01:50 2010
+++ gcc-testing/rtems-coverage/ChangeLog        Fri May  7 13:28:31 2010
</font><font color='#997700'>@@ -1,3 +1,7 @@
</font><font color='#000088'>+2010-05-07    Joel Sherrill <joel.sherrill@oarcorp.com>
+
+       * ReportsBase.cc: Fix name of coverage report.
+
</font> 2010-05-07        Jennifer Averett <Jennifer.Averett>
 
        * Makefile, ReportsBase.cc, ReportsBase.h, ReportsText.cc,

<font color='#006600'>diff -u gcc-testing/rtems-coverage/ReportsBase.cc:1.2 gcc-testing/rtems-coverage/ReportsBase.cc:1.3
--- gcc-testing/rtems-coverage/ReportsBase.cc:1.2       Fri May  7 13:01:51 2010
+++ gcc-testing/rtems-coverage/ReportsBase.cc   Fri May  7 13:28:31 2010
</font><font color='#997700'>@@ -344,7 +344,7 @@
</font>     reportName = "branch" + reports->ReportExtension();
     reports->WriteBranchReport(reportName.c_str() );
 
<font color='#880000'>-    reportName = "coverage" + reports->ReportExtension();
</font><font color='#000088'>+    reportName = "uncovered" + reports->ReportExtension();
</font>     reports->WriteCoverageReport(reportName.c_str() );
 
     reportName = "sizes" + reports->ReportExtension();
</pre>
<p> </p>
<a name='cs3'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>joel</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-05-07 Joel Sherrill <joel.sherrill@oarcorp.com>

        * do_coverage: Pick up style sheet for reports.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ChangeLog.diff?r1=text&tr1=1.204&r2=text&tr2=1.205&diff_format=h">M</a></td><td width='1%'>1.205</td><td width='100%'>rtems-coverage/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/do_coverage.diff?r1=text&tr1=1.50&r2=text&tr2=1.51&diff_format=h">M</a></td><td width='1%'>1.51</td><td width='100%'>rtems-coverage/do_coverage</td></tr>
</table>
<pre>
<font color='#006600'>diff -u gcc-testing/rtems-coverage/ChangeLog:1.204 gcc-testing/rtems-coverage/ChangeLog:1.205
--- gcc-testing/rtems-coverage/ChangeLog:1.204  Fri May  7 13:28:31 2010
+++ gcc-testing/rtems-coverage/ChangeLog        Fri May  7 13:29:44 2010
</font><font color='#997700'>@@ -1,5 +1,9 @@
</font> 2010-05-07        Joel Sherrill <joel.sherrill@oarcorp.com>
 
<font color='#000088'>+   * do_coverage: Pick up style sheet for reports.
+
+2010-05-07     Joel Sherrill <joel.sherrill@oarcorp.com>
+
</font>   * ReportsBase.cc: Fix name of coverage report.
 
 2010-05-07     Jennifer Averett <Jennifer.Averett>

<font color='#006600'>diff -u gcc-testing/rtems-coverage/do_coverage:1.50 gcc-testing/rtems-coverage/do_coverage:1.51
--- gcc-testing/rtems-coverage/do_coverage:1.50 Fri Apr 23 15:38:20 2010
+++ gcc-testing/rtems-coverage/do_coverage      Fri May  7 13:29:44 2010
</font><font color='#997700'>@@ -355,7 +355,7 @@
</font>   mkdir ${results_dir}
   cp annotated.txt branch.txt configuration.txt sizes.txt summary.txt \
      uncovered.txt row.html ${results_dir}
<font color='#880000'>-  cp ${COVBASE}/Explanations.txt.NotFound ${results_dir}
</font><font color='#000088'>+  cp ${COVBASE}/Explanations.txt.NotFound ${COVBASE}/covoar.css ${results_dir}
</font>   echo "Results saved in ${results_dir}.tar.bz2"
   tar cjf ${results_dir}.tar.bz2 ${results_dir}
   rm -rf ${results_dir}
</pre>
<p> </p>

<p>--<br />
<small>Generated by <a href="http://www.codewiz.org/projects/index.html#loginfo">Deluxe Loginfo</a> 2.122 by Bernardo Innocenti <bernie@develer.com></small></p>
</body>
</html>