[llvm-commits] [llvm] r129840 - /llvm/trunk/lib/MC/MCDisassembler/EDOperand.cpp

Sean Callanan scallanan at apple.com
Tue Apr 19 17:43:34 PDT 2011


Author: spyffe
Date: Tue Apr 19 19:43:34 2011
New Revision: 129840

URL: http://llvm.org/viewvc/llvm-project?rev=129840&view=rev
Log:
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.

Modified:
    llvm/trunk/lib/MC/MCDisassembler/EDOperand.cpp

Modified: llvm/trunk/lib/MC/MCDisassembler/EDOperand.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/EDOperand.cpp?rev=129840&r1=129839&r2=129840&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDisassembler/EDOperand.cpp (original)
+++ llvm/trunk/lib/MC/MCDisassembler/EDOperand.cpp Tue Apr 19 19:43:34 2011
@@ -198,15 +198,24 @@
     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;





More information about the llvm-commits mailing list