There was a potential that the branch info loop never terminated. This has been fixed by adding a more reliable termination condition and logging an error if it cannot find the branch target. --- tester/covoar/CoverageReaderQEMU.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/tester/covoar/CoverageReaderQEMU.cc b/tester/covoar/CoverageReaderQEMU.cc index 7c344e4..d3c6abe 100644 --- a/tester/covoar/CoverageReaderQEMU.cc +++ b/tester/covoar/CoverageReaderQEMU.cc @@ -118,8 +118,15 @@ namespace Coverage { // Determine if additional branch information is available. if ( (entry->op & branchInfo) != 0 ) { uint32_t a = entry->pc + entry->size - 1; - while (!aCoverageMap->isStartOfInstruction(a)) + while (a > entry->pc && !aCoverageMap->isStartOfInstruction(a)) a--; + if (a == entry->pc && !aCoverageMap->isStartOfInstruction(a)) { + // Something went wrong parsing the objdump. + std::ostringstream what; + what << "Reached beginning of range in " << file + << " at " << entry->pc << " with no start of instruction."; + throw rld::error( what, "CoverageReaderQEMU::processFile" ); + } if (entry->op & taken) { aCoverageMap->setWasTaken( a ); } else if (entry->op & notTaken) { -- 2.27.0 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel