[rtems-testing commit] covoar: Fix issues spotted by clang on FreeBSD 10

Joel Sherrill joel at rtems.org
Fri May 2 14:17:38 UTC 2014


Module:    rtems-testing
Branch:    master
Commit:    df4d9e9f6560210a22158e320abd398e2c3bcf38
Changeset: http://git.rtems.org/rtems-testing/commit/?id=df4d9e9f6560210a22158e320abd398e2c3bcf38

Author:    Joel Sherrill <joel.sherrill at oarcorp.com>
Date:      Fri May  2 14:25:28 2014 +0000

covoar: Fix issues spotted by clang on FreeBSD 10

---

 covoar/CoverageReaderQEMU.cc |    4 +-
 covoar/GcovData.cc           |    6 +-
 covoar/GcovFunctionData.cc   |  295 ++++++++++++++++++++++--------------------
 covoar/ReportsHtml.cc        |    2 +-
 covoar/TargetBase.cc         |    1 +
 covoar/TraceReaderLogQEMU.cc |    4 +-
 covoar/TraceWriterQEMU.cc    |    4 +-
 covoar/app_common.cc         |    4 +-
 covoar/covoar.cc             |    4 +-
 9 files changed, 171 insertions(+), 153 deletions(-)

diff --git a/covoar/CoverageReaderQEMU.cc b/covoar/CoverageReaderQEMU.cc
index d2ed80b..c8df89a 100644
--- a/covoar/CoverageReaderQEMU.cc
+++ b/covoar/CoverageReaderQEMU.cc
@@ -16,8 +16,8 @@
 
 #include "qemu-traces.h"
 
-/* hack so this can compile on the RH7 RTEMS 4.5 host */
-#if (__GNUC__ <= 2)
+/* hack so this can compile on old Linux versions and FreeBSD */
+#if (__GNUC__ <= 2) || defined(__FreeBSD__)
 #define OPEN fopen
 #else
 #define OPEN fopen64
