change log for gcc-testing (2010-05-11)

rtems-vc at rtems.org rtems-vc at rtems.org
Tue May 11 21:10:03 UTC 2010


 *humph*:
2010-05-11	Glenn Humphrey

	* DesiredSymbols.cc, ObjdumpProcessor.cc: Due to differences in nops
	used for alignment, had to move the trimming of trailing nops to the
	objdump processing.

M  1.220  rtems-coverage/ChangeLog
M    1.9  rtems-coverage/DesiredSymbols.cc
M   1.32  rtems-coverage/ObjdumpProcessor.cc

diff -u gcc-testing/rtems-coverage/ChangeLog:1.219 gcc-testing/rtems-coverage/ChangeLog:1.220
--- gcc-testing/rtems-coverage/ChangeLog:1.219	Tue May 11 15:18:32 2010
+++ gcc-testing/rtems-coverage/ChangeLog	Tue May 11 16:08:57 2010
@@ -1,3 +1,9 @@
+2010-05-11	Glenn Humphrey
+
+	* DesiredSymbols.cc, ObjdumpProcessor.cc: Due to differences in nops
+	used for alignment, had to move the trimming of trailing nops to the
+	objdump processing.
+
 2010-05-11	Joel Sherrill <joel.sherrilL at OARcorp.com>
 
 	* DesiredSymbols.cc, Makefile, ObjdumpProcessor.cc, TargetBase.cc,

