ping > -----Original Message----- > From: Alex White <alex.wh...@oarcorp.com> > Sent: Friday, March 12, 2021 11:07 AM > To: devel@rtems.org > Cc: Alex White <alex.wh...@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
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel