diff options
author | Owen Anderson <resistor@mac.com> | 2011-08-24 22:40:22 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2011-08-24 22:40:22 +0000 |
commit | 37612a3de3a13e8d489a19229be99e6c4ab2bc01 (patch) | |
tree | 7997e616e131f635ce598cea62fc7ffe998c6e00 /llvm/lib/Target/ARM/Disassembler | |
parent | 184bd1430b17a2a8066619930325c5b5f7b21588 (diff) | |
download | bcm5719-llvm-37612a3de3a13e8d489a19229be99e6c4ab2bc01.tar.gz bcm5719-llvm-37612a3de3a13e8d489a19229be99e6c4ab2bc01.zip |
Perform more thorough checking of t2IT mask parameters, which fixes all remaining crashers when disassembling the entire 16-bit instruction space.
llvm-svn: 138507
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler')
-rw-r--r-- | llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp index e22126956e7..83a8f800608 100644 --- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp +++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp @@ -230,6 +230,8 @@ static DecodeStatus DecodeThumbBLTargetOperand(llvm::MCInst &Inst, unsigned Val, uint64_t Address, const void *Decoder); static DecodeStatus DecodeITCond(llvm::MCInst &Inst, unsigned Val, uint64_t Address, const void *Decoder); +static DecodeStatus DecodeITMask(llvm::MCInst &Inst, unsigned Val, + uint64_t Address, const void *Decoder); #include "ARMGenDisassemblerTables.inc" #include "ARMGenInstrInfo.inc" @@ -3304,3 +3306,14 @@ static DecodeStatus DecodeITCond(llvm::MCInst &Inst, unsigned Cond, return S; } +static DecodeStatus DecodeITMask(llvm::MCInst &Inst, unsigned Mask, + uint64_t Address, const void *Decoder) { + DecodeStatus S = Success; + if (Mask == 0) { + Mask = 0x8; + CHECK(S, Unpredictable); + } + Inst.addOperand(MCOperand::CreateImm(Mask)); + return S; +} + |