From 8f28f7a488158730410662be906c77216ab8e6cc Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 20 Apr 2019 02:10:48 +0000 Subject: [PATCH] [llvm-objdump] Simplify --{start,stop}-address llvm-svn: 358803 --- llvm/tools/llvm-objdump/llvm-objdump.cpp | 36 ++++++++++++-------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index db8bfe3..fb12e75 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1141,33 +1141,23 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj, std::vector::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) + // 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; - // Stop disassembly at the stop address specified - if (End + SectionAddr > StopAddress) - End = StopAddress - SectionAddr; + uint64_t Start = std::get<0>(Symbols[SI]); - /// Skip if user requested specific symbols and this is not in the list - if (!DisasmFuncsSet.empty() && - !DisasmFuncsSet.count(std::get<1>(Symbols[SI]))) + // The end is the section end, the beginning of the next symbol, or + // --stop-address. + uint64_t End = std::min(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; -- 2.7.4