diff -u gcc-testing/rtems-coverage/DesiredSymbols.cc:1.8 gcc-testing/rtems-coverage/DesiredSymbols.cc:1.9
--- gcc-testing/rtems-coverage/DesiredSymbols.cc:1.8	Tue May 11 15:18:32 2010
+++ gcc-testing/rtems-coverage/DesiredSymbols.cc	Tue May 11 16:08:57 2010
@@ -108,10 +108,9 @@
 
   void DesiredSymbols::preprocess( void )
   {
-    ObjdumpProcessor::objdumpLines_t::iterator         fitr;
-    ObjdumpProcessor::objdumpLines_t::reverse_iterator itr;
-    DesiredSymbols::symbolSet_t::iterator              sitr;
-    CoverageMapBase*                                   theCoverageMap;
+    ObjdumpProcessor::objdumpLines_t::iterator fitr;
+    DesiredSymbols::symbolSet_t::iterator      sitr;
+    CoverageMapBase*                           theCoverageMap;
 
     // Look at each symbol.
     for (sitr = SymbolsToAnalyze->set.begin();
@@ -124,27 +123,6 @@
       if (!theCoverageMap)
         continue;
 
-      // Mark any trailing nops as executed.  Some targets use nops to
-      // force alignment of the next method but still include the nops
-      // in the symbol size.
-      //
-      // Mark all branches as isBranch.
-      //
-      // NOTE: If nop's are used for alignment inside a method, this 
-      //       will not mark them!!!
-      for (itr = sitr->second.instructions.rbegin(), itr++;
-           itr != sitr->second.instructions.rend();
-           itr++) {
-        if (itr->isNop) {
-          for ( int a=0; a < itr->nopSize ; a++ ) {
-            theCoverageMap->setWasExecuted(
-              itr->address - sitr->second.baseAddress + a
-            );
-          }
-        } else
-          break;
-      }
-
       // Mark any branch instructions.
       for (fitr = sitr->second.instructions.begin();
            fitr != sitr->second.instructions.end();
@@ -160,13 +138,12 @@
 
   void DesiredSymbols::computeUncovered( void )
   {
-    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;
+    uint32_t                              a, la, ha;
+    uint32_t                              endAddress;
+    DesiredSymbols::symbolSet_t::iterator sitr;
+    CoverageRanges*                       theBranches;
+    CoverageMapBase*                      theCoverageMap;
+    CoverageRanges*                       theRanges;
 
     // Look at each symbol.
     for (sitr = SymbolsToAnalyze->set.begin();

diff -u gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.31 gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.32
--- gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.31	Tue May 11 15:18:32 2010
+++ gcc-testing/rtems-coverage/ObjdumpProcessor.cc	Tue May 11 16:08:58 2010
@@ -35,9 +35,51 @@
     SymbolInformation*               symbolInfo
   ) {
 
-    CoverageMapBase*                           aCoverageMap = NULL;
-    ObjdumpProcessor::objdumpLines_t::iterator itr;
-    SymbolTable*                               theSymbolTable;
+    CoverageMapBase*                                   aCoverageMap = NULL;
+    uint32_t                                           endAddress = highAddress;
+    ObjdumpProcessor::objdumpLines_t::iterator         itr, fnop, lnop;
+    ObjdumpProcessor::objdumpLines_t::reverse_iterator ritr;
+    SymbolTable*                                       theSymbolTable;
+
+    //
+    // Remove trailing nop instructions.
+    //
+
+    // First find the last instruction.
+    for (ritr = instructions.rbegin();
+         ritr != instructions.rend();
+         ritr++) {
+      if (ritr->isInstruction)
+        break;
+    }
+
+    // If an instruction was found and it is a nop, ...
+    if ((ritr != instructions.rend()) && (ritr->isNop)) {
+
+      // save it as the last nop.  Note that we must account for
+      // the difference between a forward and a reverse iterator.
+      lnop = ritr.base();
+      lnop--;
+      endAddress -= lnop->nopSize;
+
+      // Now look for the first nop in the sequence of trailing nops.
+      fnop = lnop;
+      ritr++;
+      for (; ritr != instructions.rend(); ritr++) {
+        if (ritr->isNop) {
+          fnop = ritr.base();
+          fnop--;
+          endAddress -= fnop->nopSize;
+        }
+        else
+          break;
+      }
+
+      // Erase trailing nops.  The erase operation wants the first
+      // parameter to point to the first item to erase and the second
+      // parameter to point to the item beyond the last item to erase.
+      instructions.erase( fnop, ++lnop );
+    }
 
     // If there are NOT already saved instructions, save them.
     if (symbolInfo->instructions.empty()) {
@@ -49,12 +91,12 @@
     // Add the symbol to this executable's symbol table.
     theSymbolTable = executableInfo->getSymbolTable();
     theSymbolTable->addSymbol(
-      symbolName, lowAddress, highAddress - lowAddress + 1
+      symbolName, lowAddress, endAddress - lowAddress + 1
     );
 
     // Create a coverage map for the symbol.
     aCoverageMap = executableInfo->createCoverageMap(
-      symbolName, lowAddress, highAddress
+      symbolName, lowAddress, endAddress
     );
 
     if (aCoverageMap) {
@@ -69,7 +111,7 @@
 
       // Create a unified coverage map for the symbol.
       SymbolsToAnalyze->createCoverageMap(
-        symbolName, highAddress - lowAddress + 1
+        symbolName, endAddress - lowAddress + 1
       );
     }
   }
@@ -240,7 +282,8 @@
     bool               processSymbol = false;
     char               symbol[ 100 ];
     SymbolInformation* symbolInformation = NULL;
-    char               terminator;
+    char               terminator1;
+    char               terminator2;
     objdumpLines_t     theInstructions;
 
     // Obtain the objdump file.
@@ -259,7 +302,7 @@
             executableInformation,
             currentSymbol,
             baseAddress,
-            address,  // XXX fix to determine corrent end address
+            address,  // XXX fix to determine correct end address
             theInstructions,
             symbolInformation
           );
@@ -289,11 +332,11 @@
       items = sscanf(
         buffer,
         "%x <%[^>]>%c",
-        &address, symbol, &terminator
+        &address, symbol, &terminator1
       );
 
       // If all items found, we are at the beginning of a symbol's objdump.
-      if ((items == 3) && (terminator == ':')) {
+      if ((items == 3) && (terminator1 == ':')) {
 
         // If we are currently processing a symbol, finalize it.
         if ((processSymbol) && (symbolInformation)) {
@@ -329,12 +372,12 @@
         // See if it is the dump of an instruction.
         items = sscanf(
           buffer,
-          "%x%c",
-          &instructionAddress, &terminator
+          "%x%c\t%*[^\t]%c",
+          &instructionAddress, &terminator1, &terminator2
         );
 
         // If it looks like an instruction ...
-        if ((items == 2) && (terminator == ':')) {
+        if ((items == 3) && (terminator1 == ':') && (terminator2 == '\t')) {
 
           // update the line's information, save it and ...
           lineInfo.address       = instructionAddress;


 *humph*:
2010-05-11	Glenn Humphrey

	* ReportsBase.cc: Fixed buffer overflow problem.

M  1.221  rtems-coverage/ChangeLog
M    1.7  rtems-coverage/ReportsBase.cc

diff -u gcc-testing/rtems-coverage/ChangeLog:1.220 gcc-testing/rtems-coverage/ChangeLog:1.221
--- gcc-testing/rtems-coverage/ChangeLog:1.220	Tue May 11 16:08:57 2010
+++ gcc-testing/rtems-coverage/ChangeLog	Tue May 11 16:09:53 2010
@@ -1,5 +1,9 @@
 2010-05-11	Glenn Humphrey
 
+	* ReportsBase.cc: Fixed buffer overflow problem.
+
+2010-05-11	Glenn Humphrey
+
 	* DesiredSymbols.cc, ObjdumpProcessor.cc: Due to differences in nops
 	used for alignment, had to move the trimming of trailing nops to the
 	objdump processing.

diff -u gcc-testing/rtems-coverage/ReportsBase.cc:1.6 gcc-testing/rtems-coverage/ReportsBase.cc:1.7
--- gcc-testing/rtems-coverage/ReportsBase.cc:1.6	Tue May 11 14:44:52 2010
+++ gcc-testing/rtems-coverage/ReportsBase.cc	Tue May 11 16:09:53 2010
@@ -173,7 +173,7 @@
       uint32_t     id = 0;
       std::string  annotation = "";
       std::string  line;
-      char         textLine[100];
+      char         textLine[150];
 
       state = A_SOURCE;
 


 *joel*:
2010-05-11	Joel Sherrill <joel.sherrilL at OARcorp.com>

	* DesiredSymbols.cc, Makefile, ObjdumpProcessor.cc, TargetBase.cc,
	TargetBase.h, TraceConverter.cc, app_common.cc, app_common.h,
	covmerge.cc, covoar.cc: Merge Toolname into Target.
	* Toolnames.cc, Toolnames.h: Removed.

M  1.219  rtems-coverage/ChangeLog
M    1.8  rtems-coverage/DesiredSymbols.cc
M   1.21  rtems-coverage/Makefile
M   1.31  rtems-coverage/ObjdumpProcessor.cc
M    1.4  rtems-coverage/TargetBase.h
M    1.6  rtems-coverage/TargetBase.cc
R    1.6  rtems-coverage/Toolnames.h
R    1.9  rtems-coverage/Toolnames.cc
M    1.7  rtems-coverage/TraceConverter.cc
M   1.10  rtems-coverage/app_common.h
M    1.6  rtems-coverage/app_common.cc
M   1.18  rtems-coverage/covmerge.cc
M   1.19  rtems-coverage/covoar.cc

diff -u gcc-testing/rtems-coverage/ChangeLog:1.218 gcc-testing/rtems-coverage/ChangeLog:1.219
--- gcc-testing/rtems-coverage/ChangeLog:1.218	Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/ChangeLog	Tue May 11 15:18:32 2010
@@ -1,5 +1,12 @@
 2010-05-11	Joel Sherrill <joel.sherrilL at OARcorp.com>
 
+	* DesiredSymbols.cc, Makefile, ObjdumpProcessor.cc, TargetBase.cc,
+	TargetBase.h, TraceConverter.cc, app_common.cc, app_common.h,
+	covmerge.cc, covoar.cc: Merge Toolname into Target.
+	* Toolnames.cc, Toolnames.h: Removed.
+
+2010-05-11	Joel Sherrill <joel.sherrilL at OARcorp.com>
+
 	* CoverageReaderQEMU.cc, ObjdumpProcessor.cc, ObjdumpProcessor.h,
 	TargetBase.cc, TargetBase.h, TraceConverter.cc, TraceWriterQEMU.cc,
 	app_common.cc, app_common.h, covoar.cc, qemu-traces.h: Allow each

diff -u gcc-testing/rtems-coverage/DesiredSymbols.cc:1.7 gcc-testing/rtems-coverage/DesiredSymbols.cc:1.8
--- gcc-testing/rtems-coverage/DesiredSymbols.cc:1.7	Tue May 11 13:17:33 2010
+++ gcc-testing/rtems-coverage/DesiredSymbols.cc	Tue May 11 15:18:32 2010
@@ -371,7 +371,7 @@
     sprintf(
       command,
       "%s -e %s <%s | dos2unix >%s",
-      Tools->getAddr2line(),
+      TargetInfo->getAddr2line(),
       executableFileName.c_str(),
       "ranges1.tmp",
       "ranges2.tmp"

diff -u gcc-testing/rtems-coverage/Makefile:1.20 gcc-testing/rtems-coverage/Makefile:1.21
--- gcc-testing/rtems-coverage/Makefile:1.20	Fri May  7 13:01:51 2010
+++ gcc-testing/rtems-coverage/Makefile	Tue May 11 15:18:32 2010
@@ -37,7 +37,6 @@
   Target_m68k.o  \
   Target_powerpc.o \
   Target_sparc.o \
-  Toolnames.o 
 
 TRACECONVERTER_OBJS = \
   $(COMMON_OBJS) \
@@ -134,7 +133,6 @@
 Target_m68k.o: Target_m68k.cc Target_m68k.h TargetBase.h
 Target_powerpc.o: Target_powerpc.cc Target_powerpc.h TargetBase.h
 Target_sparc.o: Target_sparc.cc Target_sparc.h TargetBase.h
-Toolnames.o: Toolnames.cc Toolnames.h
 
 TraceConverter.o: TraceConverter.cc TraceReaderBase.h TraceList.h
 TraceList.o: TraceList.cc TraceList.h

diff -u gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.30 gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.31
--- gcc-testing/rtems-coverage/ObjdumpProcessor.cc:1.30	Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/ObjdumpProcessor.cc	Tue May 11 15:18:32 2010
@@ -140,7 +140,7 @@
       sprintf(
         buffer,
         "%s -da --section=.text --source %s | sed -e \'s/ *$//\' >%s",
-        Tools->getObjdump(),
+        TargetInfo->getObjdump(),
          exeFileName.c_str(),
         dumpFile
       );

diff -u gcc-testing/rtems-coverage/TargetBase.h:1.3 gcc-testing/rtems-coverage/TargetBase.h:1.4
--- gcc-testing/rtems-coverage/TargetBase.h:1.3	Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/TargetBase.h	Tue May 11 15:18:32 2010
@@ -29,8 +29,12 @@
 
     /*!
      *  This method constructs an TargetBase instance.
+     *
+     *  @param[in] targetName specifies the desired target
      */
-    TargetBase( std::string targetName );
+    TargetBase(
+      std::string targetName
+    );
 
     /*!
      *  This method destructs an TargetBase instance.
@@ -38,6 +42,41 @@
     virtual ~TargetBase();
 
     /*!
+     *  This method returns the program name for addr2line.
+     *
+     *  @return Returns the target specific addr2line program name
+     */
+    const char* getAddr2line( void ) const;
+
+    /*!
+     *  This method returns the CPU name.
+     *
+     *  @return Returns the target cpu name
+     */
+    const char* getCPU( void ) const;
+
+    /*!
+     *  This method returns the program name for nm.
+     *
+     *  @return Returns the target specific nm program name
+     */
+    const char* getNm( void ) const;
+
+    /*!
+     *  This method returns the program name for objdump.
+     *
+     *  @return Returns the target specific objdump program name
+     */
+    const char* getObjdump( void ) const;
+
+    /*!
+     *  This method returns the target name.
+     *
+     *  @return Returns the target name
+     */
+    const char* getTarget( void ) const;
+
+    /*!
      *  This method determines whether the specified line from a 
      *  objdump file is a nop instruction.
      *
@@ -111,6 +150,31 @@
      * for this target.
      */
     std::list <std::string> branchInstructions;
+
+  private:
+
+    /*!
+     * This member variable contains the name of the host program
+     * which reports the source line for the specified program address.
+     */
+    std::string addr2line_m;
+
+    /*!
+     * This member variable contains the name of the target cpu architecture.
+     */
+    std::string cpu_m;
+
+    /*!
+     * This member variable contains the name of the host program
+     * which produces a symbol table.
+     */
+    std::string nm_m;
+
+    /*!
+     * This member variable contains the name of the host program
+     * which disassembles an executable or library.
+     */
+    std::string objdump_m;
   };
 }
 #endif

diff -u gcc-testing/rtems-coverage/TargetBase.cc:1.5 gcc-testing/rtems-coverage/TargetBase.cc:1.6
--- gcc-testing/rtems-coverage/TargetBase.cc:1.5	Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/TargetBase.cc	Tue May 11 15:18:32 2010
@@ -22,12 +22,51 @@
   ):
     targetName_m( targetName )
   {
+    int i;
+    std::string front = "";
+
+    for (i=0 ; targetName_m[i] && targetName_m[i] != '-' ; ) {
+      cpu_m[i]   = targetName_m[i];
+      cpu_m[++i] = '\0';
+    }
+    if (targetName_m[i] == '-')
+      front = targetName_m + "-";
+
+
+    addr2line_m = front + "addr2line";
+    nm_m        = front + "nm";
+    objdump_m   = front + "objdump";
   }
 
   TargetBase::~TargetBase()
   {
   }
 
+  const char* TargetBase::getAddr2line() const
+  {
+    return addr2line_m.c_str();
+  }
+
+  const char* TargetBase::getCPU( void ) const
+  {
+    return cpu_m.c_str();
+  }
+
+  const char* TargetBase::getNm() const
+  {
+    return nm_m.c_str();
+  }
+
+  const char* TargetBase::getObjdump() const
+  {
+    return objdump_m.c_str();
+  }
+
+  const char* TargetBase::getTarget( void ) const
+  {
+    return targetName_m.c_str();
+  }
+
   bool TargetBase::isBranch(
       const char* const instruction
   )

diff -u gcc-testing/rtems-coverage/TraceConverter.cc:1.6 gcc-testing/rtems-coverage/TraceConverter.cc:1.7
--- gcc-testing/rtems-coverage/TraceConverter.cc:1.6	Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/TraceConverter.cc	Tue May 11 15:18:32 2010
@@ -20,7 +20,6 @@
 #include "TraceWriterQEMU.h"
 #include "TraceList.h"
 #include "ObjdumpProcessor.h"
-#include "Toolnames.h"
 #include "app_common.h"
 #include "TargetFactory.h"
 
@@ -82,7 +81,6 @@
   }
 
   // Create toolnames.
-  Tools = new Coverage::Toolnames( cpuname );
   TargetInfo = Target::TargetFactory( cpuname );
 
   objdumpProcessor = new Coverage::ObjdumpProcessor();

diff -u gcc-testing/rtems-coverage/app_common.h:1.9 gcc-testing/rtems-coverage/app_common.h:1.10
--- gcc-testing/rtems-coverage/app_common.h:1.9	Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/app_common.h	Tue May 11 15:18:32 2010
@@ -9,13 +9,11 @@
 
 #include "DesiredSymbols.h"
 #include "Explanations.h"
-#include "Toolnames.h"
 #include "TargetBase.h"
 
 extern Coverage::Explanations*      AllExplanations;
 extern Coverage::ObjdumpProcessor*  objdumpProcessor;
 extern Coverage::DesiredSymbols*    SymbolsToAnalyze;
-extern Coverage::Toolnames*         Tools;
 extern bool                         Verbose;
 extern const char*                  outputDirectory;
 extern bool                         BranchInfoAvailable;

diff -u gcc-testing/rtems-coverage/app_common.cc:1.5 gcc-testing/rtems-coverage/app_common.cc:1.6
--- gcc-testing/rtems-coverage/app_common.cc:1.5	Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/app_common.cc	Tue May 11 15:18:32 2010
@@ -11,7 +11,6 @@
 
 #include "app_common.h"
 #include "DesiredSymbols.h"
-#include "Toolnames.h"
 #include "Explanations.h"
 
 /*
@@ -20,7 +19,6 @@
 Coverage::Explanations*     AllExplanations     = NULL;
 Coverage::ObjdumpProcessor* objdumpProcessor    = NULL;
 Coverage::DesiredSymbols*   SymbolsToAnalyze    = NULL;
-Coverage::Toolnames*        Tools               = NULL;
 bool                        Verbose             = false;
 const char*                 outputDirectory     = ".";
 bool                        BranchInfoAvailable = false;

diff -u gcc-testing/rtems-coverage/covmerge.cc:1.17 gcc-testing/rtems-coverage/covmerge.cc:1.18
--- gcc-testing/rtems-coverage/covmerge.cc:1.17	Mon Feb  1 11:39:01 2010
+++ gcc-testing/rtems-coverage/covmerge.cc	Tue May 11 15:18:32 2010
@@ -47,7 +47,6 @@
 Coverage::CoverageMapBase    *CoverageMap      = NULL;
 Coverage::CoverageReaderBase *CoverageReader   = NULL;
 Coverage::CoverageWriterBase *CoverageWriter   = NULL;
-Coverage::Toolnames          *Tools            = NULL;
 Coverage::ObjdumpProcessor   *ObjdumpProcessor = NULL;
 Coverage::CoverageRanges     *Ranges           = NULL;
 Coverage::Explanations       *Explanations     = NULL;
@@ -352,7 +351,7 @@
   /*
    *  Create toolnames based on target
    */
-  Tools = new Coverage::Toolnames( target );
+  TargetInfo = Target::TargetFactory( target );
 
   /*
    *  Create a ranges set

diff -u gcc-testing/rtems-coverage/covoar.cc:1.18 gcc-testing/rtems-coverage/covoar.cc:1.19
--- gcc-testing/rtems-coverage/covoar.cc:1.18	Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/covoar.cc	Tue May 11 15:18:32 2010
@@ -272,7 +272,6 @@
   //
 
   // Create toolnames based on target.
-  Tools      = new Coverage::Toolnames( target );
   TargetInfo = Target::TargetFactory( target );
 
   // Create the set of desired symbols.



--

Generated by Deluxe Loginfo [http://www.codewiz.org/projects/index.html#loginfo] 2.122 by Bernardo Innocenti <bernie at develer.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/vc/attachments/20100511/a8f08d84/attachment.html>


More information about the vc mailing list