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 | 88e1e103de334d2aec9d261bc4264d3916ba410d (patch) | |
tree | 212155238e080c5a1d3d73a4b153b6b88b5061a5 | |
parent | 4306e87c6151c225340ee792365a601224bd7bcf (diff) | |
download | llvm-88e1e103de334d2aec9d261bc4264d3916ba410d.tar.gz llvm-88e1e103de334d2aec9d261bc4264d3916ba410d.tar.bz2 llvm-88e1e103de334d2aec9d261bc4264d3916ba410d.tar.xz |
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
-rw-r--r-- | lib/MC/MCObjectDisassembler.cpp | 6 | ||||
-rw-r--r-- | 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 fa4663740d..16a110f09b 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 ad2de84d56..56ab1d274e 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 # <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 |