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,34 +1141,24 @@
     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 ";
