OSDN Git Service

Create an atom with just the data that failed to disassemble.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 16 Oct 2013 19:03:14 +0000 (19:03 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 16 Oct 2013 19:03:14 +0000 (19:03 +0000)
Patch by Stephen Checkoway.

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

lib/MC/MCObjectDisassembler.cpp
test/Object/X86/objdump-cfg-invalid-opcode.yaml

index fa46637..16a110f 100644 (file)
@@ -135,11 +135,13 @@ void MCObjectDisassembler::buildSectionAtoms(MCModule *Module) {
           Text->addInst(Inst, InstSize);
           InvalidData = 0;
         } else {
+          assert(InstSize && "getInstruction() consumed no bytes");
           if (!InvalidData) {
             Text = 0;
-            InvalidData = Module->createDataAtom(CurAddr, EndAddr);
+            InvalidData = Module->createDataAtom(CurAddr, CurAddr+InstSize - 1);
           }
-          InvalidData->addData(Contents[Index]);
+          for (uint64_t I = 0; I < InstSize; ++I)
+            InvalidData->addData(Contents[Index+I]);
         }
       }
     } else {
index ad2de84..56ab1d2 100644 (file)
@@ -6,6 +6,7 @@
 # .LBL0_1:
 #      movq    8(%rsi), %rax
 #      <invalid opcode: 06>
+#      nop
 
 !ELF
 FileHeader:
@@ -17,7 +18,7 @@ Sections:
   - Name: .text
     Type: SHT_PROGBITS
     Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-    Content: "488B460806"
+    Content: "488B46080690"
 
 ## 0000000000000000 <main>:
 
@@ -39,10 +40,19 @@ Sections:
 ##    4:   06                      (bad)
 #CFG:     Content:         06
 
+#CFG:   - StartAddress:    0x0000000000000005
+#CFG:     Size:            1
+#CFG:     Type:            Text
+
+##    5:   90                      nop
+#CFG:       - Inst:            NOOP
+#CFG:         Size:            1
+#CFG:         Ops:             [  ]
+
 Symbols:
   Global:
     - Name: main
       Type: STT_FUNC
       Section: .text
       Value: 0x0
-      Size: 5
+      Size: 6