Refactor usage of SecondaryMap impls (serde, PartialEq)

This commit is contained in:
Artur Jamro
2019-08-22 10:09:40 -07:00
committed by Dan Gohman
parent bb0a443747
commit fad70eb8bb
19 changed files with 65 additions and 290 deletions

View File

@@ -11,10 +11,10 @@ edition = "2018"
default-run = "wasmtime" default-run = "wasmtime"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-native = "0.40.0" cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-native = "0.41.0"
wasmtime-api = { path = "wasmtime-api" } wasmtime-api = { path = "wasmtime-api" }
wasmtime-debug = { path = "wasmtime-debug" } wasmtime-debug = { path = "wasmtime-debug" }
wasmtime-environ = { path = "wasmtime-environ" } wasmtime-environ = { path = "wasmtime-environ" }

View File

@@ -9,7 +9,7 @@ topdir=$(dirname "$0")
cd "$topdir" cd "$topdir"
# All the cranelift-* crates have the same version number # All the cranelift-* crates have the same version number
version="0.38.0" version="0.41.0"
# Update all of the Cargo.toml files. # Update all of the Cargo.toml files.
echo "Updating crate versions to $version" echo "Updating crate versions to $version"

View File

@@ -11,9 +11,9 @@ cargo-fuzz = true
[dependencies] [dependencies]
wasmtime-environ = { path = "../wasmtime-environ" } wasmtime-environ = { path = "../wasmtime-environ" }
wasmtime-jit = { path = "../wasmtime-jit" } wasmtime-jit = { path = "../wasmtime-jit" }
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
cranelift-native = "0.40.0" cranelift-native = "0.41.0"
libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer-sys.git" } libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer-sys.git" }
wasmparser = { version = "0.36.0", default-features = false } wasmparser = { version = "0.36.0", default-features = false }
binaryen = "0.5.0" binaryen = "0.5.0"

View File

@@ -12,11 +12,11 @@ name = "_wasmtime"
crate-type = ["cdylib"] crate-type = ["cdylib"]
[dependencies] [dependencies]
cranelift-codegen = "0.40.0" cranelift-codegen = "0.41.0"
cranelift-native = "0.40.0" cranelift-native = "0.41.0"
cranelift-entity = "0.40.0" cranelift-entity = "0.41.0"
cranelift-wasm = "0.40.0" cranelift-wasm = "0.41.0"
cranelift-frontend = "0.40.0" cranelift-frontend = "0.41.0"
wasmtime-environ = { path = "../../wasmtime-environ" } wasmtime-environ = { path = "../../wasmtime-environ" }
wasmtime-interface-types = { path = "../../wasmtime-interface-types" } wasmtime-interface-types = { path = "../../wasmtime-interface-types" }
wasmtime-jit = { path = "../../wasmtime-jit" } wasmtime-jit = { path = "../../wasmtime-jit" }

View File

@@ -12,8 +12,8 @@ test = false
doctest = false doctest = false
[dependencies] [dependencies]
cranelift-codegen = "0.40.0" cranelift-codegen = "0.41.0"
cranelift-native = "0.40.0" cranelift-native = "0.41.0"
failure = "0.1.5" failure = "0.1.5"
wasmtime-interface-types = { path = "../../wasmtime-interface-types" } wasmtime-interface-types = { path = "../../wasmtime-interface-types" }
wasmtime-jit = { path = "../../wasmtime-jit" } wasmtime-jit = { path = "../../wasmtime-jit" }

View File

@@ -12,11 +12,11 @@ name = "wasmtime_api"
crate-type = ["lib", "staticlib", "cdylib"] crate-type = ["lib", "staticlib", "cdylib"]
[dependencies] [dependencies]
cranelift-codegen = "0.40.0" cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-native = "0.40.0" cranelift-native = "0.41.0"
cranelift-entity = "0.40.0" cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = "0.40.0" cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
cranelift-frontend = "0.40.0" cranelift-frontend = "0.41.0"
wasmtime-runtime = { path="../wasmtime-runtime" } wasmtime-runtime = { path="../wasmtime-runtime" }
wasmtime-environ = { path="../wasmtime-environ" } wasmtime-environ = { path="../wasmtime-environ" }
wasmtime-jit = { path="../wasmtime-jit" } wasmtime-jit = { path="../wasmtime-jit" }

View File

