[PATCH v2 11/13] Remove TargetInfo global variable

Ryan Long ryan.long at oarcorp.com
Mon Aug 2 20:44:27 UTC 2021


- Remove TargetInfo from app_common
- Created the targetInfo_m  member variable in CoverageReaderBase,
  TraceWriterBase, and ObjdumpProcessor
- Made functions to set the value of targetInfo_m
---
 tester/covoar/CoverageReaderBase.h  |  5 +++++
 tester/covoar/CoverageReaderQEMU.cc |  4 ++--
 tester/covoar/ObjdumpProcessor.cc   | 31 ++++++++++++++++++++-----------
 tester/covoar/ObjdumpProcessor.h    | 20 +++++++++++++++++++-
 tester/covoar/TraceConverter.cc     |  6 ++++--
 tester/covoar/TraceWriterBase.h     |  5 +++++
 tester/covoar/TraceWriterQEMU.cc    |  4 ++--
 tester/covoar/app_common.cc         |  1 -
 tester/covoar/app_common.h          |  1 -
 tester/covoar/covmerge.cc           |  7 ++++++-
 tester/covoar/covoar.cc             |  9 +++++++--
 11 files changed, 70 insertions(+), 23 deletions(-)

diff --git a/tester/covoar/CoverageReaderBase.h b/tester/covoar/CoverageReaderBase.h
index ba909e6..332fc4d 100644
--- a/tester/covoar/CoverageReaderBase.h
+++ b/tester/covoar/CoverageReaderBase.h
@@ -52,6 +52,11 @@ namespace Coverage {
    * This member variable tells whether the branch info is available.
    */
   bool branchInfoAvailable_m = false;
+
+  /*!
+   * This member variable points to the target's info
+   */
+  std::shared_ptr<Target::TargetBase> targetInfo_m = nullptr;
   };
 
 }
diff --git a/tester/covoar/CoverageReaderQEMU.cc b/tester/covoar/CoverageReaderQEMU.cc
index 802d862..a3d9d02 100644
--- a/tester/covoar/CoverageReaderQEMU.cc
+++ b/tester/covoar/CoverageReaderQEMU.cc
@@ -51,8 +51,8 @@ namespace Coverage {
     uint8_t             notTaken;
     uint8_t             branchInfo;
 
-    taken      = TargetInfo->qemuTakenBit();
-    notTaken   = TargetInfo->qemuNotTakenBit();
+    taken      = targetInfo_m->qemuTakenBit();
+    notTaken   = targetInfo_m->qemuNotTakenBit();
     branchInfo = taken | notTaken;
 
     //
diff --git a/tester/covoar/ObjdumpProcessor.cc b/tester/covoar/ObjdumpProcessor.cc
index f590ece..90620aa 100644
--- a/tester/covoar/ObjdumpProcessor.cc
+++ b/tester/covoar/ObjdumpProcessor.cc
@@ -124,8 +124,10 @@ namespace Coverage {
   }
 
   ObjdumpProcessor::ObjdumpProcessor(
-    DesiredSymbols& symbolsToAnalyze
-  ): symbolsToAnalyze_m( symbolsToAnalyze )
+    DesiredSymbols&     symbolsToAnalyze,
+    std::shared_ptr<Target::TargetBase>& targetInfo
+  ): symbolsToAnalyze_m( symbolsToAnalyze ),
+     targetInfo_m( targetInfo )
   {
   }
 
