Cranelift CLIF-level differential fuzzer (#3038)

* cranelift: Initial fuzzer implementation

* cranelift: Generate multiple test cases in fuzzer

* cranelift: Separate function generator in fuzzer

* cranelift: Insert random instructions in fuzzer

* cranelift: Rename gen_testcase

* cranelift: Implement div for unsigned values in interpreter

* cranelift: Run all test cases in fuzzer

* cranelift: Comment options in function_runner

* cranelift: Improve fuzzgen README.md

* cranelift: Fuzzgen remove unused variable

* cranelift: Fuzzer code style fixes

Thanks! @bjorn3

* cranelift: Fix nits in CLIF fuzzer

Thanks @cfallin!

* cranelift: Implement Arbitrary for TestCase

* cranelift: Remove gen_testcase

* cranelift: Move fuzzers to wasmtime fuzz directory

* cranelift: CLIF-Fuzzer ignore tests that produce traps

* cranelift: CLIF-Fuzzer create new fuzz target to validate generated testcases

* cranelift: Store clif-fuzzer config in a separate struct

* cranelift: Generate variables upfront per function

* cranelift: Prevent publishing of fuzzgen crate
This commit is contained in:
Afonso Bordado
2021-07-01 14:32:01 +01:00
committed by GitHub
parent a603fc5bd5
commit 7453bd5f0d
14 changed files with 732 additions and 2 deletions

14
Cargo.lock generated
View File

@@ -640,6 +640,16 @@ dependencies = [
"target-lexicon",
]
[[package]]
name = "cranelift-fuzzgen"
version = "0.75.0"
dependencies = [
"anyhow",
"arbitrary",
"cranelift",
"rand 0.8.3",
]
[[package]]
name = "cranelift-interpreter"
version = "0.75.0"
@@ -747,6 +757,7 @@ dependencies = [
"cranelift-entity",
"cranelift-filetests",
"cranelift-frontend",
"cranelift-fuzzgen",
"cranelift-interpreter",
"cranelift-jit",
"cranelift-module",
@@ -3676,6 +3687,9 @@ name = "wasmtime-fuzz"
version = "0.0.0"
dependencies = [
"cranelift-codegen",
"cranelift-filetests",
"cranelift-fuzzgen",
"cranelift-interpreter",
"cranelift-reader",
"cranelift-wasm",
"libfuzzer-sys",