[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