[PATCH] D32466: [llvm-objdump] Don't attempt to print lines beyond the end of file

Petr Hosek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 25 10:34:25 PDT 2017


phosek updated this revision to Diff 96600.

Repository:
  rL LLVM

https://reviews.llvm.org/D32466

Files:
  test/tools/llvm-objdump/X86/Inputs/debug-info-fileinfo.exe.elf-x86_64
  test/tools/llvm-objdump/X86/debug-info-fileinfo.test
  tools/llvm-objdump/llvm-objdump.cpp


Index: tools/llvm-objdump/llvm-objdump.cpp
===================================================================
--- tools/llvm-objdump/llvm-objdump.cpp
+++ tools/llvm-objdump/llvm-objdump.cpp
@@ -485,10 +485,13 @@
     auto FileBuffer = SourceCache.find(LineInfo.FileName);
     if (FileBuffer != SourceCache.end()) {
       auto LineBuffer = LineCache.find(LineInfo.FileName);
-      if (LineBuffer != LineCache.end())
+      if (LineBuffer != LineCache.end()) {
+        if (LineInfo.Line > LineBuffer->second.size())
+          return;
         // Vector begins at 0, line numbers are non-zero
         OS << Delimiter << LineBuffer->second[LineInfo.Line - 1].ltrim()
            << "\n";
+      }
     }
   }
   OldLineInfo = LineInfo;
Index: test/tools/llvm-objdump/X86/debug-info-fileinfo.test
===================================================================
--- /dev/null
+++ test/tools/llvm-objdump/X86/debug-info-fileinfo.test
@@ -0,0 +1,27 @@
+# Check that debug info line number pointing beyond the end of the file
+# doesn't cause a segmentation fault in llvm-objdump.
+
+# To rebuild the input: clang -g debug-info-fileinfo.S -o debug-info-fileinfo.exe -nostdlib
+
+# RUN: llvm-objdump -S %p/Inputs/debug-info-fileinfo.exe.elf-x86_64 | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK: _start
+# CHECK-NEXT:   400078:       c3      retq
+# CHECK: foo
+# CHECK-NEXT:   400079:       90      nop
+# CHECK-NEXT:   40007a:       90      nop
+# CHECK-NEXT:   40007b:       c3      retq 
+
+.text
+
+.global _start; .type _start, STT_FUNC; _start:
+    ret
+
+.global foo; .type foo, STT_FUNC; foo:
+    # foo
+    # bar
+    # baz
+    nop
+    nop
+    ret


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32466.96600.patch
Type: text/x-patch
Size: 1683 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170425/1dcf9295/attachment.bin>


More information about the llvm-commits mailing list