Some tests objdumps have jump tables added to the end of them causing the same symbols to have different sizes when processed. This removes them and their associated errors. --- tester/covoar/ObjdumpProcessor.cc | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/tester/covoar/ObjdumpProcessor.cc b/tester/covoar/ObjdumpProcessor.cc index 262c0a5..01692b8 100644 --- a/tester/covoar/ObjdumpProcessor.cc +++ b/tester/covoar/ObjdumpProcessor.cc @@ -345,6 +345,7 @@ namespace Coverage { uint32_t endAddress; uint32_t instructionOffset; int items; + int found; objdumpLine_t lineInfo; FILE* objdumpFile; uint32_t offset; @@ -352,8 +353,13 @@ namespace Coverage { uint32_t startAddress = 0; char symbol[ MAX_LINE_LENGTH ]; char terminator1; + char terminatorOne; char terminator2; objdumpLines_t theInstructions; + char instruction[ MAX_LINE_LENGTH ]; + char ID[ MAX_LINE_LENGTH ]; + std::string call = ""; + std::string jumpTableID = ""; // Obtain the objdump file. if (!executableInformation->hasDynamicLibrary()) @@ -407,6 +413,15 @@ namespace Coverage { &offset, symbol, &terminator1 ); + // See if it is a jump table. + found = sscanf( + inputBuffer, + "%x%c\t%*[^\t]%c%s %*x %*[^+]%s", + &instructionOffset, &terminatorOne, &terminator2, instruction, ID + ); + call = instruction; + jumpTableID = ID; + // If all items found, we are at the beginning of a symbol's objdump. if ((items == 3) && (terminator1 == ':')) { @@ -437,7 +452,27 @@ namespace Coverage { theInstructions.push_back( lineInfo ); } } - + // If it looks like a jump table, finalize the symbol. + else if ( (found == 5) && (terminatorOne == ':') && (terminator2 == '\t') + && (call.find( "call" ) != std::string::npos) + && (jumpTableID.find( "+0x" ) != std::string::npos) + && processSymbol ) + { + + endAddress = executableInformation->getLoadAddress() + offset - 1; + + // If we are currently processing a symbol, finalize it. + if ( processSymbol ) { + finalizeSymbol( + executableInformation, + currentSymbol, + startAddress, + endAddress, + theInstructions + ); + } + processSymbol = false; + } else if (processSymbol) { // See if it is the dump of an instruction. -- 2.7.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel