[llvm] r253607 - Fix UMRs in Mips disassembler on invalid instruction streams
Reid Kleckner via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 19 13:51:55 PST 2015
Author: rnk
Date: Thu Nov 19 15:51:55 2015
New Revision: 253607
URL: http://llvm.org/viewvc/llvm-project?rev=253607&view=rev
Log:
Fix UMRs in Mips disassembler on invalid instruction streams
The Insn and Size local variables were used without initialization.
Modified:
llvm/trunk/lib/Target/Mips/Disassembler/MipsDisassembler.cpp
Modified: llvm/trunk/lib/Target/Mips/Disassembler/MipsDisassembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/Disassembler/MipsDisassembler.cpp?rev=253607&r1=253606&r2=253607&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/Disassembler/MipsDisassembler.cpp (original)
+++ llvm/trunk/lib/Target/Mips/Disassembler/MipsDisassembler.cpp Thu Nov 19 15:51:55 2015
@@ -867,6 +867,8 @@ DecodeStatus MipsDisassembler::getInstru
if (IsMicroMips) {
Result = readInstruction16(Bytes, Address, Size, Insn, IsBigEndian);
+ if (Result == MCDisassembler::Fail)
+ return MCDisassembler::Fail;
if (hasMips32r6()) {
DEBUG(dbgs() << "Trying MicroMipsR616 table (16-bit instructions):\n");
@@ -913,12 +915,17 @@ DecodeStatus MipsDisassembler::getInstru
Size = 4;
return Result;
}
+ // This is an invalid instruction. Let the disassembler move forward by the
+ // minimum instruction size.
+ Size = 2;
return MCDisassembler::Fail;
}
Result = readInstruction32(Bytes, Address, Size, Insn, IsBigEndian, false);
- if (Result == MCDisassembler::Fail)
+ if (Result == MCDisassembler::Fail) {
+ Size = 4;
return MCDisassembler::Fail;
+ }
if (hasCOP3()) {
DEBUG(dbgs() << "Trying COP3_ table (32-bit opcodes):\n");
@@ -979,6 +986,7 @@ DecodeStatus MipsDisassembler::getInstru
return Result;
}
+ Size = 4;
return MCDisassembler::Fail;
}
More information about the llvm-commits
mailing list