summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2010-04-14 22:37:17 +0000
committerJohnny Chen <johnny.chen@apple.com>2010-04-14 22:37:17 +0000
commit82c50b11fa45126946ad923cf5f43d084c440afd (patch)
treeb1903bbb6a12b3dadeeff6685bf3c0a7c5ec9006 /llvm/lib
parent32bb362655c14d75124bb4d38c176145105c68c8 (diff)
downloadbcm5719-llvm-82c50b11fa45126946ad923cf5f43d084c440afd.tar.gz
bcm5719-llvm-82c50b11fa45126946ad923cf5f43d084c440afd.zip
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). llvm-svn: 101306
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
index eb9c2cd7a2b..0f3a67db8fa 100644
--- a/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
+++ b/llvm/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)));
OpenPOWER on IntegriCloud