[PATCH] D73531: [llvm-objdump] avoid crash disassembling unknown instruction

Sjoerd Meijer via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 31 02:07:16 PST 2020


SjoerdMeijer updated this revision to Diff 241660.
SjoerdMeijer added a comment.

Added some extra comments to the test file.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73531/new/

https://reviews.llvm.org/D73531

Files:
  llvm/test/tools/llvm-objdump/ARM/unknown-instr.test
  llvm/tools/llvm-objdump/llvm-objdump.cpp


Index: llvm/tools/llvm-objdump/llvm-objdump.cpp
===================================================================
--- llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -1431,6 +1431,14 @@
         outs() << CommentStream.str();
         Comments.clear();
 
+        // If disassembly has failed, continue with the next instruction, to
+        // avoid analysing invalid/incomplete instruction information.
+        if (!Disassembled) {
+          outs() << "\n";
+          Index += Size;
+          continue;
+        }
+
         // Try to resolve the target of a call, tail call, etc. to a specific
         // symbol.
         if (MIA && (MIA->isCall(Inst) || MIA->isUnconditionalBranch(Inst) ||
Index: llvm/test/tools/llvm-objdump/ARM/unknown-instr.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objdump/ARM/unknown-instr.test
@@ -0,0 +1,29 @@
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objdump -D -triple=thumbv8.1m.main-none-eabi %t | FileCheck %s
+
+# This is a test case with "random" data/instructions, checking that llvm-objdump
+# doesn't crash. Disassembly of instructions can fail when it e.g. is not given
+# the right set of architecture features, for example when the source is compiled
+# with:
+#
+#   clang -march=..+ext1+ext2
+#
+# and disassembly is attempted with:
+#
+#   llvm-objdump -mattr=+ext1
+
+
+# CHECK:        00000000 .text:
+# CHECK-NEXT:       0: cb              <unknown>
+# CHECK-NEXT:       1: f3 f7 8b be     b.w #-49898
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_ARM
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Content: "cbf3f78bbe"


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73531.241660.patch
Type: text/x-patch
Size: 1759 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200131/93aea672/attachment.bin>


More information about the llvm-commits mailing list