[PATCH v2 1/2] covoar/CoverageReaderQEMU: Fix infinite loop
Alex White
alex.white at oarcorp.com
Wed Mar 24 13:45:07 UTC 2021
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
More information about the devel
mailing list