diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-10-16 19:03:14 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-10-16 19:03:14 +0000 |
commit | 6174e5ee681991af5a7dc907c3e68fbe12968251 (patch) | |
tree | db6cde3e9165f0d55d9f6bf722ee7f6ecceb7141 | |
parent | 33304e30876e2c5ce12a579746d181e6d7599b8f (diff) | |
download | bcm5719-llvm-6174e5ee681991af5a7dc907c3e68fbe12968251.tar.gz bcm5719-llvm-6174e5ee681991af5a7dc907c3e68fbe12968251.zip |
Create an atom with just the data that failed to disassemble.
Patch by Stephen Checkoway.
llvm-svn: 192827
-rw-r--r-- | llvm/lib/MC/MCObjectDisassembler.cpp | 6 | ||||
-rw-r--r-- | llvm/test/Object/X86/objdump-cfg-invalid-opcode.yaml | 14 |
2 files changed, 16 insertions, 4 deletions
diff --git a/llvm/lib/MC/MCObjectDisassembler.cpp b/llvm/lib/MC/MCObjectDisassembler.cpp index fa4663740d3..16a110f09bf 100644 --- a/llvm/lib/MC/MCObjectDisassembler.cpp +++ b/llvm/lib/MC/MCObjectDisassembler.cpp @@ -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 { diff --git a/llvm/test/Object/X86/objdump-cfg-invalid-opcode.yaml b/llvm/test/Object/X86/objdump-cfg-invalid-opcode.yaml index ad2de84d56a..56ab1d274ee 100644 --- a/llvm/test/Object/X86/objdump-cfg-invalid-opcode.yaml +++ b/llvm/test/Object/X86/objdump-cfg-invalid-opcode.yaml @@ -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 |