From: Fangrui Song Date: Sat, 20 Apr 2019 02:10:48 +0000 (+0000) Subject: [llvm-objdump] Simplify --{start,stop}-address X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=10f82c578ffec9e321bb4da9e470b4543ac65a15;p=llvm [llvm-objdump] Simplify --{start,stop}-address git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358803 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index db8bfe307f8..fb12e750fc6 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/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;