From f743461b18b69e025b1436a780c41094a0cc5075 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Wed, 29 Apr 2020 14:22:03 +0300 Subject: [PATCH 1/7] update wasmtime --- Cargo.lock | 248 +++++++++--------- client/executor/wasmtime/Cargo.toml | 10 +- client/executor/wasmtime/src/host.rs | 2 +- client/executor/wasmtime/src/imports.rs | 145 +++++----- .../executor/wasmtime/src/instance_wrapper.rs | 48 +++- .../src/instance_wrapper/globals_snapshot.rs | 7 +- client/executor/wasmtime/src/runtime.rs | 2 +- 7 files changed, 240 insertions(+), 222 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6269e0336025e..8e4637d675f91 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -300,6 +300,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" +[[package]] +name = "base64" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3" + [[package]] name = "bincode" version = "1.2.1" @@ -721,18 +727,16 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cranelift-bforest" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a9c21f8042b9857bda93f6c1910b9f9f24100187a3d3d52f214a34e3dc5818" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7853f77a6e4a33c67a69c40f5e1bb982bd2dc5c4a22e17e67b65bbccf9b33b2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "byteorder 1.3.4", "cranelift-bforest", @@ -741,6 +745,7 @@ dependencies = [ "cranelift-entity", "gimli", "log", + "regalloc", "serde", "smallvec 1.3.0", "target-lexicon", @@ -749,9 +754,8 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084cd6d5fb0d1da28acd72c199471bfb09acc703ec8f3bf07b1699584272a3b9" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -759,24 +763,21 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "701b599783305a58c25027a4d73f2d6b599b2d8ef3f26677275f480b4d51e05d" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" [[package]] name = "cranelift-entity" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88e792b28e1ebbc0187b72ba5ba880dad083abe9231a99d19604d10c9e73f38" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518344698fa6c976d853319218415fdfb4f1bc6b42d0b2e2df652e55dff1f778" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "cranelift-codegen", "log", @@ -786,9 +787,8 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32daf082da21c0c05d93394ff4842c2ab7c4991b1f3186a1d952f8ac660edd0b" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "cranelift-codegen", "raw-cpuid", @@ -797,9 +797,8 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2aa816f554a3ef739a5d17ca3081a1f8983f04c944ea8ff60fb8d9dd8cd2d7b" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1277,11 +1276,10 @@ dependencies = [ [[package]] name = "faerie" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b9ed6159e4a6212c61d9c6a86bee01876b192a64accecf58d5b5ae3b667b52" +checksum = "dfef65b0e94693295c5d2fe2506f0ee6f43465342d4b5331659936aee8b16084" dependencies = [ - "anyhow", "goblin", "indexmap", "log", @@ -2708,7 +2706,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f7f3f79f060864db0317cc47641b7d35276dee52a0ffa91553fbd0c153863a3" dependencies = [ - "base64", + "base64 0.11.0", "byteorder 1.3.4", "bytes 0.5.4", "fnv", @@ -3857,16 +3855,13 @@ dependencies = [ [[package]] name = "object" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea44a4fd660ab0f38434934ca0212e90fbeaaee54126ef20a3451c30c95bafae" +checksum = "e5666bbb90bc4d1e5bdcb26c0afda1822d25928341e9384ab187a9b37ab69e36" dependencies = [ "flate2", - "goblin", - "parity-wasm 0.41.0", - "scroll", "target-lexicon", - "uuid", + "wasmparser", ] [[package]] @@ -5583,6 +5578,17 @@ dependencies = [ "syn 1.0.17", ] +[[package]] +name = "regalloc" +version = "0.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6d7df180ed313488abdbeec2e3398f16cbf5ea6ce20db968c8cd6fc410400a9" +dependencies = [ + "log", + "rustc-hash", + "smallvec 1.3.0", +] + [[package]] name = "regex" version = "1.3.7" @@ -5687,7 +5693,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" dependencies = [ - "base64", + "base64 0.11.0", "blake2b_simd", "constant_time_eq", "crossbeam-utils", @@ -5726,7 +5732,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" dependencies = [ - "base64", + "base64 0.11.0", "log", "ring", "sct", @@ -6316,9 +6322,9 @@ dependencies = [ "sp-core", "sp-runtime-interface", "sp-wasm-interface", - "substrate-wasmtime", - "substrate-wasmtime-runtime", + "wasmtime", "wasmtime-environ", + "wasmtime-runtime", ] [[package]] @@ -7156,7 +7162,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c9dab3f95c9ebdf3a88268c19af668f637a3c5039c2c56ff2d40b1b2d64a25b" dependencies = [ - "base64", + "base64 0.11.0", "bytes 0.5.4", "flate2", "futures 0.3.4", @@ -8210,75 +8216,6 @@ dependencies = [ name = "substrate-wasm-builder-runner" version = "1.0.5" -[[package]] -name = "substrate-wasmtime" -version = "0.13.0-threadsafe.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e512629525ecfe43bffe1f3d9e6bb0f08bf01155288ef27fcaae4ea086e4a9d" -dependencies = [ - "anyhow", - "backtrace", - "cfg-if", - "lazy_static", - "libc", - "region", - "rustc-demangle", - "substrate-wasmtime-jit", - "substrate-wasmtime-runtime", - "target-lexicon", - "wasmparser", - "wasmtime-environ", - "wasmtime-profiling", - "wat", - "winapi 0.3.8", -] - -[[package]] -name = "substrate-wasmtime-jit" -version = "0.13.0-threadsafe.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20de5564886d2bcffdd351c9cd114ceb50758aa58eac3cedb14faabf7f93b91" -dependencies = [ - "anyhow", - "cfg-if", - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "more-asserts", - "region", - "substrate-wasmtime-runtime", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-debug", - "wasmtime-environ", - "wasmtime-profiling", - "winapi 0.3.8", -] - -[[package]] -name = "substrate-wasmtime-runtime" -version = "0.13.0-threadsafe.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d08846f04293a7fc27eeb30f06262ca2e1b4ee20f5192cec1f3ce201e08ceb8" -dependencies = [ - "backtrace", - "cc", - "cfg-if", - "indexmap", - "lazy_static", - "libc", - "memoffset", - "more-asserts", - "region", - "thiserror", - "wasmtime-environ", - "wasmtime-profiling", - "winapi 0.3.8", -] - [[package]] name = "subtle" version = "1.0.0" @@ -9032,12 +8969,6 @@ dependencies = [ "percent-encoding 2.1.0", ] -[[package]] -name = "uuid" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" - [[package]] name = "vcpkg" version = "0.2.8" @@ -9281,11 +9212,32 @@ version = "0.51.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" +[[package]] +name = "wasmtime" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +dependencies = [ + "anyhow", + "backtrace", + "cfg-if", + "lazy_static", + "libc", + "region", + "rustc-demangle", + "target-lexicon", + "wasmparser", + "wasmtime-environ", + "wasmtime-jit", + "wasmtime-profiling", + "wasmtime-runtime", + "wat", + "winapi 0.3.8", +] + [[package]] name = "wasmtime-debug" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d3d007436043bf55ec252d2f4dc1d35834157b5e2f148da839ca502e611cfe1" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "anyhow", "faerie", @@ -9299,12 +9251,11 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f3dea0e60c076dd0da27fa10c821323903c9554c617ed32eaab8e7a7e36c89" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ "anyhow", - "base64", + "base64 0.12.0", "bincode", "cranelift-codegen", "cranelift-entity", @@ -9326,20 +9277,67 @@ dependencies = [ "zstd", ] +[[package]] +name = "wasmtime-jit" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +dependencies = [ + "anyhow", + "cfg-if", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli", + "log", + "more-asserts", + "region", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-debug", + "wasmtime-environ", + "wasmtime-profiling", + "wasmtime-runtime", + "winapi 0.3.8", +] + [[package]] name = "wasmtime-profiling" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984d29c8add3381e60d649f4e3e2a501da900fc2d2586e139502eec32fe0ebc8" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" dependencies = [ + "anyhow", + "cfg-if", "gimli", - "goblin", "lazy_static", "libc", "object", "scroll", "serde", "target-lexicon", + "wasmtime-environ", + "wasmtime-runtime", +] + +[[package]] +name = "wasmtime-runtime" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +dependencies = [ + "backtrace", + "cc", + "cfg-if", + "indexmap", + "lazy_static", + "libc", + "memoffset", + "more-asserts", + "region", + "thiserror", + "wasmtime-environ", + "winapi 0.3.8", ] [[package]] diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index 5b1c3841410b3..8a20ab025cf4e 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -21,11 +21,11 @@ sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-in sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } -wasmtime = { package = "substrate-wasmtime", version = "0.13.0-threadsafe.1" } -wasmtime_runtime = { package = "substrate-wasmtime-runtime", version = "0.13.0-threadsafe.1" } -wasmtime-environ = "0.12.0" -cranelift-wasm = "0.59.0" -cranelift-codegen = "0.59.0" +wasmtime = { git = "https://github.com/paritytech/wasmtime" } +wasmtime-runtime = { git = "https://github.com/paritytech/wasmtime" } +wasmtime-environ = { git = "https://github.com/paritytech/wasmtime" } +cranelift-wasm = { git = "https://github.com/paritytech/wasmtime" } +cranelift-codegen = { git = "https://github.com/paritytech/wasmtime" } [dev-dependencies] assert_matches = "1.3.0" diff --git a/client/executor/wasmtime/src/host.rs b/client/executor/wasmtime/src/host.rs index 29187ac66338e..7f2cdd7ed3ad1 100644 --- a/client/executor/wasmtime/src/host.rs +++ b/client/executor/wasmtime/src/host.rs @@ -117,7 +117,7 @@ impl<'a> SandboxCapabilities for HostContext<'a> { return Err("Supervisor function returned unexpected result!".into()); } } - Err(err) => Err(err.message().to_string().into()), + Err(err) => Err(format!("{}", err).into()), } } } diff --git a/client/executor/wasmtime/src/imports.rs b/client/executor/wasmtime/src/imports.rs index 48299ffd62de1..2d9794b7eda12 100644 --- a/client/executor/wasmtime/src/imports.rs +++ b/client/executor/wasmtime/src/imports.rs @@ -18,9 +18,8 @@ use crate::state_holder; use sc_executor_common::error::WasmError; use sp_wasm_interface::{Function, Value, ValueType}; use std::any::Any; -use std::rc::Rc; use wasmtime::{ - Callable, Extern, ExternType, Func, FuncType, ImportType, Limits, Memory, MemoryType, Module, + Extern, ExternType, Func, FuncType, ImportType, Limits, Memory, MemoryType, Module, Trap, Val, }; @@ -53,11 +52,11 @@ pub fn resolve_imports( let resolved = match import_ty.name() { "memory" => { memory_import_index = Some(externs.len()); - resolve_memory_import(module, import_ty, heap_pages)? + resolve_memory_import(module, &import_ty, heap_pages)? } _ => resolve_func_import( module, - import_ty, + &import_ty, host_functions, allow_missing_func_imports, )?, @@ -131,7 +130,7 @@ fn resolve_func_import( { Some(host_func) => host_func, None if allow_missing_func_imports => { - return Ok(MissingHostFuncHandler::new(import_ty).into_extern(module, func_ty)); + return Ok(MissingHostFuncHandler::new(import_ty).into_extern(module, &func_ty)); } None => { return Err(WasmError::Other(format!( @@ -163,6 +162,58 @@ struct HostFuncHandler { host_func: &'static dyn Function, } +fn call_static( + static_func: &'static dyn Function, + wasmtime_params: &[Val], + wasmtime_results: &mut [Val], +) -> Result<(), wasmtime::Trap> { + let unwind_result = state_holder::with_context(|host_ctx| { + let mut host_ctx = host_ctx.expect( + "host functions can be called only from wasm instance; + wasm instance is always called initializing context; + therefore host_ctx cannot be None; + qed + ", + ); + // `into_value` panics if it encounters a value that doesn't fit into the values + // available in substrate. + // + // This, however, cannot happen since the signature of this function is created from + // a `dyn Function` signature of which cannot have a non substrate value by definition. + let mut params = wasmtime_params.iter().cloned().map(into_value); + + std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + static_func.execute(&mut host_ctx, &mut params) + })) + }); + + let execution_result = match unwind_result { + Ok(execution_result) => execution_result, + Err(err) => return Err(Trap::new(stringify_panic_payload(err))), + }; + + match execution_result { + Ok(Some(ret_val)) => { + debug_assert!( + wasmtime_results.len() == 1, + "wasmtime function signature, therefore the number of results, should always \ + correspond to the number of results returned by the host function", + ); + wasmtime_results[0] = into_wasmtime_val(ret_val); + Ok(()) + } + Ok(None) => { + debug_assert!( + wasmtime_results.len() == 0, + "wasmtime function signature, therefore the number of results, should always \ + correspond to the number of results returned by the host function", + ); + Ok(()) + } + Err(msg) => Err(Trap::new(msg)), + } +} + impl HostFuncHandler { fn new(host_func: &'static dyn Function) -> Self { Self { @@ -171,63 +222,14 @@ impl HostFuncHandler { } fn into_extern(self, module: &Module) -> Extern { + let host_func = self.host_func; let func_ty = wasmtime_func_sig(self.host_func); - let func = Func::new(module.store(), func_ty, Rc::new(self)); - Extern::Func(func) - } -} - -impl Callable for HostFuncHandler { - fn call( - &self, - wasmtime_params: &[Val], - wasmtime_results: &mut [Val], - ) -> Result<(), wasmtime::Trap> { - let unwind_result = state_holder::with_context(|host_ctx| { - let mut host_ctx = host_ctx.expect( - "host functions can be called only from wasm instance; - wasm instance is always called initializing context; - therefore host_ctx cannot be None; - qed - ", - ); - // `into_value` panics if it encounters a value that doesn't fit into the values - // available in substrate. - // - // This, however, cannot happen since the signature of this function is created from - // a `dyn Function` signature of which cannot have a non substrate value by definition. - let mut params = wasmtime_params.iter().cloned().map(into_value); - - std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { - self.host_func.execute(&mut host_ctx, &mut params) - })) - }); - - let execution_result = match unwind_result { - Ok(execution_result) => execution_result, - Err(err) => return Err(Trap::new(stringify_panic_payload(err))), - }; - - match execution_result { - Ok(Some(ret_val)) => { - debug_assert!( - wasmtime_results.len() == 1, - "wasmtime function signature, therefore the number of results, should always \ - correspond to the number of results returned by the host function", - ); - wasmtime_results[0] = into_wasmtime_val(ret_val); - Ok(()) - } - Ok(None) => { - debug_assert!( - wasmtime_results.len() == 0, - "wasmtime function signature, therefore the number of results, should always \ - correspond to the number of results returned by the host function", - ); - Ok(()) + let func = Func::new(module.store(), func_ty, + move |_, params, result| { + call_static(host_func, params, result) } - Err(msg) => Err(Trap::new(msg)), - } + ); + Extern::Func(func) } } @@ -245,25 +247,18 @@ impl MissingHostFuncHandler { } } - fn into_extern(self, module: &Module, func_ty: &FuncType) -> Extern { - let func = Func::new(module.store(), func_ty.clone(), Rc::new(self)); + fn into_extern(self, wasmtime_module: &Module, func_ty: &FuncType) -> Extern { + let Self { module, name } = self; + let func = Func::new(wasmtime_module.store(), func_ty.clone(), + move |_, _, _| Err(Trap::new(format!( + "call to a missing function {}:{}", + module, name + ))) + ); Extern::Func(func) } } -impl Callable for MissingHostFuncHandler { - fn call( - &self, - _wasmtime_params: &[Val], - _wasmtime_results: &mut [Val], - ) -> Result<(), wasmtime::Trap> { - Err(Trap::new(format!( - "call to a missing function {}:{}", - self.module, self.name - ))) - } -} - fn wasmtime_func_sig(func: &dyn Function) -> wasmtime::FuncType { let params = func .signature() diff --git a/client/executor/wasmtime/src/instance_wrapper.rs b/client/executor/wasmtime/src/instance_wrapper.rs index 469668802f186..bf01896809ed6 100644 --- a/client/executor/wasmtime/src/instance_wrapper.rs +++ b/client/executor/wasmtime/src/instance_wrapper.rs @@ -26,7 +26,7 @@ use sc_executor_common::{ util::{WasmModuleInfo, DataSegmentsSnapshot}, }; use sp_wasm_interface::{Pointer, WordSize, Value}; -use wasmtime::{Store, Instance, Module, Memory, Table, Val}; +use wasmtime::{Store, Instance, Module, Memory, Table, Val, Func, Extern, Global}; mod globals_snapshot; @@ -88,6 +88,35 @@ pub struct InstanceWrapper { _not_send_nor_sync: marker::PhantomData<*const ()>, } +fn extern_memory(extern_: &Extern) -> Option<&Memory> { + match extern_ { + Extern::Memory(mem) => Some(mem), + _ => None, + } +} + + +fn extern_global(extern_: &Extern) -> Option<&Global> { + match extern_ { + Extern::Global(glob) => Some(glob), + _ => None, + } +} + +fn extern_table(extern_: &Extern) -> Option<&Table> { + match extern_ { + Extern::Table(table) => Some(table), + _ => None, + } +} + +fn extern_func(extern_: &Extern) -> Option<&Func> { + match extern_ { + Extern::Func(func) => Some(func), + _ => None, + } +} + impl InstanceWrapper { /// Create a new instance wrapper from the given wasm module. pub fn new(module_wrapper: &ModuleWrapper, imports: &Imports, heap_pages: u32) -> Result { @@ -96,8 +125,7 @@ impl InstanceWrapper { let memory = match imports.memory_import_index { Some(memory_idx) => { - imports.externs[memory_idx] - .memory() + extern_memory(&imports.externs[memory_idx]) .expect("only memory can be at the `memory_idx`; qed") .clone() } @@ -130,8 +158,7 @@ impl InstanceWrapper { .instance .get_export(name) .ok_or_else(|| Error::from(format!("Exported method {} is not found", name)))?; - let entrypoint = export - .func() + let entrypoint = extern_func(&export) .ok_or_else(|| Error::from(format!("Export {} is not a function", name)))?; match (entrypoint.ty().params(), entrypoint.ty().results()) { (&[wasmtime::ValType::I32, wasmtime::ValType::I32], &[wasmtime::ValType::I64]) => {} @@ -164,8 +191,7 @@ impl InstanceWrapper { .get_export("__heap_base") .ok_or_else(|| Error::from("__heap_base is not found"))?; - let heap_base_global = heap_base_export - .global() + let heap_base_global = extern_global(&heap_base_export) .ok_or_else(|| Error::from("__heap_base is not a global"))?; let heap_base = heap_base_global @@ -183,7 +209,7 @@ impl InstanceWrapper { None => return Ok(None), }; - let global = global.global().ok_or_else(|| format!("`{}` is not a global", name))?; + let global = extern_global(&global).ok_or_else(|| format!("`{}` is not a global", name))?; match global.get() { Val::I32(val) => Ok(Some(Value::I32(val))), @@ -201,8 +227,7 @@ fn get_linear_memory(instance: &Instance) -> Result { .get_export("memory") .ok_or_else(|| Error::from("memory is not exported under `memory` name"))?; - let memory = memory_export - .memory() + let memory = extern_memory(&memory_export) .ok_or_else(|| Error::from("the `memory` export should have memory type"))? .clone(); @@ -213,7 +238,8 @@ fn get_linear_memory(instance: &Instance) -> Result { fn get_table(instance: &Instance) -> Option { instance .get_export("__indirect_function_table") - .and_then(|export| export.table()) + .as_ref() + .and_then(extern_table) .cloned() } diff --git a/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs b/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs index a6ab3fed604c4..8707390b9fedd 100644 --- a/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs +++ b/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs @@ -21,6 +21,7 @@ use sc_executor_common::{ use sp_wasm_interface::Value; use cranelift_codegen::ir; use cranelift_wasm::GlobalIndex; +use wasmtime_runtime::{ExportGlobal, Export}; /// A snapshot of a global variables values. This snapshot can be used later for restoring the /// values to the preserved state. @@ -43,11 +44,9 @@ impl GlobalsSnapshot { for global_idx in instance_wrapper.imported_globals_count..instance_wrapper.globals_count { let (def, global) = match handle.lookup_by_declaration( - &wasmtime_environ::Export::Global(GlobalIndex::from_u32(global_idx)), + &wasmtime_environ::EntityIndex::Global(GlobalIndex::from_u32(global_idx)), ) { - wasmtime_runtime::Export::Global { - definition, global, .. - } => (definition, global), + Export::Global(ExportGlobal { definition, global, .. }) => (definition, global), _ => unreachable!("only globals can be returned for a global request"), }; diff --git a/client/executor/wasmtime/src/runtime.rs b/client/executor/wasmtime/src/runtime.rs index 0289188ba11fc..a2ad3bada4ba0 100644 --- a/client/executor/wasmtime/src/runtime.rs +++ b/client/executor/wasmtime/src/runtime.rs @@ -158,7 +158,7 @@ fn perform_call( Err(trap) => { return Err(Error::from(format!( "Wasm execution trapped: {}", - trap.message() + trap ))); } } From 6440a2a81e4cf2b634b40d8765bdc2cae5c35123 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Wed, 29 Apr 2020 14:51:55 +0300 Subject: [PATCH 2/7] update tests --- client/executor/src/integration_tests/mod.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/client/executor/src/integration_tests/mod.rs b/client/executor/src/integration_tests/mod.rs index 2e62e0601574d..932e2e3a1e957 100644 --- a/client/executor/src/integration_tests/mod.rs +++ b/client/executor/src/integration_tests/mod.rs @@ -92,9 +92,8 @@ fn call_not_existing_function(wasm_method: WasmExecutionMethod) { "\"Trap: Trap { kind: Host(Other(\\\"Function `missing_external` is only a stub. Calling a stub is not allowed.\\\")) }\"" ), #[cfg(feature = "wasmtime")] - WasmExecutionMethod::Compiled => assert_eq!( - &format!("{:?}", e), - "\"Wasm execution trapped: call to a missing function env:missing_external\"" + WasmExecutionMethod::Compiled => assert!( + format!("{:?}", e).contains("Wasm execution trapped: call to a missing function env:missing_external") ), } } @@ -121,9 +120,8 @@ fn call_yet_another_not_existing_function(wasm_method: WasmExecutionMethod) { "\"Trap: Trap { kind: Host(Other(\\\"Function `yet_another_missing_external` is only a stub. Calling a stub is not allowed.\\\")) }\"" ), #[cfg(feature = "wasmtime")] - WasmExecutionMethod::Compiled => assert_eq!( - &format!("{:?}", e), - "\"Wasm execution trapped: call to a missing function env:yet_another_missing_external\"" + WasmExecutionMethod::Compiled => assert!( + format!("{:?}", e).contains("Wasm execution trapped: call to a missing function env:yet_another_missing_external") ), } } From a28c0e945d73e93cc59a2d19d036b564ecd64dc1 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Wed, 29 Apr 2020 16:05:32 +0300 Subject: [PATCH 3/7] Update client/executor/wasmtime/src/host.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Bastian Köcher --- client/executor/wasmtime/src/host.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/executor/wasmtime/src/host.rs b/client/executor/wasmtime/src/host.rs index 7f2cdd7ed3ad1..8c481e95c4371 100644 --- a/client/executor/wasmtime/src/host.rs +++ b/client/executor/wasmtime/src/host.rs @@ -117,7 +117,7 @@ impl<'a> SandboxCapabilities for HostContext<'a> { return Err("Supervisor function returned unexpected result!".into()); } } - Err(err) => Err(format!("{}", err).into()), + Err(err) => Err(err.to_string().into()), } } } From e7bdc3123618231ee7773e63cdc84456c759d6c8 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Thu, 30 Apr 2020 17:13:37 +0300 Subject: [PATCH 4/7] wip --- Cargo.lock | 60 +++++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 86760548a7b33..2f1e6a04ad87b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -727,16 +727,16 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cranelift-bforest" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "byteorder 1.3.4", "cranelift-bforest", @@ -754,8 +754,8 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -763,21 +763,21 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" [[package]] name = "cranelift-entity" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "cranelift-codegen", "log", @@ -787,8 +787,8 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "cranelift-codegen", "raw-cpuid", @@ -797,8 +797,8 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -5582,9 +5582,9 @@ dependencies = [ [[package]] name = "regalloc" -version = "0.0.18" +version = "0.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d7df180ed313488abdbeec2e3398f16cbf5ea6ce20db968c8cd6fc410400a9" +checksum = "b27b256b41986ac5141b37b8bbba85d314fbf546c182eb255af6720e07e4f804" dependencies = [ "log", "rustc-hash", @@ -9215,8 +9215,8 @@ checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" [[package]] name = "wasmtime" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "anyhow", "backtrace", @@ -9237,8 +9237,8 @@ dependencies = [ [[package]] name = "wasmtime-debug" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "anyhow", "faerie", @@ -9252,8 +9252,8 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "anyhow", "base64 0.12.0", @@ -9280,8 +9280,8 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "anyhow", "cfg-if", @@ -9306,8 +9306,8 @@ dependencies = [ [[package]] name = "wasmtime-profiling" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "anyhow", "cfg-if", @@ -9324,8 +9324,8 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime#c7ca83aafc48642912ac11e84e4fc7c3b222123f" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" dependencies = [ "backtrace", "cc", From f48dc239ea6f9691fe222003791aadd165739c1a Mon Sep 17 00:00:00 2001 From: NikVolf Date: Fri, 1 May 2020 09:40:35 +0300 Subject: [PATCH 5/7] use master-candidate --- Cargo.lock | 60 ++++++++++++++--------------- client/executor/wasmtime/Cargo.toml | 10 ++--- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2f1e6a04ad87b..c9b6a63739453 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -727,16 +727,16 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cranelift-bforest" -version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "byteorder 1.3.4", "cranelift-bforest", @@ -754,8 +754,8 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -763,21 +763,21 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" [[package]] name = "cranelift-entity" -version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "cranelift-codegen", "log", @@ -787,8 +787,8 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "cranelift-codegen", "raw-cpuid", @@ -797,8 +797,8 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.62.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -5582,9 +5582,9 @@ dependencies = [ [[package]] name = "regalloc" -version = "0.0.21" +version = "0.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b27b256b41986ac5141b37b8bbba85d314fbf546c182eb255af6720e07e4f804" +checksum = "c6d7df180ed313488abdbeec2e3398f16cbf5ea6ce20db968c8cd6fc410400a9" dependencies = [ "log", "rustc-hash", @@ -9215,8 +9215,8 @@ checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" [[package]] name = "wasmtime" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "anyhow", "backtrace", @@ -9237,8 +9237,8 @@ dependencies = [ [[package]] name = "wasmtime-debug" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "anyhow", "faerie", @@ -9252,8 +9252,8 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "anyhow", "base64 0.12.0", @@ -9280,8 +9280,8 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "anyhow", "cfg-if", @@ -9306,8 +9306,8 @@ dependencies = [ [[package]] name = "wasmtime-profiling" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "anyhow", "cfg-if", @@ -9324,8 +9324,8 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime#1a319782f26e32fb4241ef6be14ae9cc9dfe6c2e" +version = "0.15.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" dependencies = [ "backtrace", "cc", diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index 8a20ab025cf4e..4cbf60b34e05e 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -21,11 +21,11 @@ sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-in sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } -wasmtime = { git = "https://github.com/paritytech/wasmtime" } -wasmtime-runtime = { git = "https://github.com/paritytech/wasmtime" } -wasmtime-environ = { git = "https://github.com/paritytech/wasmtime" } -cranelift-wasm = { git = "https://github.com/paritytech/wasmtime" } -cranelift-codegen = { git = "https://github.com/paritytech/wasmtime" } +wasmtime = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } +wasmtime-runtime = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } +wasmtime-environ = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } +cranelift-wasm = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } +cranelift-codegen = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } [dev-dependencies] assert_matches = "1.3.0" From c671b29749ca7441e761eba3cc2c3ba358402cfe Mon Sep 17 00:00:00 2001 From: NikVolf Date: Fri, 1 May 2020 09:53:50 +0300 Subject: [PATCH 6/7] update with patches --- Cargo.lock | 56 ++++++++++++++--------------- Cargo.toml | 4 +++ client/executor/wasmtime/Cargo.toml | 6 ++-- 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c9b6a63739453..73379449cb64f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -727,16 +727,16 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cranelift-bforest" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "byteorder 1.3.4", "cranelift-bforest", @@ -754,8 +754,8 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -763,21 +763,21 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" [[package]] name = "cranelift-entity" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "cranelift-codegen", "log", @@ -787,8 +787,8 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "cranelift-codegen", "raw-cpuid", @@ -797,8 +797,8 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.62.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.63.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -9215,8 +9215,8 @@ checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" [[package]] name = "wasmtime" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "anyhow", "backtrace", @@ -9237,8 +9237,8 @@ dependencies = [ [[package]] name = "wasmtime-debug" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "anyhow", "faerie", @@ -9252,8 +9252,8 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "anyhow", "base64 0.12.0", @@ -9280,8 +9280,8 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "anyhow", "cfg-if", @@ -9306,8 +9306,8 @@ dependencies = [ [[package]] name = "wasmtime-profiling" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "anyhow", "cfg-if", @@ -9324,8 +9324,8 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "0.15.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#ae071dfabeb31e17127c1bfef86e3573500b9231" +version = "0.16.0" +source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" dependencies = [ "backtrace", "cc", diff --git a/Cargo.toml b/Cargo.toml index 35d396741f19c..7fcecda228290 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -182,3 +182,7 @@ members = [ # Substrate runtime requires unwinding. panic = "unwind" +[patch.crates-io] +wasmtime-environ = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } +cranelift-codegen = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } +cranelift-wasm = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } \ No newline at end of file diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index 4cbf60b34e05e..497f9af7be68f 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -23,9 +23,9 @@ sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } wasmtime = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } wasmtime-runtime = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } -wasmtime-environ = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } -cranelift-wasm = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } -cranelift-codegen = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } +wasmtime-environ = "0.16" +cranelift-wasm = "0.63" +cranelift-codegen = "0.63" [dev-dependencies] assert_matches = "1.3.0" From cc400bc52762180cf16c6b8c5a92a57d39624e3b Mon Sep 17 00:00:00 2001 From: NikVolf Date: Mon, 4 May 2020 14:10:36 +0300 Subject: [PATCH 7/7] update versions --- Cargo.lock | 212 +++++++++++++++------------- Cargo.toml | 5 - client/executor/wasmtime/Cargo.toml | 4 +- 3 files changed, 115 insertions(+), 106 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 33799ced4e462..abfa181abf4af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -728,7 +728,8 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cranelift-bforest" version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4425bb6c3f3d2f581c650f1a1fdd3196a975490149cf59bea9d34c3bea79eda" dependencies = [ "cranelift-entity", ] @@ -736,7 +737,8 @@ dependencies = [ [[package]] name = "cranelift-codegen" version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d166b289fd30062ee6de86284750fc3fe5d037c6b864b3326ce153239b0626e1" dependencies = [ "byteorder 1.3.4", "cranelift-bforest", @@ -755,7 +757,8 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02c9fb2306a36d41c5facd4bf3400bc6c157185c43a96eaaa503471c34c5144b" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -764,12 +767,14 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44e0cfe9b1f97d9f836bca551618106c7d53b93b579029ecd38e73daa7eb689e" [[package]] name = "cranelift-entity" version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "926a73c432e5ba9c891171ff50b75e7d992cd76cd271f0a0a0ba199138077472" dependencies = [ "serde", ] @@ -777,7 +782,8 @@ dependencies = [ [[package]] name = "cranelift-frontend" version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45f82e3446dd1ebb8c2c2f6a6b0e6cd6cd52965c7e5f7b1b35e9a9ace31ccde" dependencies = [ "cranelift-codegen", "log", @@ -788,7 +794,8 @@ dependencies = [ [[package]] name = "cranelift-native" version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488b5d481bb0996a143e55a9d1739ef425efa20d4a5e5e98c859a8573c9ead9a" dependencies = [ "cranelift-codegen", "raw-cpuid", @@ -798,7 +805,8 @@ dependencies = [ [[package]] name = "cranelift-wasm" version = "0.63.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00aa8dde71fd9fdb1958e7b0ef8f524c1560e2c6165e4ea54bc302b40551c161" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -5599,9 +5607,9 @@ dependencies = [ [[package]] name = "regalloc" -version = "0.0.18" +version = "0.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d7df180ed313488abdbeec2e3398f16cbf5ea6ce20db968c8cd6fc410400a9" +checksum = "b27b256b41986ac5141b37b8bbba85d314fbf546c182eb255af6720e07e4f804" dependencies = [ "log", "rustc-hash", @@ -6341,9 +6349,9 @@ dependencies = [ "sp-core", "sp-runtime-interface", "sp-wasm-interface", - "wasmtime", + "substrate-wasmtime", + "substrate-wasmtime-runtime", "wasmtime-environ", - "wasmtime-runtime", ] [[package]] @@ -8235,6 +8243,95 @@ dependencies = [ name = "substrate-wasm-builder-runner" version = "1.0.5" +[[package]] +name = "substrate-wasmtime" +version = "0.16.0-threadsafe.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b8f9558e3fe7018b9aeac2aba318664dd7b15e307de11b09f58240695688a96" +dependencies = [ + "anyhow", + "backtrace", + "cfg-if", + "lazy_static", + "libc", + "region", + "rustc-demangle", + "substrate-wasmtime-jit", + "substrate-wasmtime-profiling", + "substrate-wasmtime-runtime", + "target-lexicon", + "wasmparser", + "wasmtime-environ", + "wat", + "winapi 0.3.8", +] + +[[package]] +name = "substrate-wasmtime-jit" +version = "0.16.0-threadsafe.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b681b90a8d48b9535e4287c02e5aef6c72228ff45cbb60b4d195a762cc0770" +dependencies = [ + "anyhow", + "cfg-if", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli", + "log", + "more-asserts", + "region", + "substrate-wasmtime-profiling", + "substrate-wasmtime-runtime", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-debug", + "wasmtime-environ", + "winapi 0.3.8", +] + +[[package]] +name = "substrate-wasmtime-profiling" +version = "0.16.0-threadsafe.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7cb99b24e771de6c20b380fdf2d26ffc2c20701892c540830beb83af98bb3b7" +dependencies = [ + "anyhow", + "cfg-if", + "gimli", + "lazy_static", + "libc", + "object", + "scroll", + "serde", + "substrate-wasmtime-runtime", + "target-lexicon", + "wasmtime-environ", +] + +[[package]] +name = "substrate-wasmtime-runtime" +version = "0.16.0-threadsafe.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaccd27cc466bd2904aa14f984f642083037bf5b47e251ccaf1009aed0a2a185" +dependencies = [ + "backtrace", + "cc", + "cfg-if", + "indexmap", + "lazy_static", + "libc", + "memoffset", + "more-asserts", + "region", + "thiserror", + "wasmtime-environ", + "winapi 0.3.8", +] + [[package]] name = "subtle" version = "1.0.0" @@ -9231,32 +9328,11 @@ version = "0.51.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" -[[package]] -name = "wasmtime" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" -dependencies = [ - "anyhow", - "backtrace", - "cfg-if", - "lazy_static", - "libc", - "region", - "rustc-demangle", - "target-lexicon", - "wasmparser", - "wasmtime-environ", - "wasmtime-jit", - "wasmtime-profiling", - "wasmtime-runtime", - "wat", - "winapi 0.3.8", -] - [[package]] name = "wasmtime-debug" version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d39ba645aee700b29ff0093028b4123556dd142a74973f04ed6225eedb40e77d" dependencies = [ "anyhow", "faerie", @@ -9271,7 +9347,8 @@ dependencies = [ [[package]] name = "wasmtime-environ" version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed54fd9d64dfeeee7c285fd126174a6b5e6d4efc7e5a1566fdb635e60ff6a74e" dependencies = [ "anyhow", "base64 0.12.0", @@ -9296,69 +9373,6 @@ dependencies = [ "zstd", ] -[[package]] -name = "wasmtime-jit" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" -dependencies = [ - "anyhow", - "cfg-if", - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "gimli", - "log", - "more-asserts", - "region", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-debug", - "wasmtime-environ", - "wasmtime-profiling", - "wasmtime-runtime", - "winapi 0.3.8", -] - -[[package]] -name = "wasmtime-profiling" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" -dependencies = [ - "anyhow", - "cfg-if", - "gimli", - "lazy_static", - "libc", - "object", - "scroll", - "serde", - "target-lexicon", - "wasmtime-environ", - "wasmtime-runtime", -] - -[[package]] -name = "wasmtime-runtime" -version = "0.16.0" -source = "git+https://github.com/paritytech/wasmtime?branch=master-candidate#3503381726fe9af5979b7e07021009f5b286808e" -dependencies = [ - "backtrace", - "cc", - "cfg-if", - "indexmap", - "lazy_static", - "libc", - "memoffset", - "more-asserts", - "region", - "thiserror", - "wasmtime-environ", - "winapi 0.3.8", -] - [[package]] name = "wast" version = "14.0.0" diff --git a/Cargo.toml b/Cargo.toml index 96149d6400428..3882e96611e05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -182,8 +182,3 @@ members = [ [profile.release] # Substrate runtime requires unwinding. panic = "unwind" - -[patch.crates-io] -wasmtime-environ = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } -cranelift-codegen = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } -cranelift-wasm = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index 497f9af7be68f..3644c57e47b20 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -21,8 +21,8 @@ sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-in sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } -wasmtime = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } -wasmtime-runtime = { git = "https://github.com/paritytech/wasmtime", branch = "master-candidate" } +wasmtime = { package = "substrate-wasmtime", version = "0.16.0-threadsafe.1" } +wasmtime-runtime = { package = "substrate-wasmtime-runtime", version = "0.16.0-threadsafe.1" } wasmtime-environ = "0.16" cranelift-wasm = "0.63" cranelift-codegen = "0.63"