<div dir="auto">Looks similar to Cillian's failure. Chris will have to show me where libdwarf comes from. It needs to be supplied with RTEMS tools for consistency.</div><br><div class="gmail_quote"><div dir="ltr">On Sat, May 5, 2018, 11:20 AM Vijay Kumar Banerjee <<a href="mailto:vijaykumar9597@gmail.com">vijaykumar9597@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>In file included from ../rtemstoolkit/rld-dwarf.h:29:0,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/ExecutableInfo.h:14,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/DesiredSymbols.h:17,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/app_common.h:11,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/app_common.cc:40:</div><div>../rtemstoolkit/rld-dwarf-types.h:28:10: fatal error: dwarf.h: No such file or directory</div><div> #include <dwarf.h></div><div>  Â  Â  Â  Â  ^~~~~~~~~</div><div>compilation terminated.</div><div><br></div><div>In file included from ../rtemstoolkit/rld-dwarf.h:29:0,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/ExecutableInfo.h:14,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/CoverageReaderBase.h:10,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/CoverageFactory.h:12,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/CoverageFactory.cc:13:</div><div>../rtemstoolkit/rld-dwarf-types.h:28:10: fatal error: dwarf.h: No such file or directory</div><div> #include <dwarf.h></div><div>  Â  Â  Â  Â  ^~~~~~~~~</div><div>compilation terminated.</div><div><br></div><div>In file included from ../rtemstoolkit/rld-dwarf.h:29:0,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/ExecutableInfo.h:14,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/CoverageReaderBase.h:10,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/CoverageReaderBase.cc:8:</div><div>../rtemstoolkit/rld-dwarf-types.h:28:10: fatal error: dwarf.h: No such file or directory</div><div> #include <dwarf.h></div><div>  Â  Â  Â  Â  ^~~~~~~~~</div><div>compilation terminated.</div><div><br></div><div>In file included from ../rtemstoolkit/rld-dwarf.h:29:0,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/ExecutableInfo.h:14,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/DesiredSymbols.h:17,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/app_common.h:11,</div><div>  Â  Â  Â  Â  Â  Â  Â  Â from ../tester/covoar/CoverageReaderQEMU.cc:14:</div><div>../rtemstoolkit/rld-dwarf-types.h:28:10: fatal error: dwarf.h: No such file or directory</div><div> #include <dwarf.h></div><div>  Â  Â  Â  Â  ^~~~~~~~~</div><div>compilation terminated.</div><div><br></div><div>Waf: Leaving directory `/home/lunatic/development/rtems/test/rtems-tools/build'</div><div>Build failed</div><div> -> task in 'ccovoar' failed with exit status 1: </div><div><span style="white-space:pre-wrap">  </span>{task 140568634826336: cxx app_common.cc -> app_common.cc.1.o}</div><div>['/usr/bin/g++', '-std=c++11', '-O2', '-g', '-Itester/covoar', '-I../tester/covoar', '-Irtemstoolkit', '-I../rtemstoolkit', '-Irtemstoolkit/elftoolchain/libelf', '-I../rtemstoolkit/elftoolchain/libelf', '-Irtemstoolkit/elftoolchain/common', '-I../rtemstoolkit/elftoolchain/common', '-Irtemstoolkit/libiberty', '-I../rtemstoolkit/libiberty', '../tester/covoar/app_common.cc', '-c', '-o/home/lunatic/development/rtems/test/rtems-tools/build/tester/covoar/app_common.cc.1.o']</div><div> -> task in 'ccovoar' failed with exit status 1: </div><div><span style="white-space:pre-wrap">    </span>{task 140568634826416: cxx CoverageFactory.cc -> CoverageFactory.cc.1.o}</div><div>['/usr/bin/g++', '-std=c++11', '-O2', '-g', '-Itester/covoar', '-I../tester/covoar', '-Irtemstoolkit', '-I../rtemstoolkit', '-Irtemstoolkit/elftoolchain/libelf', '-I../rtemstoolkit/elftoolchain/libelf', '-Irtemstoolkit/elftoolchain/common', '-I../rtemstoolkit/elftoolchain/common', '-Irtemstoolkit/libiberty', '-I../rtemstoolkit/libiberty', '../tester/covoar/CoverageFactory.cc', '-c', '-o/home/lunatic/development/rtems/test/rtems-tools/build/tester/covoar/CoverageFactory.cc.1.o']</div><div> -> task in 'ccovoar' failed with exit status 1: </div><div><span style="white-space:pre-wrap">        </span>{task 140568634392656: cxx CoverageReaderBase.cc -> CoverageReaderBase.cc.1.o}</div><div>['/usr/bin/g++', '-std=c++11', '-O2', '-g', '-Itester/covoar', '-I../tester/covoar', '-Irtemstoolkit', '-I../rtemstoolkit', '-Irtemstoolkit/elftoolchain/libelf', '-I../rtemstoolkit/elftoolchain/libelf', '-Irtemstoolkit/elftoolchain/common', '-I../rtemstoolkit/elftoolchain/common', '-Irtemstoolkit/libiberty', '-I../rtemstoolkit/libiberty', '../tester/covoar/CoverageReaderBase.cc', '-c', '-o/home/lunatic/development/rtems/test/rtems-tools/build/tester/covoar/CoverageReaderBase.cc.1.o']</div><div> -> task in 'ccovoar' failed with exit status 1: </div><div><span style="white-space:pre-wrap">    </span>{task 140568634392736: cxx CoverageReaderQEMU.cc -> CoverageReaderQEMU.cc.1.o}</div><div>['/usr/bin/g++', '-std=c++11', '-O2', '-g', '-Itester/covoar', '-I../tester/covoar', '-Irtemstoolkit', '-I../rtemstoolkit', '-Irtemstoolkit/elftoolchain/libelf', '-I../rtemstoolkit/elftoolchain/libelf', '-Irtemstoolkit/elftoolchain/common', '-I../rtemstoolkit/elftoolchain/common', '-Irtemstoolkit/libiberty', '-I../rtemstoolkit/libiberty', '../tester/covoar/CoverageReaderQEMU.cc', '-c', '-o/home/lunatic/development/rtems/test/rtems-tools/build/tester/covoar/CoverageReaderQEMU.cc.1.o']</div><div><br></div><div class="gmail_extra"><div class="gmail_quote">On 5 May 2018 at 21:47, Joel Sherrill <span dir="ltr"><<a href="mailto:joel@rtems.org" target="_blank" rel="noreferrer">joel@rtems.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><span class="m_5140809795566825400gmail-"><div><br><br><div class="gmail_quote"><div dir="ltr">On Sat, May 5, 2018, 10:57 AM Vijay Kumar Banerjee <<a href="mailto:vijaykumar9597@gmail.com" target="_blank" rel="noreferrer">vijaykumar9597@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>I'm getting this build failure after applying this patch</div><div><br></div><div>---</div><div><div>Build failed</div><div> -> task in 'ccovoar' failed with exit status 1: </div><div><span style="white-space:pre-wrap">      </span>{task 140086064254560: cxx app_common.cc -> app_common.cc.1.o}</div><div>['/usr/bin/g++', '-std=c++11', '-O2', '-g', '-Itester/covoar', '-I../tester/covoar', '-Irtemstoolkit', '-I../rtemstoolkit', '-Irtemstoolkit/elftoolchain/libelf', '-I../rtemstoolkit/elftoolchain/libelf', '-Irtemstoolkit/elftoolchain/common', '-I../rtemstoolkit/elftoolchain/common', '-Irtemstoolkit/libiberty', '-I../rtemstoolkit/libiberty', '../tester/covoar/app_common.cc', '-c', '-o/home/lunatic/development/rtems/test/rtems-tools/build/tester/covoar/app_common.cc.1.o']</div></div></div></blockquote></div></div><div dir="auto"><br></div></span><div dir="auto">I don't see an error. Just the command. Does waf -v show more? Were there error messages after the command? </div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div><div class="m_5140809795566825400gmail-h5"><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="m_5140809795566825400gmail-m_-2056061270678651640m_6771235048182710831gmail_signature"><div dir="ltr"><div><div dir="ltr">-- vijay</div></div></div></div></div>
<br><div class="gmail_quote">On 5 May 2018 at 14:10, Chris Johns <span dir="ltr"><<a href="mailto:chrisj@rtems.org" rel="noreferrer noreferrer" target="_blank">chrisj@rtems.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">---<br>
 tester/covoar/DesiredSymbols.cc | 122 ++--------------------------------------<br>
 tester/covoar/ExecutableInfo.cc |  80 +++++++++++++++++---------<br>
 tester/covoar/ExecutableInfo.h  |  41 +++++++++++---<br>
 tester/covoar/covoar.cc  Â  Â  Â  Â |  Â 2 +-<br>
 tester/covoar/wscript  Â  Â  Â  Â  Â |  Â 2 +-<br>
 5 files changed, 94 insertions(+), 153 deletions(-)<br>