@@ -254,6 +254,14 @@ impl binemit::RelocSink for RelocSink {
) { ) {
panic!("trampoline compilation should not produce external symbol relocs"); panic!("trampoline compilation should not produce external symbol relocs");
} }
fn reloc_constant(
&mut self,
_code_offset: binemit::CodeOffset,
_reloc: binemit::Reloc,
_constant_offset: ir::ConstantOffset,
) {
panic!("trampoline compilation should not produce constant relocs");
}
fn reloc_jt( fn reloc_jt(
&mut self, &mut self,
_offset: binemit::CodeOffset, _offset: binemit::CodeOffset,

View File

@@ -14,9 +14,9 @@ edition = "2018"
[dependencies] [dependencies]
gimli = "0.19.0" gimli = "0.19.0"
wasmparser = { version = "0.36.0" } wasmparser = { version = "0.36.0" }
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
faerie = "0.10.1" faerie = "0.10.1"
wasmtime-environ = { path = "../wasmtime-environ", default-features = false } wasmtime-environ = { path = "../wasmtime-environ", default-features = false }
target-lexicon = { version = "0.4.0", default-features = false } target-lexicon = { version = "0.4.0", default-features = false }

View File

@@ -12,9 +12,9 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
lightbeam = { path = "../lightbeam", optional = true } lightbeam = { path = "../lightbeam", optional = true }
failure = { version = "0.1.3", default-features = false } failure = { version = "0.1.3", default-features = false }
failure_derive = { version = "0.1.3", default-features = false } failure_derive = { version = "0.1.3", default-features = false }
@@ -35,6 +35,7 @@ tempfile = "3"
target-lexicon = { version = "0.4.0", default-features = false } target-lexicon = { version = "0.4.0", default-features = false }
pretty_env_logger = "0.3.0" pretty_env_logger = "0.3.0"
rand = { version = "0.7.0", features = ["small_rng"] } rand = { version = "0.7.0", features = ["small_rng"] }
cranelift-codegen = { version = "0.41.0", features = ["enable-serde", "all-arch"] }
[features] [features]
default = ["std"] default = ["std"]

View File

@@ -1,5 +1,5 @@
use crate::address_map::{ModuleAddressMap, ValueLabelsRanges}; use crate::address_map::{ModuleAddressMap, ValueLabelsRanges};
use crate::compilation::{CodeAndJTOffsets, Compilation, Relocations}; use crate::compilation::{Compilation, Relocations};
use crate::module::Module; use crate::module::Module;
use crate::module_environ::FunctionBodyData; use crate::module_environ::FunctionBodyData;
use core::hash::Hasher; use core::hash::Hasher;
@@ -8,10 +8,8 @@ use cranelift_entity::PrimaryMap;
use cranelift_wasm::DefinedFuncIndex; use cranelift_wasm::DefinedFuncIndex;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use log::{debug, warn}; use log::{debug, warn};
use serde::de::{self, Deserialize, Deserializer, MapAccess, SeqAccess, Visitor}; use serde::{Deserialize, Serialize};
use serde::ser::{self, Serialize, SerializeSeq, SerializeStruct, Serializer};
use sha2::{Digest, Sha256}; use sha2::{Digest, Sha256};
use std::fmt;
use std::fs; use std::fs;
use std::io; use std::io;
use std::path::PathBuf; use std::path::PathBuf;
@@ -181,7 +179,7 @@ pub struct ModuleCacheEntry {
mod_cache_path: Option<PathBuf>, mod_cache_path: Option<PathBuf>,
} }
#[derive(serde::Serialize, serde::Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
pub struct ModuleCacheData { pub struct ModuleCacheData {
compilation: Compilation, compilation: Compilation,
relocations: Relocations, relocations: Relocations,
@@ -239,7 +237,7 @@ impl ModuleCacheEntry {
None None
}; };
ModuleCacheEntry { mod_cache_path } Self { mod_cache_path }
} }
pub fn get_data(&self) -> Option<ModuleCacheData> { pub fn get_data(&self) -> Option<ModuleCacheData> {
@@ -370,175 +368,5 @@ impl Hasher for Sha256Hasher {
} }
} }
//-////////////////////////////////////////////////////////////////////
// Serialization and deserialization of type containing SecondaryMap //
//-////////////////////////////////////////////////////////////////////
enum JtOffsetsWrapper<'a> {
Ref(&'a ir::JumpTableOffsets), // for serialization
Data(ir::JumpTableOffsets), // for deserialization
}
impl Serialize for CodeAndJTOffsets {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut cajto = serializer.serialize_struct("CodeAndJTOffsets", 2)?;
cajto.serialize_field("body", &self.body)?;
cajto.serialize_field("jt_offsets", &JtOffsetsWrapper::Ref(&self.jt_offsets))?;
cajto.end()
}
}
impl<'de> Deserialize<'de> for CodeAndJTOffsets {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
#[derive(serde::Deserialize)]
#[serde(field_identifier, rename_all = "lowercase")]
enum Field {
Body,
JtOffsets,
};
struct CodeAndJTOffsetsVisitor;
impl<'de> Visitor<'de> for CodeAndJTOffsetsVisitor {
type Value = CodeAndJTOffsets;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("struct CodeAndJTOffsets")
}
fn visit_seq<V>(self, mut seq: V) -> Result<Self::Value, V::Error>
where
V: SeqAccess<'de>,
{
let body = seq
.next_element()?
.ok_or_else(|| de::Error::invalid_length(0, &self))?;
let jt_offsets = seq
.next_element()?
.ok_or_else(|| de::Error::invalid_length(1, &self))?;
match jt_offsets {
JtOffsetsWrapper::Data(jt_offsets) => Ok(CodeAndJTOffsets { body, jt_offsets }),
JtOffsetsWrapper::Ref(_) => Err(de::Error::custom(
"Received invalid variant of JtOffsetsWrapper",
)),
}
}
fn visit_map<V>(self, mut map: V) -> Result<Self::Value, V::Error>
where
V: MapAccess<'de>,
{
let mut body = None;
let mut jt_offsets = None;
while let Some(key) = map.next_key()? {
match key {
Field::Body => {
if body.is_some() {
return Err(de::Error::duplicate_field("body"));
}
body = Some(map.next_value()?);
}
Field::JtOffsets => {
if jt_offsets.is_some() {
return Err(de::Error::duplicate_field("jt_offsets"));
}
jt_offsets = Some(map.next_value()?);
}
}
}
let body = body.ok_or_else(|| de::Error::missing_field("body"))?;
let jt_offsets =
jt_offsets.ok_or_else(|| de::Error::missing_field("jt_offsets"))?;
match jt_offsets {
JtOffsetsWrapper::Data(jt_offsets) => Ok(CodeAndJTOffsets { body, jt_offsets }),
JtOffsetsWrapper::Ref(_) => Err(de::Error::custom(
"Received invalid variant of JtOffsetsWrapper",
)),
}
}
}
const FIELDS: &'static [&'static str] = &["body", "jt_offsets"];
deserializer.deserialize_struct("CodeAndJTOffsets", FIELDS, CodeAndJTOffsetsVisitor)
}
}
impl Serialize for JtOffsetsWrapper<'_> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match self {
JtOffsetsWrapper::Ref(data) => {
// TODO: bincode encodes option as "byte for Some/None" and then optionally the content
// TODO: we can actually optimize it by encoding manually bitmask, then elements
let default_val = data.get_default();
let mut seq = serializer.serialize_seq(Some(1 + data.len()))?;
seq.serialize_element(&Some(default_val))?;
for e in data.values() {
let some_e = Some(e);
seq.serialize_element(if e == default_val { &None } else { &some_e })?;
}
seq.end()
}
JtOffsetsWrapper::Data(_) => Err(ser::Error::custom(
"Received invalid variant of JtOffsetsWrapper",
)),
}
}
}
impl<'de> Deserialize<'de> for JtOffsetsWrapper<'_> {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
struct JtOffsetsWrapperVisitor;
impl<'de> Visitor<'de> for JtOffsetsWrapperVisitor {
type Value = JtOffsetsWrapper<'static>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("struct JtOffsetsWrapper")
}
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where
A: SeqAccess<'de>,
{
match seq.next_element()? {
Some(Some(default_val)) => {
let mut m = cranelift_entity::SecondaryMap::with_default(default_val);
let mut idx = 0;
while let Some(val) = seq.next_element()? {
let val: Option<_> = val; // compiler can't infer the type, and this line is needed
match ir::JumpTable::with_number(idx) {
Some(jt_idx) => m[jt_idx] = val.unwrap_or(default_val),
None => {
return Err(serde::de::Error::custom(
"Invalid JumpTable reference",
))
}
};
idx += 1;
}
Ok(JtOffsetsWrapper::Data(m))
}
_ => Err(serde::de::Error::custom("Default value required")),
}
}
}
deserializer.deserialize_seq(JtOffsetsWrapperVisitor {})
}
}
#[cfg(test)] #[cfg(test)]
mod tests; mod tests;