diff --git a/covoar/GcovData.cc b/covoar/GcovData.cc
index 748ffa3..6d10337 100644
--- a/covoar/GcovData.cc
+++ b/covoar/GcovData.cc
@@ -44,7 +44,11 @@ namespace Gcov {
     char*		tempString3;
 
     if ( strlen(fileName) >= FILE_NAME_LENGTH ){
-      fprintf( stderr, "ERROR: File name is to long to be correctly stored: %u\n", strlen(fileName) );
+      fprintf(
+        stderr,
+        "ERROR: File name is too long to be correctly stored: %u\n",
+        (unsigned int) strlen(fileName)
+      );
       return false;
     }
     strcpy( gcnoFileName, fileName );
diff --git a/covoar/GcovFunctionData.cc b/covoar/GcovFunctionData.cc
index 924081d..f746b12 100644
--- a/covoar/GcovFunctionData.cc
+++ b/covoar/GcovFunctionData.cc
@@ -14,9 +14,6 @@
 #include "GcovFunctionData.h"
 #include "ObjdumpProcessor.h"
 #include "CoverageMapBase.h"
-//#include "ExecutableInfo.h"
-//#include "CoverageMap.h"
-//#include "qemu-traces.h"
 
 
 namespace Gcov {
@@ -55,10 +52,11 @@ namespace Gcov {
     symbolName = fcnName;
 
     if ( strlen(fcnName) >= FUNCTION_NAME_LENGTH ) {
-      fprintf( stderr, 
-              "ERROR: Function name is to long to be correctly stored: %u\n", 
-              strlen(fcnName)
-              );
+      fprintf(
+        stderr, 
+        "ERROR: Function name is too long to be correctly stored: %u\n", 
+        (unsigned int) strlen(fcnName)
+      );
       return false;
     }
 
@@ -69,19 +67,31 @@ namespace Gcov {
     if ( symbolInfo != NULL )
       coverageMap = symbolInfo->unifiedCoverageMap;
 
-    //if ( coverageMap == NULL)
-    //  fprintf( stderr, "ERROR: Could not find coverage map for: %s\n", symbolName.c_str() );
-    //else
-    //  fprintf( stderr, "SUCCESS: Hound coverage map for: %s\n", symbolName.c_str() );
+#if 0
+    if ( coverageMap == NULL) {
+      fprintf(
+        stderr,
+        "ERROR: Could not find coverage map for: %s\n",
+        symbolName.c_str()
+      );
+    } else {
+      fprintf(
+        stderr,
+        "SUCCESS: Hound coverage map for: %s\n",
+        symbolName.c_str()
+      );
+   }
+#endif
 
     return true;
   }
 
   bool GcovFunctionData::setFileName( const char* fileName ) {
     if ( strlen(fileName) >= FILE_NAME_LENGTH ){
-      fprintf( stderr, 
-              "ERROR: File name is to long to be correctly stored: %u\n", 
-              strlen(fileName) 
+      fprintf(
+        stderr, 
+        "ERROR: File name is too long to be correctly stored: %u\n", 
+        (unsigned int) strlen(fileName) 
       );
       return false;
     }
@@ -105,14 +115,14 @@ namespace Gcov {
   }
 
   void GcovFunctionData::getCounters(
-    		uint64_t* counterValues,
-    		uint32_t &countersFound,
-    		uint64_t &countersSum,
-    		uint64_t &countersMax
+    uint64_t* counterValues,
+    uint32_t &countersFound,
+    uint64_t &countersSum,
+    uint64_t &countersMax
   ) 
   {
-    arcs_iterator_t		currentArc;
-    int					i;
+    arcs_iterator_t	currentArc;
+    int			i;
 
     countersFound 	= 0;
     countersSum		= 0;
@@ -126,7 +136,8 @@ namespace Gcov {
       currentArc++
     )
     {
-      if ( currentArc->flags == 0 || currentArc->flags == 2 || currentArc->flags == 4 ) {
+      if ( currentArc->flags == 0 || currentArc->flags == 2 ||
+           currentArc->flags == 4 ) {
         countersFound++;
         countersSum += currentArc->counter;
         counterValues[i] = currentArc->counter;
@@ -143,9 +154,9 @@ namespace Gcov {
   }
 
   void GcovFunctionData::addArc(
-    		uint32_t	source,
-    		uint32_t	destination,
-    		uint32_t	flags
+    uint32_t  source,
+    uint32_t  destination,
+    uint32_t  flags
   )
   {
     gcov_arc_info arc;
@@ -166,66 +177,61 @@ namespace Gcov {
   {
     gcov_block_info block;
     numberOfBlocks++;
-    block.id 		 = id;
-    block.flags 		 = flags;
-    block.numberOfLines	 = 0;
-    block.counter	  	 = 0;
+    block.id 	= id;
+    block.flags = flags;
+    block.numberOfLines = 0;
+    block.counter = 0;
     strcpy (block.sourceFileName, sourceFileName);
     blocks.push_back(block);
   }
 
-  void GcovFunctionData::printFunctionInfo( FILE * textFile, 
-  		  uint32_t function_number
+  void GcovFunctionData::printFunctionInfo(
+    FILE * textFile, 
+    uint32_t function_number
   )
   {
-    blocks_iterator_t	currentBlock;
-    arcs_iterator_t		currentArc;
+    blocks_iterator_t  currentBlock;
+    arcs_iterator_t    currentArc;
 
     fprintf(
-          textFile,
-          "\n\n=========================="
-          "FUNCTION %3d "
-          "==========================\n\n",
-          function_number
+      textFile,
+      "\n\n=========================="
+      "FUNCTION %3d "
+      "==========================\n\n",
+      function_number
     );
     fprintf(
-          textFile,
-          "Name:      %s\n"
-          "File:      %s\n"
-          "Line:      %u\n"
-          "Id:        %u\n"
-          "Checksum:  0x%x\n\n",
-          functionName,
-          sourceFileName,
-          firstLineNumber,
-          id,
-          checksum
+      textFile,
+      "Name:      %s\n"
+      "File:      %s\n"
+      "Line:      %u\n"
+      "Id:        %u\n"
+      "Checksum:  0x%x\n\n",
+      functionName,
+      sourceFileName,
+      firstLineNumber,
+      id,
+      checksum
     );
 
     // Print arcs info
-    for (
-        currentArc = arcs.begin();
-        currentArc != arcs.end();
-        currentArc++
-    )
-    {
-        printArcInfo( textFile, currentArc );
+    for ( currentArc = arcs.begin(); currentArc != arcs.end(); currentArc++ ) {
+      printArcInfo( textFile, currentArc );
     }
     fprintf( textFile, "\n");
 
     // Print blocks info
-    for (
-        currentBlock = 	blocks.begin();
-        currentBlock != blocks.end();
-        currentBlock++
-    )
-    {
+    for ( currentBlock = blocks.begin();
+          currentBlock != blocks.end();
+          currentBlock++
+    ) {
       printBlockInfo( textFile, currentBlock );
     }
   }
 
-  void GcovFunctionData::printCoverageInfo( FILE * textFile, 
-  		  uint32_t function_number
+  void GcovFunctionData::printCoverageInfo(
+    FILE     *textFile, 
+    uint32_t  function_number
   )
   {
     uint32_t	    baseAddress = 0;
@@ -235,20 +241,23 @@ namespace Gcov {
 
     if ( coverageMap != NULL ) {
 
-      for (instruction = symbolInfo->instructions.begin(); instruction != symbolInfo->instructions.end(); instruction++)
+      for (instruction = symbolInfo->instructions.begin();
+           instruction != symbolInfo->instructions.end();
+           instruction++) {
         if( instruction->isInstruction ) {
           baseAddress = instruction->address;
           break;
         }
+      }
       baseSize   = coverageMap->getSize();
 
-      fprintf( textFile,
-              "\nInstructions (Base address: 0x%08x, Size: %4u): \n\n",
-              baseAddress, 
-              baseSize 
+      fprintf(
+        textFile,
+        "\nInstructions (Base address: 0x%08x, Size: %4u): \n\n",
+        baseAddress, 
+        baseSize 
       );
-      for (
-            instruction = symbolInfo->instructions.begin(); 
+      for ( instruction = symbolInfo->instructions.begin(); 
             instruction != symbolInfo->instructions.end(); 
             instruction++
       )
@@ -282,16 +291,16 @@ namespace Gcov {
   }
 
   void GcovFunctionData::setBlockFileName(
-                const blocks_iterator_t  block,
-                const char               *fileName
+    const blocks_iterator_t  block,
+    const char               *fileName
   )
   {
     strcpy(block->sourceFileName, fileName);
   }
 
   void GcovFunctionData::addBlockLine(
-    		const blocks_iterator_t  block,
-    		const uint32_t           line
+    const blocks_iterator_t  block,
+    const uint32_t           line
   )
   {
     block->lines.push_back(line);
@@ -299,23 +308,24 @@ namespace Gcov {
   }
 
   blocks_iterator_t GcovFunctionData::findBlockById(
-                const uint32_t    id
+    const uint32_t    id
   )
   {
     blocks_iterator_t blockIterator;
-    if ( !blocks.empty() ){
+
+    if ( !blocks.empty() ) {
       blockIterator = blocks.begin();
       while (	blockIterator != blocks.end( ) ){
         if ( blockIterator->id ==  id)
           break;
         blockIterator++;
       }
-    }
-    else
-      fprintf( stderr,
-              "ERROR: GcovFunctionData::findBlockById() failed,"
-              "no blocks present\n"
+    } else {
+      fprintf(
+        stderr,
+        "ERROR: GcovFunctionData::findBlockById() failed, no blocks present\n"
       );
+    }
     return blockIterator;
   }
 
@@ -323,10 +333,11 @@ namespace Gcov {
                 FILE * textFile, arcs_iterator_t arc
   )
   {
-    fprintf( textFile,
-            " > ARC %3u -> %3u ",
-            arc->sourceBlock,
-            arc->destinationBlock
+    fprintf(
+      textFile,
+      " > ARC %3u -> %3u ",
+      arc->sourceBlock,
+      arc->destinationBlock
     );
 
     fprintf( textFile, "\tFLAGS: ");
@@ -357,42 +368,44 @@ namespace Gcov {
         );
         break;
     }
-    fprintf( textFile, "\tTaken: %5llu\n", arc->counter );
+    fprintf( textFile, "\tTaken: %5llu\n", (unsigned long long) arc->counter );
   }
 
   void GcovFunctionData::printBlockInfo( 
-                FILE * textFile, 
-                blocks_iterator_t block )
+    FILE * textFile, 
+    blocks_iterator_t block
+  )
   {
     std::list<uint32_t>::iterator	line;
 
-    fprintf( textFile,
-            " > BLOCK %3u from %s\n"
-            "    -counter: %5llu\n"
-            "    -flags: 0x%x\n"
-            "    -lines: ",
-            block->id,
-            block->sourceFileName,
-            block->counter,
-            block->flags
+    fprintf(
+      textFile,
+      " > BLOCK %3u from %s\n"
+      "    -counter: %5llu\n"
+      "    -flags: 0x%x\n"
+      "    -lines: ",
+      block->id,
+      block->sourceFileName,
+      (unsigned long long) block->counter,
+      block->flags
     );
     if ( !block->lines.empty( ) )
       for ( line = block->lines.begin() ; line != block->lines.end(); line++ )
-      fprintf ( textFile, "%u, ", *line);
+        fprintf ( textFile, "%u, ", *line);
     fprintf ( textFile, "\n");
   }
 
   bool GcovFunctionData::processFunctionCounters( void ) {
 
-    uint32_t							baseAddress = 0;
-    uint32_t        						currentAddress = 0;
+    uint32_t               baseAddress = 0;
+    uint32_t               currentAddress = 0;
     std::list<Coverage::ObjdumpProcessor::objdumpLine_t>::iterator  instruction;
-    blocks_iterator_t 						blockIterator;
-    blocks_iterator_t 						blockIterator2;
-    arcs_iterator_t 						arcIterator;
-    arcs_iterator_t 						arcIterator2;
-    std::list<uint64_t>                 taken;       // List of taken counts for branches
-    std::list<uint64_t>                 notTaken;    // List of not taken counts for branches
+    blocks_iterator_t 	   blockIterator;
+    blocks_iterator_t 	   blockIterator2;
+    arcs_iterator_t 	   arcIterator;
+    arcs_iterator_t 	   arcIterator2;
+    std::list<uint64_t>    taken;       // List of taken counts for branches
+    std::list<uint64_t>    notTaken;    // List of not taken counts for branches
 
     //fprintf( stderr, "DEBUG: Processing counters for file: %s\n", sourceFileName  ); 
     if ( blocks.empty() || arcs.empty() || coverageMap == NULL || symbolInfo->instructions.empty())
@@ -446,45 +459,43 @@ namespace Gcov {
         (arcIterator->sourceBlock == arcIterator2->sourceBlock ) && 
         !( arcIterator->flags & FAKE_ARC_FLAG ) &&
         !( arcIterator2->flags & FAKE_ARC_FLAG ) 
-      )
-      {
+      ) {
         if ( taken.empty() || notTaken.empty() ) {
-          fprintf( stderr, 
-                    "ERROR: Branchess missing for function: %s from file: %s\n", 
-                    functionName, 
-                    sourceFileName 
-        );
-        return false;
-      }
-      //fprintf( stderr, "DEBUG: Found true branching arc %3u -> %3u\n", arcIterator->sourceBlock, arcIterator->destinationBlock );
-      if ( arcIterator->flags & FALLTHROUGH_ARC_FLAG ) {
-        arcIterator->counter = notTaken.front();
-        notTaken.pop_front();
-        arcIterator2->counter = taken.front();
-        taken.pop_front();
-      }
-      else {
-        arcIterator2->counter = notTaken.front();
-        notTaken.pop_front();
-        arcIterator->counter = taken.front();
-        taken.pop_front();                   
-      }
-
-      blockIterator2 = blocks.begin();
-      //TODO: ADD FAILSAFE
-      while ( arcIterator->destinationBlock != blockIterator2->id) 	
-        blockIterator2++;
-      blockIterator2->counter += arcIterator->counter;
+          fprintf(
+            stderr, 
+            "ERROR: Branchess missing for function: %s from file: %s\n", 
+            functionName, 
+            sourceFileName 
+          );
+          return false;
+        }
+        //fprintf( stderr, "DEBUG: Found true branching arc %3u -> %3u\n", arcIterator->sourceBlock, arcIterator->destinationBlock );
+        if ( arcIterator->flags & FALLTHROUGH_ARC_FLAG ) {
+          arcIterator->counter = notTaken.front();
+          notTaken.pop_front();
+          arcIterator2->counter = taken.front();
+          taken.pop_front();
+        } else {
+          arcIterator2->counter = notTaken.front();
+          notTaken.pop_front();
+          arcIterator->counter = taken.front();
+          taken.pop_front();                   
+        }
 
-      blockIterator2 = blocks.begin();
-      //TODO: ADD FAILSAFE
-      while ( arcIterator2->destinationBlock != blockIterator2->id)
+        blockIterator2 = blocks.begin();
+        //TODO: ADD FAILSAFE
+        while ( arcIterator->destinationBlock != blockIterator2->id) 	
           blockIterator2++;
-        blockIterator2->counter += arcIterator2->counter;
-    }	    
-    blockIterator++;
-  }
-
+        blockIterator2->counter += arcIterator->counter;
+  
+        blockIterator2 = blocks.begin();
+        //TODO: ADD FAILSAFE
+        while ( arcIterator2->destinationBlock != blockIterator2->id)
+            blockIterator2++;
+          blockIterator2->counter += arcIterator2->counter;
+      }	    
+      blockIterator++;
+    }
 
     // Reset iterators and variables
     blockIterator = blocks.begin();
diff --git a/covoar/ReportsHtml.cc b/covoar/ReportsHtml.cc
index 162b74c..101c76b 100644
--- a/covoar/ReportsHtml.cc
+++ b/covoar/ReportsHtml.cc
@@ -469,7 +469,7 @@ namespace Coverage {
     // format.  If it has changed close out the old format and open up the
     // new format.
     if ( state != lastState_m ) {
-      fprintf( aFile, stateText.c_str() );
+      fprintf( aFile, "%s", stateText.c_str() );
       lastState_m = state;
     }
 
diff --git a/covoar/TargetBase.cc b/covoar/TargetBase.cc
index 3064c32..e5a0ee6 100644
--- a/covoar/TargetBase.cc
+++ b/covoar/TargetBase.cc
@@ -10,6 +10,7 @@
 
 #include <algorithm>
 #include <stdio.h>
+#include <stdlib.h>
 
 namespace Target {
 
diff --git a/covoar/TraceReaderLogQEMU.cc b/covoar/TraceReaderLogQEMU.cc
index 4783668..d92614a 100644
--- a/covoar/TraceReaderLogQEMU.cc
+++ b/covoar/TraceReaderLogQEMU.cc
@@ -22,8 +22,8 @@ typedef uint32_t target_ulong;
 
 #include "qemu-traces.h"
 
-/* hack so this can compile on the RH7 RTEMS 4.5 host */
-#if (__GNUC__ <= 2)
+/* hack so this can compile on old Linux versions and FreeBSD */
+#if (__GNUC__ <= 2) || defined(__FreeBSD__)
 #define STAT stat
 #define OPEN fopen
 #else
diff --git a/covoar/TraceWriterQEMU.cc b/covoar/TraceWriterQEMU.cc
index 689db65..89cfd01 100644
--- a/covoar/TraceWriterQEMU.cc
+++ b/covoar/TraceWriterQEMU.cc
@@ -19,8 +19,8 @@ typedef uint32_t target_ulong;
 
 #include "qemu-traces.h"
 
-/* hack so this can compile on the RH7 RTEMS 4.5 host */
-#if (__GNUC__ <= 2)
+/* hack so this can compile on old Linux versions and FreeBSD */
+#if (__GNUC__ <= 2) || defined(__FreeBSD__)
 #define STAT stat
 #define OPEN fopen
 #else
diff --git a/covoar/app_common.cc b/covoar/app_common.cc
index 025ca8f..d62e435 100644
--- a/covoar/app_common.cc
+++ b/covoar/app_common.cc
@@ -9,8 +9,8 @@
 #include "DesiredSymbols.h"
 #include "Explanations.h"
 
-/* hack so this can compile on the RH7 RTEMS 4.5 host */
-#if (__GNUC__ <= 2)
+/* hack so this can compile on old Linux versions and FreeBSD */
+#if (__GNUC__ <= 2) || defined(__FreeBSD__)
 #define STAT stat
 #define OPEN fopen
 #else
diff --git a/covoar/covoar.cc b/covoar/covoar.cc
index 14b50c6..78954fd 100644
--- a/covoar/covoar.cc
+++ b/covoar/covoar.cc
@@ -355,7 +355,9 @@ int main(
   SymbolsToAnalyze->load( symbolsFile );
   if (Verbose)
     fprintf(
-      stderr, "Analyzing %u symbols\n", SymbolsToAnalyze->set.size()
+      stderr,
+      "Analyzing %u symbols\n",
+      (unsigned int) SymbolsToAnalyze->set.size()
     );
 
   // Create explanations.




More information about the vc mailing list