<br>
diff --git a/tester/covoar/DesiredSymbols.cc b/tester/covoar/DesiredSymbols.cc<br>
index 9957b28..79ee78d 100644<br>
--- a/tester/covoar/DesiredSymbols.cc<br>
+++ b/tester/covoar/DesiredSymbols.cc<br>
@@ -449,123 +449,13 @@ namespace Coverage {<br>
<br>
  Â )<br>
  Â {<br>
-  Â  char*  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  base;<br>
-  Â  char*  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  cStatus;<br>
-  Â  char  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â command[512];<br>
-  Â  std::string  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  fileName;<br>
-  Â  CoverageRanges::ranges_t::iterator ritr;<br>
-  Â  char  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â rpath[PATH_MAX];<br>
-  Â  FILE*  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  tmpfile;<br>
-<br>
-  Â  // Open a temporary file for the uncovered ranges.<br>
-  Â  tmpfile = fopen( "ranges1.tmp", "w" );<br>
-  Â  if ( !tmpfile ) {<br>
-  Â  Â  fprintf(<br>
-  Â  Â  Â  stderr,<br>
-  Â  Â  Â  "ERROR: DesiredSymbols::determineSourceLines - "<br>
-  Â  Â  Â  "unable to open %s\n",<br>
-  Â  Â  Â  "ranges1.tmp"<br>
-  Â  Â  );<br>
-  Â  Â  exit(-1);<br>
-  Â  }<br>
-<br>
-  Â  // Write the range addresses to the temporary file.<br>
-  Â  for (ritr =  theRanges->set.begin();<br>
-  Â  Â  Â  Â ritr != theRanges->set.end();<br>
-  Â  Â  Â  Â ritr++ ) {<br>
-  Â  Â  fprintf(<br>
-  Â  Â  Â  tmpfile,<br>
-  Â  Â  Â  "0x%08x\n0x%08x\n",<br>
-  Â  Â  Â  ritr->lowAddress - theExecutable->getLoadAddress(),<br>
-  Â  Â  Â  ritr->highAddress - theExecutable->getLoadAddress()<br>
-  Â  Â  );<br>
-  Â  }<br>
-<br>
-  Â  fclose( tmpfile );<br>
-<br>
-  Â  // Invoke addr2line to generate the source lines for each address.<br>
-  Â  if (theExecutable->hasDynamicLibrary())<br>
-  Â  Â  fileName = theExecutable->getLibraryName();<br>
-  Â  else<br>
-  Â  Â  fileName = theExecutable->getFileName();<br>
-<br>
-  Â  sprintf(<br>
-  Â  Â  command,<br>
-  Â  Â  "%s -Ce %s <%s | dos2unix >%s",<br>
-  Â  Â  TargetInfo->getAddr2line(),<br>
-  Â  Â  fileName.c_str(),<br>
-  Â  Â  "ranges1.tmp",<br>
-  Â  Â  "ranges2.tmp"<br>
-  Â  );<br>
-<br>
-  Â  if (system( command )) {<br>
-  Â  Â  fprintf(<br>
-  Â  Â  Â  stderr,<br>
-  Â  Â  Â  "ERROR: DesiredSymbols::determineSourceLines - "<br>
-  Â  Â  Â  "command (%s) failed\n",<br>
-  Â  Â  Â  command<br>
-  Â  Â  );<br>
-  Â  Â  exit( -1 );<br>
-  Â  }<br>
-<br>
-  Â  // Open the addr2line output file.<br>
-  Â  tmpfile = fopen( "ranges2.tmp", "r" );<br>
-  Â  if ( !tmpfile ) {<br>
-  Â  Â  fprintf(<br>
-  Â  Â  Â  stderr,<br>
-  Â  Â  Â  "ERROR: DesiredSymbols::determineSourceLines - "<br>
-  Â  Â  Â  "unable to open %s\n",<br>
-  Â  Â  Â  "ranges2.tmp"<br>
-  Â  Â  );<br>
-  Â  Â  exit(-1);<br>
+  Â  for (auto& r : theRanges->set) {<br>
+  Â  Â  std::string location;<br>
+  Â  Â  theExecutable->getSourceAndLine(r.lowAddress, location);<br>
+  Â  Â  r.lowSourceLine = rld::path::basename (location);<br>
+  Â  Â  theExecutable->getSourceAndLine(r.highAddress, location);<br>
+  Â  Â  r.highSourceLine = rld::path::basename (location);<br>
  Â  Â }<br>
-<br>
-  Â  // Process the addr2line output.<br>
-  Â  for (ritr =  theRanges->set.begin();<br>
-  Â  Â  Â  Â ritr != theRanges->set.end();<br>
-  Â  Â  Â  Â ritr++ ) {<br>
-<br>
-  Â  Â  cStatus = fgets( inputBuffer, MAX_LINE_LENGTH, tmpfile );<br>
-  Â  Â  if ( cStatus == NULL ) {<br>
-  Â  Â  Â  fprintf(<br>
-  Â  Â  Â  Â  stderr,<br>
-  Â  Â  Â  Â  "ERROR: DesiredSymbols::determineSourceLines - "<br>
-  Â  Â  Â  Â  "Out of sync in addr2line output\n"<br>
-  Â  Â  Â  );<br>
-  Â  Â  Â  exit( -1 );<br>
-  Â  Â  }<br>
-  Â  Â  inputBuffer[ strlen(inputBuffer) - 1] = '\0';<br>
-<br>
-  Â  Â  // Use only the base filename without directory path.<br>
-#ifdef _WIN32<br>
-  Â  Â  #define realpath(N,R) _fullpath((R),(N),_MAX_PATH)<br>
-#endif<br>
-  Â  Â  realpath( inputBuffer, rpath );<br>
-  Â  Â  base = basename( rpath );<br>
-<br>
-  Â  Â  ritr->lowSourceLine = std::string( base );<br>
-<br>
-  Â  Â  cStatus = fgets( inputBuffer, MAX_LINE_LENGTH, tmpfile );<br>
-  Â  Â  if ( cStatus == NULL ) {<br>
-  Â  Â  Â  fprintf(<br>
-  Â  Â  Â  Â  stderr,<br>
-  Â  Â  Â  Â  "ERROR: DesiredSymbols::determineSourceLines - "<br>
-  Â  Â  Â  Â  "Out of sync in addr2line output\n"<br>
-  Â  Â  Â  );<br>
-  Â  Â  Â  exit( -1 );<br>
-  Â  Â  }<br>
-  Â  Â  inputBuffer[ strlen(inputBuffer) - 1] = '\0';<br>
-<br>
-  Â  Â  // Use only the base filename without directory path.<br>
-  Â  Â  realpath( inputBuffer, rpath );<br>
-  Â  Â  base = basename( rpath );<br>
-<br>
-  Â  Â  ritr->highSourceLine = std::string( base );<br>
-  Â  }<br>
-<br>
-  Â  fclose( tmpfile );<br>
-  Â  unlink( "ranges1.tmp" );<br>
-  Â  unlink( "ranges2.tmp" );<br>
  Â }<br>
<br>
  Â SymbolInformation* DesiredSymbols::find(<br>
diff --git a/tester/covoar/ExecutableInfo.cc b/tester/covoar/ExecutableInfo.cc<br>
index c41d931..1755e93 100644<br>
--- a/tester/covoar/ExecutableInfo.cc<br>
+++ b/tester/covoar/ExecutableInfo.cc<br>
@@ -7,6 +7,8 @@<br>
<br>
 #include <stdio.h><br>
<br>
+#include <rld.h><br>
+<br>
 #include "ExecutableInfo.h"<br>
 #include "app_common.h"<br>
 #include "CoverageMap.h"<br>
@@ -18,24 +20,36 @@ namespace Coverage {<br>
  Â ExecutableInfo::ExecutableInfo(<br>
  Â  Â const char* const theExecutableName,<br>
  Â  Â const char* const theLibraryName<br>
-  )<br>
+  Â  ) : executable(theExecutableName),<br>
+  Â  Â  Â  loadAddress(0)<br>
  Â {<br>
-  Â  executableName = theExecutableName;<br>
-  Â  loadAddress = 0;<br>
-  Â  libraryName = "";<br>
  Â  Â if (theLibraryName)<br>
  Â  Â  Â libraryName = theLibraryName;<br>
-  Â  theSymbolTable = new SymbolTable();<br>
+  Â  try {<br>
+  Â  Â  executable.open();<br>
+  Â  Â  executable.begin();<br>
+  Â  Â  executable.load_symbols(symbols);<br>
+  Â  Â  debug.begin(executable.elf());<br>
+  Â  Â  debug.load_debug();<br>
+  Â  } catch (rld::error re) {<br>
+  Â  Â  std::cerr << "error: "<br>
+  Â  Â  Â  Â  Â  Â  Â  << re.where << ": " << re.what<br>
+  Â  Â  Â  Â  Â  Â  Â  << std::endl;<br>
+  Â  Â  exit(2);<br>
+  Â  } catch (...) {<br>
+  Â  Â  exit(2);<br>
+  Â  }<br>
  Â }<br>
<br>
  Â ExecutableInfo::~ExecutableInfo()<br>
  Â {<br>
-  Â  if (theSymbolTable)<br>
-  Â  Â  delete theSymbolTable;<br>
+  Â  debug.end();<br>
+  Â  executable.end();<br>
+  Â  executable.close();<br>
  Â }<br>
<br>
  Â void ExecutableInfo::dumpCoverageMaps( void ) {<br>
-  Â  ExecutableInfo::coverageMaps_t::iterator  itr;<br>
+  Â  ExecutableInfo::CoverageMaps::iterator  itr;<br>
<br>
  Â  Â for (itr = coverageMaps.begin(); itr != coverageMaps.end(); itr++) {<br>
  Â  Â  Â fprintf( stderr, "Coverage Map for %s\n", ((*itr).first).c_str() );;<br>
@@ -44,21 +58,22 @@ namespace Coverage {<br>
  Â }<br>
<br>
  Â void ExecutableInfo::dumpExecutableInfo( void ){<br>
-  Â  fprintf( stdout, "\n== Executable info ==\n");<br>
-  Â  fprintf( stdout, "executableName = %s\n", executableName.c_str());<br>
-  Â  fprintf( stdout, "libraryName = %s\n", libraryName.c_str());<br>
-  Â  fprintf( stdout, "loadAddress = %u\n", loadAddress);<br>
-  Â  theSymbolTable->dumpSymbolTable();<br>
+  Â  std::cout << std::endl<br>
+  Â  Â  Â  Â  Â  Â  << "== Executable info ==" << std::endl<br>
+  Â  Â  Â  Â  Â  Â  << "executable = " << getFileName () << std::endl<br>
+  Â  Â  Â  Â  Â  Â  << "library = " << libraryName << std::endl<br>
+  Â  Â  Â  Â  Â  Â  << "loadAddress = " << loadAddress << std::endl;<br>
+  Â  theSymbolTable.dumpSymbolTable();<br>
  Â }<br>
<br>
  Â CoverageMapBase* ExecutableInfo::getCoverageMap ( uint32_t address )<br>
  Â {<br>
-  Â  CoverageMapBase*  Â  Â  Â  Â aCoverageMap = NULL;<br>
-  Â  coverageMaps_t::iterator it;<br>
-  Â  std::string  Â  Â  Â  Â  Â  Â  itsSymbol;<br>
+  Â  CoverageMapBase*  Â  Â  Â aCoverageMap = NULL;<br>
+  Â  CoverageMaps::iterator it;<br>
+  Â  std::string  Â  Â  Â  Â  Â  itsSymbol;<br>
<br>
  Â  Â // Obtain the coverage map containing the specified address.<br>
-  Â  itsSymbol = theSymbolTable->getSymbol( address );<br>
+  Â  itsSymbol = theSymbolTable.getSymbol( address );<br>
  Â  Â if (itsSymbol != "") {<br>
  Â  Â  Â it = coverageMaps.find( itsSymbol );<br>
  Â  Â  Â aCoverageMap = (*it).second;<br>
@@ -67,12 +82,12 @@ namespace Coverage {<br>
  Â  Â return aCoverageMap;<br>
  Â }<br>
<br>
-  const std::string& ExecutableInfo::getFileName ( void ) const<br>
+  const std::string ExecutableInfo::getFileName ( void ) const<br>
  Â {<br>
-  Â  return executableName;<br>
+  Â  return <a href="http://executable.name" rel="noreferrer noreferrer noreferrer" target="_blank">executable.name</a>().full();<br>
  Â }<br>
<br>
-  const std::string& ExecutableInfo::getLibraryName( void ) const<br>
+  const std::string ExecutableInfo::getLibraryName( void ) const<br>
  Â {<br>
  Â  Â return libraryName;<br>
  Â }<br>
@@ -83,9 +98,9 @@ namespace Coverage {<br>
  Â }<br>
<br>
<br>
-  SymbolTable* ExecutableInfo::getSymbolTable ( void ) const<br>
+  SymbolTable* ExecutableInfo::getSymbolTable ( void )<br>
  Â {<br>
-  Â  return theSymbolTable;<br>
+  Â  return &theSymbolTable;<br>
  Â }<br>
<br>
  Â CoverageMapBase* ExecutableInfo::createCoverageMap (<br>
@@ -95,8 +110,8 @@ namespace Coverage {<br>
  Â  Â uint32_t  Â  Â  Â  Â  Â highAddress<br>
  Â )<br>
  Â {<br>
-  Â  CoverageMapBase  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  *theMap;<br>
-  Â  ExecutableInfo::coverageMaps_t::iterator  itr;<br>
+  Â  CoverageMapBase  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  *theMap;<br>
+  Â  ExecutableInfo::CoverageMaps::iterator  itr;<br>
<br>
  Â  Â itr = coverageMaps.find( symbolName );<br>
  Â  Â if ( itr == coverageMaps.end() ) {<br>
@@ -109,13 +124,26 @@ namespace Coverage {<br>
  Â  Â return theMap;<br>
  Â }<br>
<br>
+  void ExecutableInfo::getSourceAndLine(<br>
+  Â  const unsigned int address,<br>
+  Â  std::string&  Â  Â  Â line<br>
+  )<br>
+  {<br>
+  Â  std::string file;<br>
+  Â  int  Â  Â  Â  Â lno;<br>
+  Â  debug.get_source (address, file, lno);<br>
+  Â  std::ostringstream ss;<br>
+  Â  ss << file << ':' << lno;<br>
+  Â  line = ss.str ();<br>
+  }<br>
+<br>
  Â bool ExecutableInfo::hasDynamicLibrary( void )<br>
  Â {<br>
-  Â  Â return (libraryName != "");<br>
+  Â  return !libraryName.empty();<br>
  Â }<br>
<br>
  Â void ExecutableInfo::mergeCoverage( void ) {<br>
-  Â  ExecutableInfo::coverageMaps_t::iterator  itr;<br>
+  Â  ExecutableInfo::CoverageMaps::iterator  itr;<br>
<br>
  Â  Â for (itr = coverageMaps.begin(); itr != coverageMaps.end(); itr++) {<br>
  Â  Â  Â SymbolsToAnalyze->mergeCoverageMap( (*itr).first, (*itr).second );<br>
diff --git a/tester/covoar/ExecutableInfo.h b/tester/covoar/ExecutableInfo.h<br>
index 20ea9bf..9106db3 100644<br>
--- a/tester/covoar/ExecutableInfo.h<br>
+++ b/tester/covoar/ExecutableInfo.h<br>
@@ -11,6 +11,10 @@<br>
 #include <stdint.h><br>
 #include <string><br>
<br>
+#include <rld-dwarf.h><br>
+#include <rld-files.h><br>
+#include <rld-symbols.h><br>
+<br>
 #include "CoverageMapBase.h"<br>
 #include "SymbolTable.h"<br>
<br>
@@ -67,14 +71,14 @@ namespace Coverage {<br>
  Â  Â  *<br>
  Â  Â  *  @return Returns the executable's file name<br>
  Â  Â  */<br>
-  Â  const std::string& getFileName( void ) const;<br>
+  Â  const std::string getFileName( void ) const;<br>
<br>
  Â  Â /*!<br>
  Â  Â  *  This method returns the library name associated with the executable.<br>
  Â  Â  *<br>
  Â  Â  *  @return Returns the executable's library name<br>
  Â  Â  */<br>
-  Â  const std::string& getLibraryName( void ) const;<br>
+  Â  const std::string getLibraryName( void ) const;<br>
<br>
  Â  Â /*!<br>
  Â  Â  *  This method returns the load address of the dynamic library<br>
@@ -88,7 +92,7 @@ namespace Coverage {<br>
  Â  Â  *<br>
  Â  Â  *  @return Returns a pointer to the symbol table.<br>
  Â  Â  */<br>
-  Â  SymbolTable* getSymbolTable( void ) const;<br>
+  Â  SymbolTable* getSymbolTable( void );<br>
<br>
  Â  Â /*!<br>
  Â  Â  *  This method creates a coverage map for the specified symbol.<br>
@@ -107,6 +111,15 @@ namespace Coverage {<br>
  Â  Â  Â uint32_t  Â  Â  Â  Â  Â highAddress<br>
  Â  Â );<br>
<br>
+  Â  /*!<br>
+  Â  Â *  This method gets the source location, the file and line number given an<br>
+  Â  Â *  address.<br>
+  Â  Â */<br>
+  Â  void getSourceAndLine(<br>
+  Â  Â  const unsigned int address,<br>
+  Â  Â  std::string&  Â  Â  Â location<br>
+  Â  );<br>
+<br>
  Â  Â /*!<br>
  Â  Â  *  This method indicates whether a dynamic library has been<br>
  Â  Â  *  associated with the executable.<br>
@@ -132,15 +145,25 @@ namespace Coverage {<br>
  Â private:<br>
<br>
  Â  Â /*!<br>
-  Â  Â *  This map associates a symbol with its coverage map.<br>
+  Â  Â *  The ELF executable.<br>
  Â  Â  */<br>
-  Â  typedef std::map<std::string, CoverageMapBase *> coverageMaps_t;<br>
-  Â  coverageMaps_t coverageMaps;<br>
+  Â  rld::files::object executable;<br>
<br>
  Â  Â /*!<br>
-  Â  Â *  This member variable contains the name of the executable.<br>
+  Â  Â *  The DWARF data to the ELF executable.<br>
+  Â  Â */<br>
+  Â  rld::dwarf::file debug;<br>
+<br>
+  Â  /*!<br>
+  Â  Â *  The executable's symbol table.<br>
+  Â  Â */<br>
+  Â  rld::symbols::table symbols;<br>
+<br>
+  Â  /*!<br>
+  Â  Â *  This map associates a symbol with its coverage map.<br>
  Â  Â  */<br>
-  Â  std::string executableName;<br>
+  Â  typedef std::map<std::string, CoverageMapBase *> CoverageMaps;<br>
+  Â  CoverageMaps coverageMaps;<br>
<br>
  Â  Â /*!<br>
  Â  Â  *  This member variable contains the name of a dynamic library<br>
@@ -158,7 +181,7 @@ namespace Coverage {<br>
  Â  Â  *  This member variable contains a pointer to the symbol table<br>
  Â  Â  *  of the executable or library.<br>
  Â  Â  */<br>
-  Â  SymbolTable* theSymbolTable;<br>
+  Â  SymbolTable theSymbolTable;<br>
<br>
  Â };<br>
 }<br>
diff --git a/tester/covoar/covoar.cc b/tester/covoar/covoar.cc<br>
index 5c87402..09c86c2 100644<br>
--- a/tester/covoar/covoar.cc<br>
+++ b/tester/covoar/covoar.cc<br>
@@ -186,7 +186,7 @@ int main(<br>
  Â Coverage::ExecutableInfo*  Â  Â executableInfo = NULL;<br>
  Â std::string  Â  Â  Â  Â  Â  Â  Â  Â  Â executableExtension = "exe";<br>
  Â std::string  Â  Â  Â  Â  Â  Â  Â  Â  Â coverageExtension = "cov";<br>
-  Coverage::CoverageFormats_t  Â coverageFormat;<br>
+  Coverage::CoverageFormats_t  Â coverageFormat = Coverage::COVERAGE_FORMAT_QEMU;<br>
  Â Coverage::CoverageReaderBase* coverageReader = NULL;<br>
  Â char*  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â executable = NULL;<br>
  Â const char*  Â  Â  Â  Â  Â  Â  Â  Â  Â explanations = NULL;<br>
diff --git a/tester/covoar/wscript b/tester/covoar/wscript<br>
index c0270d8..55d5ec9 100644<br>
--- a/tester/covoar/wscript<br>
+++ b/tester/covoar/wscript<br>
@@ -70,7 +70,7 @@ def build(bld):<br>
  Â  Â #<br>
  Â  Â # The list of modules.<br>
  Â  Â #<br>
-  Â  modules = ['rld', 'elf', 'iberty']<br>
+  Â  modules = ['rld', 'dwarf', 'elf', 'iberty']<br>
<br>
  Â  Â bld.stlib(target = 'ccovoar',<br>
  Â  Â  Â  Â  Â  Â  Â source = ['app_common.cc',<br>
<span class="m_5140809795566825400gmail-m_-2056061270678651640m_6771235048182710831HOEnZb"><font color="#888888">-- <br>
2.15.1<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" rel="noreferrer noreferrer" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer noreferrer noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</font></span></blockquote></div><br></div>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" rel="noreferrer noreferrer" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer noreferrer noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a></blockquote></div></div></div></div></div>
</blockquote></div><br></div></div>
</blockquote></div>