From 88e1e103de334d2aec9d261bc4264d3916ba410d Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 16 Oct 2013 19:03:14 +0000 Subject: [PATCH] Create an atom with just the data that failed to disassemble. 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 | 6 ++++-- test/Object/X86/objdump-cfg-invalid-opcode.yaml | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/MC/MCObjectDisassembler.cpp b/lib/MC/MCObjectDisassembler.cpp index fa4663740d3..16a110f09bf 100644 --- a/lib/MC/MCObjectDisassembler.cpp +++ b/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/test/Object/X86/objdump-cfg-invalid-opcode.yaml b/test/Object/X86/objdump-cfg-invalid-opcode.yaml index ad2de84d56a..56ab1d274ee 100644 --- a/test/Object/X86/objdump-cfg-invalid-opcode.yaml +++ b/test/Object/X86/objdump-cfg-invalid-opcode.yaml @@ -6,6 +6,7 @@ # .LBL0_1: # movq 8(%rsi), %rax # +# nop !ELF FileHeader: @@ -17,7 +18,7 @@ Sections: - Name: .text Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR ] - Content: "488B460806" + Content: "488B46080690" ## 0000000000000000
: @@ -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