[llvm-objdump] Simplify --{start,stop}-address

llvm-svn: 358803
This commit is contained in:
Fangrui Song 2019-04-20 02:10:48 +00:00
parent 4d2b9426b9
commit 8f28f7a488
1 changed files with 14 additions and 24 deletions

View File

@ -1141,34 +1141,24 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
std::vector<RelocationRef>::const_iterator RelEnd = Rels.end();
// Disassemble symbol by symbol.
for (unsigned SI = 0, SE = Symbols.size(); SI != SE; ++SI) {
uint64_t Start = std::get<0>(Symbols[SI]) - SectionAddr;
// The end is either the section end or the beginning of the next
// symbol.
uint64_t End = (SI == SE - 1)
? SectSize
: std::get<0>(Symbols[SI + 1]) - SectionAddr;
// Don't try to disassemble beyond the end of section contents.
if (End > SectSize)
End = SectSize;
// If this symbol has the same address as the next symbol, then skip it.
if (Start >= End)
continue;
// Check if we need to skip symbol
// Skip if the symbol's data is not between StartAddress and StopAddress
if (End + SectionAddr <= StartAddress ||
Start + SectionAddr >= StopAddress)
continue;
// Stop disassembly at the stop address specified
if (End + SectionAddr > StopAddress)
End = StopAddress - SectionAddr;
/// Skip if user requested specific symbols and this is not in the list
// Skip if --disassemble-functions is not empty and the symbol is not in
// the list.
if (!DisasmFuncsSet.empty() &&
!DisasmFuncsSet.count(std::get<1>(Symbols[SI])))
continue;
uint64_t Start = std::get<0>(Symbols[SI]);
// The end is the section end, the beginning of the next symbol, or
// --stop-address.
uint64_t End = std::min<uint64_t>(SectionAddr + SectSize, StopAddress);
if (SI + 1 < SE)
End = std::min(End, std::get<0>(Symbols[SI + 1]));
if (Start >= End || Start >= StopAddress || End <= StartAddress)
continue;
Start -= SectionAddr;
End -= SectionAddr;
if (!PrintedSection) {
PrintedSection = true;
outs() << "Disassembly of section ";