View File

@@ -1,8 +1,7 @@
use super::*; use super::*;
use crate::address_map::{FunctionAddressMap, InstructionAddressMap}; use crate::address_map::{FunctionAddressMap, InstructionAddressMap};
use crate::compilation::{Relocation, RelocationTarget}; use crate::compilation::{CodeAndJTOffsets, Relocation, RelocationTarget};
use crate::module::{MemoryPlan, MemoryStyle, Module}; use crate::module::{MemoryPlan, MemoryStyle, Module};
use cranelift_codegen::ir::entities::JumpTable;
use cranelift_codegen::{binemit, ir, isa, settings, ValueLocRange}; use cranelift_codegen::{binemit, ir, isa, settings, ValueLocRange};
use cranelift_entity::EntityRef; use cranelift_entity::EntityRef;
use cranelift_entity::{PrimaryMap, SecondaryMap}; use cranelift_entity::{PrimaryMap, SecondaryMap};
@@ -10,7 +9,7 @@ use cranelift_wasm::{DefinedFuncIndex, FuncIndex, Global, GlobalInit, Memory, Si
use rand::rngs::SmallRng; use rand::rngs::SmallRng;
use rand::{Rng, SeedableRng}; use rand::{Rng, SeedableRng};
use std::boxed::Box; use std::boxed::Box;
use std::cmp::{max, min}; use std::cmp::min;
use std::fs; use std::fs;
use std::str::FromStr; use std::str::FromStr;
use std::vec::Vec; use std::vec::Vec;
@@ -45,7 +44,7 @@ fn test_write_read_cache() {
code_container.resize(0x4000, 0); code_container.resize(0x4000, 0);
rng.fill(&mut code_container[..]); rng.fill(&mut code_container[..]);
let isa1 = new_isa("riscv64"); let isa1 = new_isa("riscv64-unknown-unknown");
let isa2 = new_isa("i386"); let isa2 = new_isa("i386");
let module1 = new_module(&mut rng); let module1 = new_module(&mut rng);
let module2 = new_module(&mut rng); let module2 = new_module(&mut rng);
@@ -264,64 +263,3 @@ impl ModuleCacheEntry {
&self.mod_cache_path &self.mod_cache_path
} }
} }
// cranelift's types (including SecondaryMap) doesn't implement PartialEq
impl PartialEq for ModuleCacheData {
fn eq(&self, other: &Self) -> bool {
// compilation field
if self.compilation.len() != other.compilation.len() {
return false;
}
for i in (0..self.compilation.len()).map(DefinedFuncIndex::new) {
let lhs = self.compilation.get(i);
let rhs = other.compilation.get(i);
if lhs.body != rhs.body || lhs.jt_offsets.get_default() != rhs.jt_offsets.get_default()
{
return false;
}
for j in (0..max(lhs.jt_offsets.len(), rhs.jt_offsets.len())).map(JumpTable::new) {
if lhs.jt_offsets.get(j) != rhs.jt_offsets.get(j) {
return false;
}
}
}
// relocs
{
if self.relocations.len() != other.relocations.len() {
return false;
}
let it_lhs = self.relocations.iter();
let it_rhs = other.relocations.iter();
if it_lhs.zip(it_rhs).any(|(lhs, rhs)| lhs != rhs) {
return false;
}
}
// debug symbols
{
if self.address_transforms.len() != other.address_transforms.len() {
return false;
}
let it_lhs = self.address_transforms.iter();
let it_rhs = other.address_transforms.iter();
if it_lhs.zip(it_rhs).any(|(lhs, rhs)| lhs != rhs) {
return false;
}
}
true
}
}
// binemit::Reloc doesn't implement PartialEq
impl PartialEq for Relocation {
fn eq(&self, other: &Self) -> bool {
self.reloc as u64 == other.reloc as u64
&& self.reloc_target == other.reloc_target
&& self.offset == other.offset
&& self.addend == other.addend
}
}

