[PATCH v2 2/4] Target: Convert to C++

Ryan Long ryan.long at oarcorp.com
Thu Dec 9 23:00:09 UTC 2021


---
 tester/covoar/TargetBase.cc     | 35 ++++++++++++++++++-----------------
 tester/covoar/TargetBase.h      | 18 +++++++++---------
 tester/covoar/Target_aarch64.cc | 18 ++++++++++--------
 tester/covoar/Target_aarch64.h  |  6 +++---
 tester/covoar/Target_arm.cc     | 16 +++++++++-------
 tester/covoar/Target_arm.h      |  6 +++---
 tester/covoar/Target_i386.cc    | 22 ++++++++++++----------
 tester/covoar/Target_i386.h     |  4 ++--
 tester/covoar/Target_lm32.cc    |  6 +++---
 tester/covoar/Target_lm32.h     |  4 ++--
 tester/covoar/Target_m68k.cc    | 12 +++++++-----
 tester/covoar/Target_m68k.h     |  6 +++---
 tester/covoar/Target_powerpc.cc |  8 ++++----
 tester/covoar/Target_powerpc.h  |  4 ++--
 tester/covoar/Target_riscv.cc   |  6 +++---
 tester/covoar/Target_riscv.h    |  6 +++---
 tester/covoar/Target_sparc.cc   | 12 +++++++-----
 tester/covoar/Target_sparc.h    |  6 +++---
 18 files changed, 103 insertions(+), 92 deletions(-)

