Refactor usage of SecondaryMap impls (serde, PartialEq)
This commit is contained in:
@@ -11,10 +11,10 @@ edition = "2018"
|
||||
default-run = "wasmtime"
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-native = "0.40.0"
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-native = "0.41.0"
|
||||
wasmtime-api = { path = "wasmtime-api" }
|
||||
wasmtime-debug = { path = "wasmtime-debug" }
|
||||
wasmtime-environ = { path = "wasmtime-environ" }
|
||||
|
||||
@@ -9,7 +9,7 @@ topdir=$(dirname "$0")
|
||||
cd "$topdir"
|
||||
|
||||
# All the cranelift-* crates have the same version number
|
||||
version="0.38.0"
|
||||
version="0.41.0"
|
||||
|
||||
# Update all of the Cargo.toml files.
|
||||
echo "Updating crate versions to $version"
|
||||
|
||||
@@ -11,9 +11,9 @@ cargo-fuzz = true
|
||||
[dependencies]
|
||||
wasmtime-environ = { path = "../wasmtime-environ" }
|
||||
wasmtime-jit = { path = "../wasmtime-jit" }
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-native = "0.40.0"
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-native = "0.41.0"
|
||||
libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer-sys.git" }
|
||||
wasmparser = { version = "0.36.0", default-features = false }
|
||||
binaryen = "0.5.0"
|
||||
|
||||
@@ -12,11 +12,11 @@ name = "_wasmtime"
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = "0.40.0"
|
||||
cranelift-native = "0.40.0"
|
||||
cranelift-entity = "0.40.0"
|
||||
cranelift-wasm = "0.40.0"
|
||||
cranelift-frontend = "0.40.0"
|
||||
cranelift-codegen = "0.41.0"
|
||||
cranelift-native = "0.41.0"
|
||||
cranelift-entity = "0.41.0"
|
||||
cranelift-wasm = "0.41.0"
|
||||
cranelift-frontend = "0.41.0"
|
||||
wasmtime-environ = { path = "../../wasmtime-environ" }
|
||||
wasmtime-interface-types = { path = "../../wasmtime-interface-types" }
|
||||
wasmtime-jit = { path = "../../wasmtime-jit" }
|
||||
|
||||
@@ -12,8 +12,8 @@ test = false
|
||||
doctest = false
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = "0.40.0"
|
||||
cranelift-native = "0.40.0"
|
||||
cranelift-codegen = "0.41.0"
|
||||
cranelift-native = "0.41.0"
|
||||
failure = "0.1.5"
|
||||
wasmtime-interface-types = { path = "../../wasmtime-interface-types" }
|
||||
wasmtime-jit = { path = "../../wasmtime-jit" }
|
||||
|
||||
@@ -12,11 +12,11 @@ name = "wasmtime_api"
|
||||
crate-type = ["lib", "staticlib", "cdylib"]
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = "0.40.0"
|
||||
cranelift-native = "0.40.0"
|
||||
cranelift-entity = "0.40.0"
|
||||
cranelift-wasm = "0.40.0"
|
||||
cranelift-frontend = "0.40.0"
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-native = "0.41.0"
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-frontend = "0.41.0"
|
||||
wasmtime-runtime = { path="../wasmtime-runtime" }
|
||||
wasmtime-environ = { path="../wasmtime-environ" }
|
||||
wasmtime-jit = { path="../wasmtime-jit" }
|
||||
|
||||
@@ -254,6 +254,14 @@ impl binemit::RelocSink for RelocSink {
|
||||
) {
|
||||
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(
|
||||
&mut self,
|
||||
_offset: binemit::CodeOffset,
|
||||
|
||||
@@ -14,9 +14,9 @@ edition = "2018"
|
||||
[dependencies]
|
||||
gimli = "0.19.0"
|
||||
wasmparser = { version = "0.36.0" }
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
faerie = "0.10.1"
|
||||
wasmtime-environ = { path = "../wasmtime-environ", default-features = false }
|
||||
target-lexicon = { version = "0.4.0", default-features = false }
|
||||
|
||||
@@ -12,9 +12,9 @@ readme = "README.md"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
lightbeam = { path = "../lightbeam", optional = true }
|
||||
failure = { 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 }
|
||||
pretty_env_logger = "0.3.0"
|
||||
rand = { version = "0.7.0", features = ["small_rng"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde", "all-arch"] }
|
||||
|
||||
[features]
|
||||
default = ["std"]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::address_map::{ModuleAddressMap, ValueLabelsRanges};
|
||||
use crate::compilation::{CodeAndJTOffsets, Compilation, Relocations};
|
||||
use crate::compilation::{Compilation, Relocations};
|
||||
use crate::module::Module;
|
||||
use crate::module_environ::FunctionBodyData;
|
||||
use core::hash::Hasher;
|
||||
@@ -8,10 +8,8 @@ use cranelift_entity::PrimaryMap;
|
||||
use cranelift_wasm::DefinedFuncIndex;
|
||||
use lazy_static::lazy_static;
|
||||
use log::{debug, warn};
|
||||
use serde::de::{self, Deserialize, Deserializer, MapAccess, SeqAccess, Visitor};
|
||||
use serde::ser::{self, Serialize, SerializeSeq, SerializeStruct, Serializer};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sha2::{Digest, Sha256};
|
||||
use std::fmt;
|
||||
use std::fs;
|
||||
use std::io;
|
||||
use std::path::PathBuf;
|
||||
@@ -181,7 +179,7 @@ pub struct ModuleCacheEntry {
|
||||
mod_cache_path: Option<PathBuf>,
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize, Debug)]
|
||||
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
|
||||
pub struct ModuleCacheData {
|
||||
compilation: Compilation,
|
||||
relocations: Relocations,
|
||||
@@ -239,7 +237,7 @@ impl ModuleCacheEntry {
|
||||
None
|
||||
};
|
||||
|
||||
ModuleCacheEntry { mod_cache_path }
|
||||
Self { mod_cache_path }
|
||||
}
|
||||
|
||||
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)]
|
||||
mod tests;
|
||||
|
||||
68
wasmtime-environ/src/cache/tests.rs
vendored
68
wasmtime-environ/src/cache/tests.rs
vendored
@@ -1,8 +1,7 @@
|
||||
use super::*;
|
||||
use crate::address_map::{FunctionAddressMap, InstructionAddressMap};
|
||||
use crate::compilation::{Relocation, RelocationTarget};
|
||||
use crate::compilation::{CodeAndJTOffsets, Relocation, RelocationTarget};
|
||||
use crate::module::{MemoryPlan, MemoryStyle, Module};
|
||||
use cranelift_codegen::ir::entities::JumpTable;
|
||||
use cranelift_codegen::{binemit, ir, isa, settings, ValueLocRange};
|
||||
use cranelift_entity::EntityRef;
|
||||
use cranelift_entity::{PrimaryMap, SecondaryMap};
|
||||
@@ -10,7 +9,7 @@ use cranelift_wasm::{DefinedFuncIndex, FuncIndex, Global, GlobalInit, Memory, Si
|
||||
use rand::rngs::SmallRng;
|
||||
use rand::{Rng, SeedableRng};
|
||||
use std::boxed::Box;
|
||||
use std::cmp::{max, min};
|
||||
use std::cmp::min;
|
||||
use std::fs;
|
||||
use std::str::FromStr;
|
||||
use std::vec::Vec;
|
||||
@@ -45,7 +44,7 @@ fn test_write_read_cache() {
|
||||
code_container.resize(0x4000, 0);
|
||||
rng.fill(&mut code_container[..]);
|
||||
|
||||
let isa1 = new_isa("riscv64");
|
||||
let isa1 = new_isa("riscv64-unknown-unknown");
|
||||
let isa2 = new_isa("i386");
|
||||
let module1 = new_module(&mut rng);
|
||||
let module2 = new_module(&mut rng);
|
||||
@@ -264,64 +263,3 @@ impl ModuleCacheEntry {
|
||||
&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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ use std::ops::Range;
|
||||
use std::vec::Vec;
|
||||
|
||||
/// Compiled machine code: body and jump table offsets.
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
pub struct CodeAndJTOffsets {
|
||||
/// The function body.
|
||||
pub body: Vec<u8>,
|
||||
@@ -24,7 +24,7 @@ pub struct CodeAndJTOffsets {
|
||||
type Functions = PrimaryMap<DefinedFuncIndex, CodeAndJTOffsets>;
|
||||
|
||||
/// The result of compiling a WebAssembly module's functions.
|
||||
#[derive(Deserialize, Serialize, Debug)]
|
||||
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
|
||||
pub struct Compilation {
|
||||
/// Compiled machine code for the function bodies.
|
||||
functions: Functions,
|
||||
@@ -95,7 +95,7 @@ impl<'a> Iterator for Iter<'a> {
|
||||
}
|
||||
|
||||
/// A record of a relocation to perform.
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
pub struct Relocation {
|
||||
/// The relocation code.
|
||||
pub reloc: binemit::Reloc,
|
||||
|
||||
@@ -11,7 +11,7 @@ readme = "README.md"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = "0.40.0"
|
||||
cranelift-codegen = "0.41.0"
|
||||
failure = "0.1"
|
||||
walrus = "0.11.0"
|
||||
wasmparser = "0.36.0"
|
||||
|
||||
@@ -11,10 +11,10 @@ readme = "README.md"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-frontend = "0.40.0"
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-frontend = "0.41.0"
|
||||
wasmtime-environ = { path = "../wasmtime-environ", default-features = false }
|
||||
wasmtime-runtime = { path = "../wasmtime-runtime", default-features = false }
|
||||
wasmtime-debug = { path = "../wasmtime-debug", default-features = false }
|
||||
|
||||
@@ -11,8 +11,8 @@ readme = "README.md"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
wasmtime-environ = { path = "../wasmtime-environ" }
|
||||
faerie = "0.10.1"
|
||||
|
||||
@@ -11,9 +11,9 @@ readme = "README.md"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
wasmtime-environ = { path = "../wasmtime-environ", default-features = false }
|
||||
region = "2.0.0"
|
||||
lazy_static = "1.2.0"
|
||||
|
||||
@@ -12,9 +12,9 @@ readme = "README.md"
|
||||
wasmtime-runtime = { path = "../wasmtime-runtime" }
|
||||
wasmtime-environ = { path = "../wasmtime-environ" }
|
||||
wasmtime-jit = { path = "../wasmtime-jit" }
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
target-lexicon = "0.4.0"
|
||||
log = { version = "0.4.8", default-features = false }
|
||||
libc = "0.2.60"
|
||||
|
||||
@@ -13,9 +13,9 @@ wasmtime-runtime = { path = "../wasmtime-runtime" }
|
||||
wasmtime-environ = { path = "../wasmtime-environ" }
|
||||
wasmtime-jit = { path = "../wasmtime-jit" }
|
||||
wasi-common = { git = "https://github.com/CraneStation/wasi-common", rev = "8ea7a983d8b1364e5f62d2adf0e74b3b8db1c9b3"}
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
target-lexicon = "0.4.0"
|
||||
log = { version = "0.4.8", default-features = false }
|
||||
|
||||
|
||||
@@ -11,9 +11,9 @@ readme = "README.md"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
cranelift-codegen = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.40.0", features = ["enable-serde"] }
|
||||
cranelift-codegen = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-entity = { version = "0.41.0", features = ["enable-serde"] }
|
||||
cranelift-wasm = { version = "0.41.0", features = ["enable-serde"] }
|
||||
wasmtime-jit = { path = "../wasmtime-jit" }
|
||||
wasmtime-runtime = { path = "../wasmtime-runtime" }
|
||||
wasmtime-environ = { path = "../wasmtime-environ" }
|
||||
|
||||
Reference in New Issue
Block a user