View File

@@ -12,7 +12,7 @@ use std::ops::Range;
use std::vec::Vec; use std::vec::Vec;
/// Compiled machine code: body and jump table offsets. /// Compiled machine code: body and jump table offsets.
#[derive(Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct CodeAndJTOffsets { pub struct CodeAndJTOffsets {
/// The function body. /// The function body.
pub body: Vec<u8>, pub body: Vec<u8>,
@@ -24,7 +24,7 @@ pub struct CodeAndJTOffsets {
type Functions = PrimaryMap<DefinedFuncIndex, CodeAndJTOffsets>; type Functions = PrimaryMap<DefinedFuncIndex, CodeAndJTOffsets>;
/// The result of compiling a WebAssembly module's functions. /// The result of compiling a WebAssembly module's functions.
#[derive(Deserialize, Serialize, Debug)] #[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
pub struct Compilation { pub struct Compilation {
/// Compiled machine code for the function bodies. /// Compiled machine code for the function bodies.
functions: Functions, functions: Functions,
@@ -95,7 +95,7 @@ impl<'a> Iterator for Iter<'a> {
} }
/// A record of a relocation to perform. /// A record of a relocation to perform.
#[derive(Serialize, Deserialize, Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct Relocation { pub struct Relocation {
/// The relocation code. /// The relocation code.
pub reloc: binemit::Reloc, pub reloc: binemit::Reloc,

View File

@@ -11,7 +11,7 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = "0.40.0" cranelift-codegen = "0.41.0"
failure = "0.1" failure = "0.1"
walrus = "0.11.0" walrus = "0.11.0"
wasmparser = "0.36.0" wasmparser = "0.36.0"

View File

@@ -11,10 +11,10 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
cranelift-frontend = "0.40.0" cranelift-frontend = "0.41.0"
wasmtime-environ = { path = "../wasmtime-environ", default-features = false } wasmtime-environ = { path = "../wasmtime-environ", default-features = false }
wasmtime-runtime = { path = "../wasmtime-runtime", default-features = false } wasmtime-runtime = { path = "../wasmtime-runtime", default-features = false }
wasmtime-debug = { path = "../wasmtime-debug", default-features = false } wasmtime-debug = { path = "../wasmtime-debug", default-features = false }

View File

@@ -11,8 +11,8 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
wasmtime-environ = { path = "../wasmtime-environ" } wasmtime-environ = { path = "../wasmtime-environ" }
faerie = "0.10.1" faerie = "0.10.1"

View File

@@ -11,9 +11,9 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
wasmtime-environ = { path = "../wasmtime-environ", default-features = false } wasmtime-environ = { path = "../wasmtime-environ", default-features = false }
region = "2.0.0" region = "2.0.0"
lazy_static = "1.2.0" lazy_static = "1.2.0"

View File

@@ -12,9 +12,9 @@ readme = "README.md"
wasmtime-runtime = { path = "../wasmtime-runtime" } wasmtime-runtime = { path = "../wasmtime-runtime" }
wasmtime-environ = { path = "../wasmtime-environ" } wasmtime-environ = { path = "../wasmtime-environ" }
wasmtime-jit = { path = "../wasmtime-jit" } wasmtime-jit = { path = "../wasmtime-jit" }
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
target-lexicon = "0.4.0" target-lexicon = "0.4.0"
log = { version = "0.4.8", default-features = false } log = { version = "0.4.8", default-features = false }
libc = "0.2.60" libc = "0.2.60"

View File

@@ -13,9 +13,9 @@ wasmtime-runtime = { path = "../wasmtime-runtime" }
wasmtime-environ = { path = "../wasmtime-environ" } wasmtime-environ = { path = "../wasmtime-environ" }
wasmtime-jit = { path = "../wasmtime-jit" } wasmtime-jit = { path = "../wasmtime-jit" }
wasi-common = { git = "https://github.com/CraneStation/wasi-common", rev = "8ea7a983d8b1364e5f62d2adf0e74b3b8db1c9b3"} wasi-common = { git = "https://github.com/CraneStation/wasi-common", rev = "8ea7a983d8b1364e5f62d2adf0e74b3b8db1c9b3"}
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
target-lexicon = "0.4.0" target-lexicon = "0.4.0"
log = { version = "0.4.8", default-features = false } log = { version = "0.4.8", default-features = false }

View File

@@ -11,9 +11,9 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] } cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] } cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] } cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
wasmtime-jit = { path = "../wasmtime-jit" } wasmtime-jit = { path = "../wasmtime-jit" }
wasmtime-runtime = { path = "../wasmtime-runtime" } wasmtime-runtime = { path = "../wasmtime-runtime" }
wasmtime-environ = { path = "../wasmtime-environ" } wasmtime-environ = { path = "../wasmtime-environ" }