Browse Source

Disable cranelift's verifier by default (#882)

The intention of the `wasmtime` crate was to disable this verifier by
default, but it looks like cranelift actually has it turned on by
default which was making our documentation incorrect!

This was discovered by seeing a number of timeouts when fuzzing. The
debug verifier is great for fuzzing, however, so fuzzing is updated to
enable this unconditionally, meaning we'll still have timeouts. For
general users though this should make the documentation correct that the
`wasmtime` crate, by default, disables the debug verifier.
pull/913/head
Alex Crichton 5 years ago
committed by GitHub
parent
commit
c860edc14f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      crates/api/src/runtime.rs
  2. 10
      crates/fuzzing/src/oracles.rs

5
crates/api/src/runtime.rs

@ -35,6 +35,11 @@ impl Config {
.enable("avoid_div_traps")
.expect("should be valid flag");
// Invert cranelift's default-on verification to instead default off.
flags
.set("enable_verifier", "false")
.expect("should be valid flag");
Config {
debug_info: false,
features: Default::default(),

10
crates/fuzzing/src/oracles.rs

@ -25,6 +25,7 @@ use wasmtime::*;
pub fn instantiate(wasm: &[u8], strategy: Strategy) {
let mut config = Config::new();
config
.cranelift_debug_verifier(true)
.strategy(strategy)
.expect("failed to enable lightbeam");
instantiate_with_config(wasm, config);
@ -70,7 +71,10 @@ pub fn instantiate_with_config(wasm: &[u8], config: Config) {
/// You can control which compiler is used via passing a `Strategy`.
pub fn compile(wasm: &[u8], strategy: Strategy) {
let mut config = Config::new();
config.strategy(strategy).unwrap();
config
.cranelift_debug_verifier(true)
.strategy(strategy)
.unwrap();
let engine = Engine::new(&config);
let store = Store::new(&engine);
let _ = Module::new(&store, wasm);
@ -264,7 +268,9 @@ pub fn make_api_calls(api: crate::generators::api::ApiCalls) {
match call {
ApiCall::ConfigNew => {
assert!(config.is_none());
config = Some(Config::new());
let mut cfg = Config::new();
cfg.cranelift_debug_verifier(true);
config = Some(cfg);
}
ApiCall::ConfigDebugInfo(b) => {

Loading…
Cancel
Save