@@ -191,7 +193,7 @@ namespace Coverage {
     const char *instruction
   )
   {
-    if ( !TargetInfo ) {
+    if ( !targetInfo_m ) {
       fprintf(
         stderr,
         "ERROR: ObjdumpProcessor::IsBranch - unknown architecture\n"
@@ -200,14 +202,14 @@ namespace Coverage {
       return false;
     }
 
-    return TargetInfo->isBranch( instruction );
+    return targetInfo_m->isBranch( instruction );
   }
 
   bool ObjdumpProcessor::isBranchLine(
     const char* const line
   )
   {
-    if ( !TargetInfo ) {
+    if ( !targetInfo_m ) {
       fprintf(
         stderr,
         "ERROR: ObjdumpProcessor::isBranchLine - unknown architecture\n"
@@ -216,7 +218,7 @@ namespace Coverage {
       return false;
     }
 
-    return  TargetInfo->isBranchLine( line );
+    return  targetInfo_m->isBranchLine( line );
   }
 
   bool ObjdumpProcessor::isNop(
@@ -224,7 +226,7 @@ namespace Coverage {
     int&              size
   )
   {
-    if ( !TargetInfo ){
+    if ( !targetInfo_m ){
       fprintf(
         stderr,
         "ERROR: ObjdumpProcessor::isNop - unknown architecture\n"
@@ -233,7 +235,7 @@ namespace Coverage {
       return false;
     }
 
-    return TargetInfo->isNopLine( line, size );
+    return targetInfo_m->isNopLine( line, size );
   }
 
   void ObjdumpProcessor::getFile(
@@ -243,12 +245,12 @@ namespace Coverage {
     )
   {
     rld::process::status        status;
-    rld::process::arg_container args = { TargetInfo->getObjdump(),
+    rld::process::arg_container args = { targetInfo_m->getObjdump(),
                                          "-Cda", "--section=.text", "--source",
                                          fileName };
     try
     {
-      status = rld::process::execute( TargetInfo->getObjdump(),
+      status = rld::process::execute( targetInfo_m->getObjdump(),
                                       args, objdumpFile.name(), err.name() );
       if ( (status.type != rld::process::status::normal)
            || (status.code != 0) ) {
@@ -256,7 +258,7 @@ namespace Coverage {
       }
     } catch( rld::error& err )
       {
-        std::cout << "Error while running " << TargetInfo->getObjdump()
+        std::cout << "Error while running " << targetInfo_m->getObjdump()
                   << " on " << fileName << std::endl;
         std::cout << err.what << " in " << err.where << std::endl;
         return;
@@ -497,4 +499,11 @@ namespace Coverage {
       }
     }
   }
+
+  void ObjdumpProcessor::setTargetInfo(
+    std::shared_ptr<Target::TargetBase>& targetInfo
+  )
+  {
+    targetInfo_m = targetInfo;
+  }
 }
diff --git a/tester/covoar/ObjdumpProcessor.h b/tester/covoar/ObjdumpProcessor.h
index 53671c6..ed36981 100644
--- a/tester/covoar/ObjdumpProcessor.h
+++ b/tester/covoar/ObjdumpProcessor.h
@@ -91,7 +91,8 @@ namespace Coverage {
      *  This method constructs an ObjdumpProcessor instance.
      */
     ObjdumpProcessor(
-      DesiredSymbols& symbolsToAnalyze
+      DesiredSymbols&     symbolsToAnalyze,
+      std::shared_ptr<Target::TargetBase>& targetInfo
     );
 
     /*!
@@ -153,6 +154,13 @@ namespace Coverage {
       const char* const line
     );
 
+    /*!
+     * This method sets the targetInfo_m variable.
+     *
+     * @param[in] targetInfo the pointer to set targetInfo_m to
+     */
+    void setTargetInfo( std::shared_ptr<Target::TargetBase>& targetInfo );
+
   private:
 
     /*!
@@ -176,9 +184,19 @@ namespace Coverage {
     );
 
     /*!
+     * This member variable is a buffer for input
+     */
+    char* inputBuffer_m;
+
+    /*!
      * This member variable contains the symbols to be analyzed
      */
     DesiredSymbols& symbolsToAnalyze_m;
+
+    /*!
+     * This member variable points to the target's info
+     */
+    std::shared_ptr<Target::TargetBase>& targetInfo_m;
   };
 }
 #endif
diff --git a/tester/covoar/TraceConverter.cc b/tester/covoar/TraceConverter.cc
index 67edd11..244d0f7 100644
--- a/tester/covoar/TraceConverter.cc
+++ b/tester/covoar/TraceConverter.cc
@@ -92,7 +92,6 @@ int main(
   Coverage::DesiredSymbols     symbolsToAnalyze;
   bool                         verbose = false;
   std::string                  dynamicLibrary;
-  Coverage::ObjdumpProcessor   objdumpProcessor( symbolsToAnalyze );
 
   setup_signals();
 
@@ -130,7 +129,10 @@ int main(
   }
 
   // Create toolnames.
-  TargetInfo = Target::TargetFactory( cpuname );
+  std::shared_ptr<Target::TargetBase>
+    targetInfo( Target::TargetFactory( cpuname ) );
+
+  Coverage::ObjdumpProcessor objdumpProcessor( symbolsToAnalyze, targetInfo );
 
   if ( !dynamicLibrary.empty() )
     executableInfo = new Coverage::ExecutableInfo(
diff --git a/tester/covoar/TraceWriterBase.h b/tester/covoar/TraceWriterBase.h
index 070dcca..9e80dbc 100644
--- a/tester/covoar/TraceWriterBase.h
+++ b/tester/covoar/TraceWriterBase.h
@@ -45,6 +45,11 @@ namespace Trace {
        Trace::TraceReaderBase    *log,
        bool                       verbose
      ) =  0;
+
+    /*!
+     * This member variable points to the target's info
+     */
+    std::shared_ptr<Target::TargetBase> targetInfo_m;
   };
 
 }
diff --git a/tester/covoar/TraceWriterQEMU.cc b/tester/covoar/TraceWriterQEMU.cc
index 01d9cbc..18a6c68 100644
--- a/tester/covoar/TraceWriterQEMU.cc
+++ b/tester/covoar/TraceWriterQEMU.cc
@@ -83,8 +83,8 @@ namespace Trace {
     uint8_t             taken;
     uint8_t             notTaken;
 
-    taken    = TargetInfo->qemuTakenBit();
-    notTaken = TargetInfo->qemuNotTakenBit();
+    taken    = targetInfo_m->qemuTakenBit();
+    notTaken = targetInfo_m->qemuNotTakenBit();
 
     //
     // Verify that the TraceList has a non-zero size.
diff --git a/tester/covoar/app_common.cc b/tester/covoar/app_common.cc
index 8f05464..568d108 100644
--- a/tester/covoar/app_common.cc
+++ b/tester/covoar/app_common.cc
@@ -56,7 +56,6 @@
 /*
  *  Global variables for the program
  */
-Target::TargetBase*         TargetInfo          = NULL;
 
 
 bool FileIsNewer(
diff --git a/tester/covoar/app_common.h b/tester/covoar/app_common.h
index 6649905..454d389 100644
--- a/tester/covoar/app_common.h
+++ b/tester/covoar/app_common.h
@@ -12,7 +12,6 @@
 #include "Explanations.h"
 #include "TargetBase.h"
 
-extern Target::TargetBase*          TargetInfo;
 
 
 bool FileIsNewer( const char *f1, const char *f2 );
diff --git a/tester/covoar/covmerge.cc b/tester/covoar/covmerge.cc
index a200998..5ef2fe0 100644
--- a/tester/covoar/covmerge.cc
+++ b/tester/covoar/covmerge.cc
@@ -257,6 +257,7 @@ int main(
   int opt;
   int i;
   char *format = NULL;
+  Target::TargetBase* targetInfo;
 
   progname = argv[0];
 
@@ -347,7 +348,7 @@ int main(
   /*
    *  Create toolnames based on target
    */
-  TargetInfo = Target::TargetFactory( target );
+  targetInfo = Target::TargetFactory( target );
 
   /*
    *  Create a ranges set
@@ -375,11 +376,15 @@ int main(
     exit(-1);
   }
 
+  CoverageReader.setTargetInfo( targetInfo );
+
   /*
    * Create the objdump processor
    */
   ObjdumpProcessor = new Coverage::ObjdumpProcessor();
 
+  ObjdumpProcessor->setTargetInfo( targetInfo );
+
   /*
    * Create writer
    *
diff --git a/tester/covoar/covoar.cc b/tester/covoar/covoar.cc
index ef22362..e0dc341 100644
--- a/tester/covoar/covoar.cc
+++ b/tester/covoar/covoar.cc
@@ -184,7 +184,7 @@ int covoar(
   std::string                   outputDirectory = ".";
   Coverage::DesiredSymbols      symbolsToAnalyze;
   bool                          branchInfoAvailable = false;
-  Coverage::ObjdumpProcessor    objdumpProcessor( symbolsToAnalyze );
+  //Target::TargetBase*           targetInfo;
 
   //
   // Process command line options.
@@ -278,7 +278,10 @@ int covoar(
   //
 
   // Create data based on target.
-  TargetInfo = Target::TargetFactory( buildTarget );
+  std::shared_ptr<Target::TargetBase>
+    targetInfo( Target::TargetFactory( buildTarget ) );
+
+  Coverage::ObjdumpProcessor objdumpProcessor( symbolsToAnalyze, targetInfo );
 
   //
   // Read symbol configuration file and load needed symbols.
@@ -380,6 +383,8 @@ int covoar(
   if (!coverageReader)
     throw rld::error( "Unable to create coverage file reader", "covoar" );
 
+  coverageReader->targetInfo_m = targetInfo;
+
   // Prepare each executable for analysis.
   for (auto& exe : executablesToAnalyze) {
     if (verbose)
-- 
1.8.3.1



More information about the devel mailing list