diff --git a/tester/covoar/TargetBase.cc b/tester/covoar/TargetBase.cc
index 7ee45b5..a62e90f 100644
--- a/tester/covoar/TargetBase.cc
+++ b/tester/covoar/TargetBase.cc
@@ -40,24 +40,24 @@ namespace Target {
   {
   }
 
-  const char* TargetBase::getAddr2line() const
+  const std::string& TargetBase::getAddr2line() const
   {
-    return addr2line_m.c_str();
+    return addr2line_m;
   }
 
-  const char* TargetBase::getCPU( void ) const
+  const std::string& TargetBase::getCPU() const
   {
-    return cpu_m.c_str();
+    return cpu_m;
   }
 
-  const char* TargetBase::getObjdump() const
+  const std::string& TargetBase::getObjdump() const
   {
-    return objdump_m.c_str();
+    return objdump_m;
   }
 
-  const char* TargetBase::getTarget( void ) const
+  const std::string& TargetBase::getTarget() const
   {
-    return targetName_m.c_str();
+    return targetName_m;
   }
 
   bool TargetBase::isBranch( const std::string& instruction )
@@ -83,12 +83,13 @@ namespace Target {
   }
 
   bool TargetBase::isBranchLine(
-    const char* const line
+    const std::string& line
   )
   {
-    #define WARNING \
-        "WARNING: TargetBase::isBranchLine - (%d) " \
-        "Unable to find instruction in: %s\n"
+    #define WARNING_PT1 \
+        "WARNING: TargetBase::isBranchLine - ("
+    #define WARNING_PT2 \
+        ") Unable to find instruction in: "
     const char *ch;
     char instruction[120];
     int  result;
@@ -101,7 +102,7 @@ namespace Target {
       ch++;
     }
     if (*ch != '\t') {
-      fprintf( stderr, WARNING, 1, line );
+      std::cerr << WARNING_PT1 << 1 << WARNING_PT2 << line << std::endl;
       return false;
     }
     ch++;
@@ -110,7 +111,7 @@ namespace Target {
     while ((*ch != '\t') && (*ch != '\0'))
       ch++;
     if (*ch != '\t') {
-      fprintf( stderr, WARNING, 2, line) ;
+      std::cerr << WARNING_PT1 << 2 << WARNING_PT2 << line << std::endl;
       return false;
     }
     ch++;
@@ -119,19 +120,19 @@ namespace Target {
     // after the second tab.
     result = sscanf( ch, "%s", instruction );
     if (result != 1) {
-        fprintf( stderr, WARNING, 3, line );
+        std::cerr << WARNING_PT1 << 3 << WARNING_PT2 << line << std::endl;
         return false;
     }
 
     return isBranch( instruction );
   }
 
-  uint8_t TargetBase::qemuTakenBit(void)
+  uint8_t TargetBase::qemuTakenBit()
   {
     return TRACE_OP_BR0;
   }
 
-  uint8_t TargetBase::qemuNotTakenBit(void)
+  uint8_t TargetBase::qemuNotTakenBit()
   {
     return TRACE_OP_BR1;
   }
diff --git a/tester/covoar/TargetBase.h b/tester/covoar/TargetBase.h
index e5c143e..0a75c85 100644
--- a/tester/covoar/TargetBase.h
+++ b/tester/covoar/TargetBase.h
@@ -42,28 +42,28 @@ namespace Target {
      *
      *  @return Returns the target specific addr2line program name
      */
-    const char* getAddr2line( void ) const;
+    const std::string& getAddr2line() const;
 
     /*!
      *  This method returns the CPU name.
      *
      *  @return Returns the target cpu name
      */
-    const char* getCPU( void ) const;
+    const std::string& getCPU() const;
 
     /*!
      *  This method returns the program name for objdump.
      *
      *  @return Returns the target specific objdump program name
      */
-    const char* getObjdump( void ) const;
+    const std::string& getObjdump() const;
 
     /*!
      *  This method returns the target name.
      *
      *  @return Returns the target name
      */
-    const char* getTarget( void ) const;
+    const std::string& getTarget() const;
 
     /*!
      *  This method determines whether the specified line from a
@@ -75,8 +75,8 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
      */
     virtual bool isNopLine(
-      const char* const line,
-      int&              size
+      const std::string& line,
+      int&               size
     ) = 0;
 
 
@@ -90,7 +90,7 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a branch, FALSE otherwise.
      */
     bool isBranchLine(
-      const char* const line
+      const std::string& line
     );
 
 
@@ -104,13 +104,13 @@ namespace Target {
      *  This method returns the bit set by Qemu in the trace record
      *  when a branch is taken.
      */
-    virtual uint8_t qemuTakenBit(void);
+    virtual uint8_t qemuTakenBit();
 
     /*!
      *  This method returns the bit set by Qemu in the trace record
      *  when a branch is taken.
      */
-    virtual uint8_t qemuNotTakenBit(void);
+    virtual uint8_t qemuNotTakenBit();
 
   protected:
 
diff --git a/tester/covoar/Target_aarch64.cc b/tester/covoar/Target_aarch64.cc
index 4d16456..139f5fe 100644
--- a/tester/covoar/Target_aarch64.cc
+++ b/tester/covoar/Target_aarch64.cc
@@ -49,31 +49,33 @@ namespace Target {
   }
 
   bool Target_aarch64::isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
   )
   {
-    if (!strcmp( &line[strlen(line)-3], "nop")) {
+    size_t stringLen = line.length();
+
+    if ( line.substr( stringLen - 3 ) == "nop" ) {
       size = 4;
       return true;
     }
 
-    if (!strncmp( &line[strlen(line)-6], "udf", 3)) {
+    if ( line.substr( stringLen - 6, 3 ) == "udf" ) {
       size = 4;
       return true;
     }
 
     // On ARM, there are literal tables at the end of methods.
     // We need to avoid them.
-    if (!strncmp( &line[strlen(line)-10], ".byte", 5)) {
+    if ( line.substr( stringLen - 10, 5 ) == ".byte" ) {
       size = 1;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-13], ".short", 6)) {
+    if ( line.substr( stringLen - 13, 6 ) == ".short" ) {
       size = 2;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-16], ".word", 5)) {
+    if ( line.substr( stringLen - 16, 5 ) == ".word" ) {
       size = 4;
       return true;
     }
@@ -82,7 +84,7 @@ namespace Target {
   }
 
   bool Target_aarch64::isBranch(
-      const char* instruction
+      const std::string& instruction
   )
   {
     throw rld::error(
diff --git a/tester/covoar/Target_aarch64.h b/tester/covoar/Target_aarch64.h
index fb011e8..42353e5 100644
--- a/tester/covoar/Target_aarch64.h
+++ b/tester/covoar/Target_aarch64.h
@@ -42,8 +42,8 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
      */
     virtual bool isNopLine(
-      const char* const line,
-      int&              size
+      const std::string& line,
+      int&               size
     ) override;
 
     /*!
@@ -51,7 +51,7 @@ namespace Target {
      *  objdump file is a branch instruction.
      */
     bool isBranch(
-      const char* const instruction
+      const std::string& instruction
     );
 
     /* Documentation inherited from base class */
diff --git a/tester/covoar/Target_arm.cc b/tester/covoar/Target_arm.cc
index 94d50bb..50c9ce3 100644
--- a/tester/covoar/Target_arm.cc
+++ b/tester/covoar/Target_arm.cc
@@ -82,26 +82,28 @@ namespace Target {
   }
 
   bool Target_arm::isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
   )
   {
-    if (!strcmp( &line[strlen(line)-3], "nop")) {
+    size_t stringLen = line.length();
+
+    if ( line.substr( stringLen - 3 ) == "nop" ) {
       size = 4;
       return true;
     }
 
     // On ARM, there are literal tables at the end of methods.
     // We need to avoid them.
-    if (!strncmp( &line[strlen(line)-10], ".byte", 5)) {
+    if ( line.substr( stringLen - 10, 5 ) == ".byte" ) {
       size = 1;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-13], ".short", 6)) {
+    if ( line.substr( stringLen - 13, 6 ) == ".short" ) {
       size = 2;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-16], ".word", 5)) {
+    if ( line.substr( stringLen - 16, 5 ) == ".word" ) {
       size = 4;
       return true;
     }
@@ -111,7 +113,7 @@ namespace Target {
   }
 
   bool Target_arm::isBranch(
-      const char* instruction
+      const std::string& instruction
   )
   {
     throw rld::error(
diff --git a/tester/covoar/Target_arm.h b/tester/covoar/Target_arm.h
index 80b68af..3ff9b6f 100644
--- a/tester/covoar/Target_arm.h
+++ b/tester/covoar/Target_arm.h
@@ -42,8 +42,8 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
      */
     bool isNopLine(
-      const char* const line,
-      int&              size
+      const std::string& line,
+      int&               size
     );
 
     /*!
@@ -51,7 +51,7 @@ namespace Target {
      *  objdump file is a branch instruction.
      */
     bool isBranch(
-      const char* const instruction
+      const std::string& instruction
     );
 
   private:
diff --git a/tester/covoar/Target_i386.cc b/tester/covoar/Target_i386.cc
index 2990273..cb8e64d 100644
--- a/tester/covoar/Target_i386.cc
+++ b/tester/covoar/Target_i386.cc
@@ -57,39 +57,41 @@ namespace Target {
   }
 
   bool Target_i386::isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
   )
   {
-    if (!strcmp( &line[strlen(line)-3], "nop")) {
+    size_t stringLen = line.length();
+
+    if ( line.substr( stringLen - 3 ) == "nop" ) {
       size = 1;
       return true;
     }
 
     // i386 has some two and three byte nops
-    if (!strncmp( &line[strlen(line)-14], "xchg   %ax,%ax", 14)) {
+    if ( line.substr( stringLen - 14 ) == "xchg   %ax,%ax" ) {
       size = 2;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-16], "xor    %eax,%eax", 16)) {
+    if ( line.substr( stringLen - 16 ) == "xor    %eax,%eax" ) {
       size = 2;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-16], "xor    %ebx,%ebx", 16)) {
+    if ( line.substr( stringLen - 16 ) == "xor    %ebx,%ebx" ) {
       size = 2;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-16], "xor    %esi,%esi", 16)) {
+    if ( line.substr( stringLen - 16 ) == "xor    %esi,%esi" ) {
       size = 2;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-21], "lea    0x0(%esi),%esi", 21)) {
+    if ( line.substr( stringLen - 21 ) == "lea    0x0(%esi),%esi" ) {
       size = 3;
       return true;
     }
-    if (!strncmp( &line[strlen(line)-28], "lea    0x0(%esi,%eiz,1),%esi", 28)) {
+    if ( line.substr( stringLen - 28 ) == "lea    0x0(%esi,%eiz,1),%esi" ) {
       // Could be 4 or 7 bytes of padding.
-      if (!strncmp( &line[strlen(line)-32], "00", 2)) {
+      if ( line.substr( stringLen - 32, 2 ) == "00" ) {
         size = 7;
       } else {
         size = 4;
diff --git a/tester/covoar/Target_i386.h b/tester/covoar/Target_i386.h
index 3641de7..c9a79cd 100644
--- a/tester/covoar/Target_i386.h
+++ b/tester/covoar/Target_i386.h
@@ -43,8 +43,8 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
      */
     bool isNopLine(
-      const char* const line,
-      int&              size
+      const std::string& line,
+      int&               size
     );
 
     /* Documentation inherited from base class */
diff --git a/tester/covoar/Target_lm32.cc b/tester/covoar/Target_lm32.cc
index 18e7191..7babbd2 100644
--- a/tester/covoar/Target_lm32.cc
+++ b/tester/covoar/Target_lm32.cc
@@ -30,11 +30,11 @@ namespace Target {
   }
 
   bool Target_lm32::isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
   )
   {
-    if (!strcmp( &line[strlen(line)-3], "nop")) {
+    if ( line.substr( line.length() - 3 ) == "nop" ) {
       size = 4;
       return true;
     }
diff --git a/tester/covoar/Target_lm32.h b/tester/covoar/Target_lm32.h
index 5d23db5..d21776e 100644
--- a/tester/covoar/Target_lm32.h
+++ b/tester/covoar/Target_lm32.h
@@ -43,8 +43,8 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
      */
     bool isNopLine(
-      const char* const line,
-      int&              size
+      const std::string& line,
+      int&               size
     );
 
   private:
diff --git a/tester/covoar/Target_m68k.cc b/tester/covoar/Target_m68k.cc
index 536ae80..7c761be 100644
--- a/tester/covoar/Target_m68k.cc
+++ b/tester/covoar/Target_m68k.cc
@@ -77,11 +77,13 @@ namespace Target {
   }
 
   bool Target_m68k::isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
   )
   {
-    if (!strcmp( &line[strlen(line)-3], "nop")) {
+    size_t stringLen = line.length();
+
+    if ( line.substr( stringLen - 3 ) == "nop" ) {
       size = 2;
       return true;
     }
@@ -89,7 +91,7 @@ namespace Target {
     #define GNU_LD_FILLS_ALIGNMENT_WITH_RTS
     #if defined(GNU_LD_FILLS_ALIGNMENT_WITH_RTS)
       // Until binutils 2.20, binutils would fill with rts not nop
-      if (!strcmp( &line[strlen(line)-3], "rts")) {
+      if ( line.substr( stringLen - 3 ) == "rts" ) {
         size = 4;
         return true;
       }
@@ -99,7 +101,7 @@ namespace Target {
   }
 
   bool Target_m68k::isBranch(
-      const char* const instruction
+      const std::string& instruction
   )
   {
     throw rld::error(
diff --git a/tester/covoar/Target_m68k.h b/tester/covoar/Target_m68k.h
index 5ed7933..13a6030 100644
--- a/tester/covoar/Target_m68k.h
+++ b/tester/covoar/Target_m68k.h
@@ -43,8 +43,8 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
      */
     bool isNopLine(
-      const char* const line,
-      int&              size
+      const std::string& line,
+      int&               size
     );
 
     /*!
@@ -52,7 +52,7 @@ namespace Target {
      *  objdump file is a branch instruction.
      */
     bool isBranch(
-      const char* const instruction
+      const std::string& instruction
     );
 
     /* Documentation inherited from base class */
diff --git a/tester/covoar/Target_powerpc.cc b/tester/covoar/Target_powerpc.cc
index c62feb0..6cc541d 100644
--- a/tester/covoar/Target_powerpc.cc
+++ b/tester/covoar/Target_powerpc.cc
@@ -58,11 +58,11 @@ namespace Target {
   }
 
   bool Target_powerpc::isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
   )
   {
-    if (!strcmp( &line[strlen(line)-3], "nop")) {
+    if ( line.substr( line.length() - 3 ) == "nop" ) {
       size = 4;
       return true;
     }
@@ -71,7 +71,7 @@ namespace Target {
   }
 
   bool Target_powerpc::isBranch(
-      const char* const instruction
+      const std::string& instruction
   )
   {
     throw rld::error(
diff --git a/tester/covoar/Target_powerpc.h b/tester/covoar/Target_powerpc.h
index 3008d4c..b446918 100644
--- a/tester/covoar/Target_powerpc.h
+++ b/tester/covoar/Target_powerpc.h
@@ -43,7 +43,7 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
      */
     bool isNopLine(
-      const char* const line,
+      const std::string& line,
       int&              size
     );
 
@@ -52,7 +52,7 @@ namespace Target {
      *  objdump file is a branch instruction.
      */
     bool isBranch(
-      const char* const instruction
+      const std::string& instruction
     );
 
   private:
diff --git a/tester/covoar/Target_riscv.cc b/tester/covoar/Target_riscv.cc
index 13c81c5..d0b5a8e 100644
--- a/tester/covoar/Target_riscv.cc
+++ b/tester/covoar/Target_riscv.cc
@@ -62,11 +62,11 @@ namespace Target {
   }
 
   bool Target_riscv::isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
     )
   {
-    if (!strcmp( &line[strlen(line)-3], "nop")){
+    if ( line.substr( line.length() - 3 ) == "nop" ) {
         size = 4;
         return true;
     }
diff --git a/tester/covoar/Target_riscv.h b/tester/covoar/Target_riscv.h
index 64a63d4..1442f69 100644
--- a/tester/covoar/Target_riscv.h
+++ b/tester/covoar/Target_riscv.h
@@ -67,8 +67,8 @@ namespace Target {
    *  @return Returns True if the instruction is nop, False otherwise.
    */
   bool isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
   );
 
   /*!
@@ -80,7 +80,7 @@ namespace Target {
    */
 
   bool isBranch(
-    const char* const instruction
+    const std::string& instruction
   );
 
   private:
diff --git a/tester/covoar/Target_sparc.cc b/tester/covoar/Target_sparc.cc
index fbdcd1e..a9435cb 100644
--- a/tester/covoar/Target_sparc.cc
+++ b/tester/covoar/Target_sparc.cc
@@ -56,23 +56,25 @@ namespace Target {
   }
 
   bool Target_sparc::isNopLine(
-    const char* const line,
-    int&              size
+    const std::string& line,
+    int&               size
   )
   {
-    if (!strcmp( &line[strlen(line)-3], "nop")) {
+    size_t stringLen = line.length();
+
+    if ( line.substr( stringLen - 3 ) == "nop" ) {
       size = 4;
       return true;
     }
 
-    if (!strcmp( &line[strlen(line)-7], "unknown")) {
+    if ( line.substr( stringLen - 7 ) == "unknown" ) {
       size = 4;
       return true;
     }
     #define GNU_LD_FILLS_ALIGNMENT_WITH_RTS
     #if defined(GNU_LD_FILLS_ALIGNMENT_WITH_RTS)
       // Until binutils 2.20, binutils would fill with rts not nop
-      if (!strcmp( &line[strlen(line)-3], "rts")) {
+    if ( line.substr( stringLen - 3 ) == "rts" ) {
         size = 4;
         return true;
       }
diff --git a/tester/covoar/Target_sparc.h b/tester/covoar/Target_sparc.h
index 0e38859..cbe2faf 100644
--- a/tester/covoar/Target_sparc.h
+++ b/tester/covoar/Target_sparc.h
@@ -43,8 +43,8 @@ namespace Target {
      *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
      */
     bool isNopLine(
-      const char* const line,
-      int&              size
+      const std::string& line,
+      int&               size
     );
 
     /*!
@@ -52,7 +52,7 @@ namespace Target {
      *  objdump file is a branch instruction.
      */
     bool isBranch(
-      const char* const instruction
+      const std::string& instruction
     );
 
   private:
-- 
1.8.3.1



More information about the devel mailing list