[PATCH] covoar: Add option to create named objdumps

Alex White alex.white at oarcorp.com
Mon Mar 29 20:27:24 UTC 2021


ping

> -----Original Message-----
> From: Alex White <alex.white at oarcorp.com>
> Sent: Friday, March 12, 2021 11:07 AM
> To: devel at rtems.org
> Cc: Alex White <alex.white at oarcorp.com>
> Subject: [PATCH] covoar: Add option to create named objdumps
> 
> This adds a new behavior to the -d option which allows the creation of
> named objdump outputs in the /tmp directory. This allows the outputs to be
> reused on subsequent runs of covoar rather than running objdump again.
> ---
>  tester/covoar/ObjdumpProcessor.cc | 22 +++++++++++++---------
> tester/covoar/ObjdumpProcessor.h  |  6 ++++--
>  tester/covoar/app_common.cc       | 10 ++++++++++
>  tester/covoar/app_common.h        |  1 +
>  tester/covoar/covoar.cc           | 23 +++++++++++++++++++----
>  5 files changed, 47 insertions(+), 15 deletions(-)
> 
> diff --git a/tester/covoar/ObjdumpProcessor.cc
> b/tester/covoar/ObjdumpProcessor.cc
> index 9ef2390..fb23ca6 100644
> --- a/tester/covoar/ObjdumpProcessor.cc
> +++ b/tester/covoar/ObjdumpProcessor.cc
> @@ -236,7 +236,8 @@ namespace Coverage {
>    void ObjdumpProcessor::getFile(
>      std::string fileName,
>      rld::process::tempfile& objdumpFile,
> -    rld::process::tempfile& err
> +    rld::process::tempfile& err,
> +    bool debug
>      )
>    {
>      rld::process::status        status;
> @@ -245,11 +246,13 @@ namespace Coverage {
>                                           fileName };
>      try
>      {
> -      status = rld::process::execute( TargetInfo->getObjdump(),
> -                                      args, objdumpFile.name(), err.name() );
> -      if ( (status.type != rld::process::status::normal)
> -           || (status.code != 0) ) {
> -        throw rld::error( "Objdump error", "generating objdump" );
> +      if (!debug || FileIsNewer( fileName.c_str(), objdumpFile.name().c_str()
> )) {
> +        status = rld::process::execute( TargetInfo->getObjdump(),
> +                                        args, objdumpFile.name(), err.name() );
> +        if ( (status.type != rld::process::status::normal)
> +             || (status.code != 0) ) {
> +          throw rld::error( "Objdump error", "generating objdump" );
> +        }
>        }
>      } catch( rld::error& err )
>        {
> @@ -325,7 +328,8 @@ namespace Coverage {
>    void ObjdumpProcessor::load(
>      ExecutableInfo* const    executableInformation,
>      rld::process::tempfile&  objdumpFile,
> -    rld::process::tempfile&  err
> +    rld::process::tempfile&  err,
> +    bool                     debug
>    )
>    {
>      std::string     currentSymbol = "";
> @@ -348,9 +352,9 @@ namespace Coverage {
> 
>      // Obtain the objdump file.
>      if ( !executableInformation->hasDynamicLibrary() )
> -      getFile( executableInformation->getFileName(), objdumpFile, err );
> +      getFile( executableInformation->getFileName(), objdumpFile, err,
> + debug );
>      else
> -      getFile( executableInformation->getLibraryName(), objdumpFile, err );
> +      getFile( executableInformation->getLibraryName(), objdumpFile,
> + err, debug );
> 
>      while ( true ) {
>        // Get the line.
> diff --git a/tester/covoar/ObjdumpProcessor.h
> b/tester/covoar/ObjdumpProcessor.h
> index c75755d..4dab001 100644
> --- a/tester/covoar/ObjdumpProcessor.h
> +++ b/tester/covoar/ObjdumpProcessor.h
> @@ -103,7 +103,8 @@ namespace Coverage {
>       */
>      void getFile( std::string fileName,
>                    rld::process::tempfile& dmp,
> -                  rld::process::tempfile& err );
> +                  rld::process::tempfile& err,
> +                  bool debug = false );
> 
>      /*!
>       *  This method fills the objdumpList list with all the @@ -122,7 +123,8 @@
> namespace Coverage {
>      void load(
>        ExecutableInfo* const executableInformation,
>        rld::process::tempfile& dmp,
> -      rld::process::tempfile& err
> +      rld::process::tempfile& err,
> +      bool debug
>      );
> 
>      /*!
> diff --git a/tester/covoar/app_common.cc b/tester/covoar/app_common.cc
> index 8b490ed..0f3c8e2 100644
> --- a/tester/covoar/app_common.cc
> +++ b/tester/covoar/app_common.cc
> @@ -116,3 +116,13 @@ bool ReadUntilFound( FILE *file, const char *line )
>    } while (1);
>  }
> 
> +std::string GetFileNameFromPath( const std::string& path ) {
> +  size_t idx = path.rfind('/', path.length());
> +  if (idx == std::string::npos) {
> +    return "";
> +  }
> +
> +  return path.substr(idx + 1, path.length() - idx); }
> +
> diff --git a/tester/covoar/app_common.h b/tester/covoar/app_common.h
> index ac32bbd..21e8cfa 100644
> --- a/tester/covoar/app_common.h
> +++ b/tester/covoar/app_common.h
> @@ -30,5 +30,6 @@ extern char
> inputBuffer2[MAX_LINE_LENGTH];
>  bool FileIsNewer( const char *f1, const char *f2 );  bool FileIsReadable( const
> char *f1 );  bool ReadUntilFound( FILE *file, const char *line );
> +std::string GetFileNameFromPath( const std::string& path );
> 
>  #endif
> diff --git a/tester/covoar/covoar.cc b/tester/covoar/covoar.cc index
> bf95cb4..6b2082d 100644
> --- a/tester/covoar/covoar.cc
> +++ b/tester/covoar/covoar.cc
> @@ -373,8 +373,25 @@ int covoar(
>        exe->setLoadAddress( objdumpProcessor->determineLoadAddress( exe
> ) );
>      }
> 
> -    // Load the objdump for the symbols in this executable.
> -    objdumpProcessor->load( exe, objdumpFile, err );
> +    if (debug) {
> +      std::string name;
> +
> +      if ( !exe->hasDynamicLibrary() ) {
> +        name = exe->getFileName();
> +      } else {
> +        name = exe->getLibraryName();
> +      }
> +
> +      name = GetFileNameFromPath( name );
> +      name = buildTarget + "-" + name;
> +      name.insert( 0, "/tmp/" );
> +
> +      rld::process::tempfile namedObjdumpFile( name, ".dmp", true );
> +      objdumpProcessor->load( exe, namedObjdumpFile, err, debug );
> +    } else {
> +      // Load the objdump for the symbols in this executable.
> +      objdumpProcessor->load( exe, objdumpFile, err, debug );
> +    }
>    }
> 
>    //
> @@ -486,8 +503,6 @@ int covoar(
> 
>    //Leave tempfiles around if debug flag (-d) is enabled.
>    if ( debug ) {
> -    objdumpFile.override( "objdump_file" );
> -    objdumpFile.keep();
>      err.override( "objdump_exec_log" );
>      err.keep();
>      syms.override( "symbols_list" );
> --
> 2.27.0



More information about the devel mailing list