llvm-objdump: Fix dumping of multiple symbols with the same address.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Thu, 13 Oct 2011 20:37:08 +0000 (20:37 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Thu, 13 Oct 2011 20:37:08 +0000 (20:37 +0000)
This happens in COFF because there is a symbol for the beginning of each
section.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141885 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-objdump/llvm-objdump.cpp

index 66669cfe5d70109b00077ee56177de32562891bd..45642f955fa8b17037b4d7688f4219307213539b 100644 (file)
@@ -234,7 +234,18 @@ static void DisassembleObject(const ObjectFile *Obj) {
     // Disassemble symbol by symbol.
     for (unsigned si = 0, se = Symbols.size(); si != se; ++si) {
       uint64_t Start = Symbols[si].first;
-      uint64_t End = si == se-1 ? SectSize : Symbols[si + 1].first - 1;
+      uint64_t End;
+      // The end is either the size of the section or the beginning of the next
+      // symbol.
+      if (si == se - 1)
+        End = SectSize;
+      // Make sure this symbol takes up space.
+      else if (Symbols[si + 1].first != Start)
+        End = Symbols[si + 1].first - 1;
+      else
+        // This symbol has the same address as the next symbol. Skip it.
+        continue;
+
       outs() << '\n' << Symbols[si].second << ":\n";
 
 #ifndef NDEBUG