[PATCH] D12960: [llvm-mc-fuzzer] Support untested instruction discovery for variable length instruction sets like microMIPS.
Daniel Sanders via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 18 07:01:51 PDT 2015
dsanders created this revision.
dsanders added subscribers: llvm-commits, kcc.
For fixed length instructions, we can use -max_len to limit the fuzzer to a
single instruction. This doesn't work for variable length instruction sets
since a 4-byte input could consist of one 4-byte instruction or two 2-byte
instructions.
This patch adds a --insn-limit to llvm-mc-fuzzer to limit the input in
terms of instructions processed.
http://reviews.llvm.org/D12960
Files:
tools/llvm-mc-fuzzer/llvm-mc-fuzzer.cpp
Index: tools/llvm-mc-fuzzer/llvm-mc-fuzzer.cpp
===================================================================
--- tools/llvm-mc-fuzzer/llvm-mc-fuzzer.cpp
+++ tools/llvm-mc-fuzzer/llvm-mc-fuzzer.cpp
@@ -44,6 +44,12 @@
cl::desc("Target a specific cpu type (-mcpu=help for details)"),
cl::value_desc("cpu-name"), cl::init(""));
+// This is useful for variable-length instruction sets.
+static cl::opt<unsigned> InsnLimit(
+ "insn-limit",
+ cl::desc("Limit the number of instructions to process (0 for no limit)"),
+ cl::value_desc("count"), cl::init(0));
+
static cl::list<std::string>
MAttrs("mattr", cl::CommaSeparated,
cl::desc("Target specific attributes (-mattr=help for details)"),
@@ -67,11 +73,16 @@
assert(Ctx);
uint8_t *p = DataCopy.data();
unsigned Consumed;
+ unsigned InstructionsProcessed = 0;
do {
Consumed = LLVMDisasmInstruction(Ctx, p, Size, 0, AssemblyText,
AssemblyTextBufSize);
Size -= Consumed;
p += Consumed;
+
+ InstructionsProcessed ++;
+ if (InsnLimit != 0 && InstructionsProcessed < InsnLimit)
+ break;
} while (Consumed != 0);
LLVMDisasmDispose(Ctx);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D12960.35079.patch
Type: text/x-patch
Size: 1216 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150918/dd160b68/attachment.bin>
More information about the llvm-commits
mailing list