diff options
author | Johnny Chen <johnny.chen@apple.com> | 2010-04-14 22:37:17 +0000 |
---|---|---|
committer | Johnny Chen <johnny.chen@apple.com> | 2010-04-14 22:37:17 +0000 |
commit | d1ec11a850843bd7afff1c939b29c9d18527e966 (patch) | |
tree | 0ab58a1a695936fd17171b11e8234cb3acdb4a49 /lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp | |
parent | e7b52526d386cd0d3a08b8daa7db67839649bb37 (diff) |
Fixed another assert exposed by fuzzing. Now, the DisassembleVFPLdStMulFrm()
function checks whether we have a valid submode for VLDM/VSTM (must be either
"ia" or "db") before calling ARM_AM::getAM5Opc(AMSubMode, unsigned char).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101306 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp')
-rw-r--r-- | lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp b/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp index eb9c2cd7a2..0f3a67db8f 100644 --- a/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp +++ b/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp @@ -1909,6 +1909,12 @@ static bool DisassembleVFPLdStMulFrm(MCInst &MI, unsigned Opcode, uint32_t insn, // Next comes the AM5 Opcode. ARM_AM::AMSubMode SubMode = getAMSubModeForBits(getPUBits(insn)); + // Must be either "ia" or "db" submode. + if (SubMode != ARM_AM::ia && SubMode != ARM_AM::db) { + errs() << "Illegal addressing mode 5 sub-mode!\n"; + return false; + } + unsigned char Imm8 = insn & 0xFF; MI.addOperand(MCOperand::CreateImm(ARM_AM::getAM5Opc(SubMode, Imm8))); |