Fixed another assert exposed by fuzzing. Now, the DisassembleVFPLdStMulFrm()
authorJohnny Chen <johnny.chen@apple.com>
Wed, 14 Apr 2010 22:37:17 +0000 (22:37 +0000)
committerJohnny Chen <johnny.chen@apple.com>
Wed, 14 Apr 2010 22:37:17 +0000 (22:37 +0000)
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

lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp

index eb9c2cd7a2bd6cf0470a0dd986e896ccc8a85ce7..0f3a67db8fa52127687f8a5f54c5fb0b66692264 100644 (file)
@@ -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)));