diff options
author | Sean Callanan <scallanan@apple.com> | 2011-04-20 00:43:34 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2011-04-20 00:43:34 +0000 |
commit | d897f39797f6339f31ccc57b3eb37467ab54ee45 (patch) | |
tree | 96c9fdea82a724689cf893fdd60d127b30b2033d /llvm/lib/MC/MCDisassembler | |
parent | 49f754f423ada6aba2e19ea6a6e8f2659778512c (diff) | |
download | bcm5719-llvm-d897f39797f6339f31ccc57b3eb37467ab54ee45.tar.gz bcm5719-llvm-d897f39797f6339f31ccc57b3eb37467ab54ee45.zip |
Made the MC disassembler check before accessing
MCInst operands for ARM. This allows it to be
more tolerant of malformed MCInsts or incorrect
instruction metadata.
llvm-svn: 129840
Diffstat (limited to 'llvm/lib/MC/MCDisassembler')
-rw-r--r-- | llvm/lib/MC/MCDisassembler/EDOperand.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCDisassembler/EDOperand.cpp b/llvm/lib/MC/MCDisassembler/EDOperand.cpp index 04b21cb3592..492bb08f336 100644 --- a/llvm/lib/MC/MCDisassembler/EDOperand.cpp +++ b/llvm/lib/MC/MCDisassembler/EDOperand.cpp @@ -198,15 +198,24 @@ int EDOperand::evaluate(uint64_t &result, default: return -1; case kOperandTypeImmediate: + if (!Inst.Inst->getOperand(MCOpIndex).isImm()) + return -1; + result = Inst.Inst->getOperand(MCOpIndex).getImm(); return 0; case kOperandTypeRegister: { + if (!Inst.Inst->getOperand(MCOpIndex).isReg()) + return -1; + unsigned reg = Inst.Inst->getOperand(MCOpIndex).getReg(); return callback(&result, reg, arg); } case kOperandTypeARMBranchTarget: { + if (!Inst.Inst->getOperand(MCOpIndex).isImm()) + return -1; + int64_t displacement = Inst.Inst->getOperand(MCOpIndex).getImm(); uint64_t pcVal; |