Make it work under no_std
This commit is contained in:
parent
379e960c94
commit
321f0b765c
26
Cargo.toml
26
Cargo.toml
|
@ -10,17 +10,6 @@ description = "WebAssembly interpreter"
|
||||||
keywords = ["wasm", "webassembly", "bytecode", "interpreter"]
|
keywords = ["wasm", "webassembly", "bytecode", "interpreter"]
|
||||||
exclude = [ "/res/*", "/tests/*", "/fuzz/*", "/benches/*" ]
|
exclude = [ "/res/*", "/tests/*", "/fuzz/*", "/benches/*" ]
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["std"]
|
|
||||||
# Disable for no_std support
|
|
||||||
std = [
|
|
||||||
"parity-wasm/std",
|
|
||||||
"wasmi-validation/std",
|
|
||||||
]
|
|
||||||
# Enable for no_std support
|
|
||||||
# hashbrown only works on no_std
|
|
||||||
core = ["hashbrown/nightly", "libm"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasmi-validation = { path = "validation", default-features = false }
|
wasmi-validation = { path = "validation", default-features = false }
|
||||||
parity-wasm = { version = "0.31", default-features = false }
|
parity-wasm = { version = "0.31", default-features = false }
|
||||||
|
@ -33,5 +22,20 @@ assert_matches = "1.1"
|
||||||
rand = "0.4.2"
|
rand = "0.4.2"
|
||||||
wabt = "0.6"
|
wabt = "0.6"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["std"]
|
||||||
|
# Disable for no_std support
|
||||||
|
std = [
|
||||||
|
"parity-wasm/std",
|
||||||
|
"wasmi-validation/std",
|
||||||
|
]
|
||||||
|
# Enable for no_std support
|
||||||
|
# hashbrown only works on no_std
|
||||||
|
core = [
|
||||||
|
"wasmi-validation/core",
|
||||||
|
"hashbrown/nightly",
|
||||||
|
"libm"
|
||||||
|
]
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
members = ["validation"]
|
members = ["validation"]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use alloc::rc::{Rc, Weak};
|
use alloc::rc::{Rc, Weak};
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
use host::Externals;
|
use host::Externals;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
|
|
||||||
#[cfg(not(feature = "std"))]
|
#[cfg(not(feature = "std"))]
|
||||||
use hashbrown::HashMap;
|
use hashbrown::HashMap;
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
//!
|
//!
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
|
|
||||||
/// Should we keep a value before "discarding" a stack frame?
|
/// Should we keep a value before "discarding" a stack frame?
|
||||||
///
|
///
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
#![warn(missing_docs)]
|
#![warn(missing_docs)]
|
||||||
#![cfg_attr(not(feature = "std"), no_std)]
|
#![cfg_attr(not(feature = "std"), no_std)]
|
||||||
//// alloc is required in no_std
|
//// alloc is required in no_std
|
||||||
#![cfg_attr(not(feature = "std"), feature(alloc))]
|
#![cfg_attr(not(feature = "std"), feature(alloc, alloc_prelude))]
|
||||||
|
|
||||||
#[cfg(not(feature = "std"))]
|
#[cfg(not(feature = "std"))]
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
@ -123,7 +123,7 @@ extern crate parity_wasm;
|
||||||
extern crate wasmi_validation as validation;
|
extern crate wasmi_validation as validation;
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
use std::error;
|
use std::error;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use alloc::rc::Rc;
|
use alloc::rc::Rc;
|
||||||
use core::cell::{Cell, RefCell};
|
use core::cell::{Cell, RefCell};
|
||||||
use core::cmp;
|
use core::cmp;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use alloc::rc::Rc;
|
use alloc::rc::Rc;
|
||||||
use core::cell::RefCell;
|
use core::cell::RefCell;
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
#[allow(unused_imports)]
|
||||||
|
use alloc::prelude::v1::*;
|
||||||
|
|
||||||
use parity_wasm::elements::{BlockType, Instruction};
|
use parity_wasm::elements::{BlockType, Instruction};
|
||||||
|
|
||||||
use validation::func::{
|
use validation::func::{
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
#[allow(unused_imports)]
|
||||||
|
use alloc::prelude::v1::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
isa,
|
isa,
|
||||||
validation::{validate_module2, Error, Validation},
|
validation::{validate_module2, Error, Validation},
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
use core::ops;
|
use core::ops;
|
||||||
use core::{u32, usize};
|
use core::{u32, usize};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use alloc::rc::Rc;
|
use alloc::rc::Rc;
|
||||||
use core::cell::RefCell;
|
use core::cell::RefCell;
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
|
|
|
@ -7,7 +7,11 @@ edition = "2018"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
parity-wasm = { version = "0.31", default-features = false }
|
parity-wasm = { version = "0.31", default-features = false }
|
||||||
memory_units_crate = { package = "memory_units", version = "0.3.0" }
|
memory_units_crate = { package = "memory_units", version = "0.3.0" }
|
||||||
|
hashbrown = { version = "0.1.8", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["std"]
|
default = ["std"]
|
||||||
std = ["parity-wasm/std"]
|
std = ["parity-wasm/std"]
|
||||||
|
core = [
|
||||||
|
"hashbrown/nightly"
|
||||||
|
]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::Error;
|
use crate::Error;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use parity_wasm::elements::{
|
use parity_wasm::elements::{
|
||||||
BlockType, FunctionType, GlobalType, MemoryType, TableType, ValueType,
|
BlockType, FunctionType, GlobalType, MemoryType, TableType, ValueType,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
context::ModuleContext, stack::StackWithLimit, util::Locals, Error, FunctionValidator,
|
context::ModuleContext, stack::StackWithLimit, util::Locals, Error, FunctionValidator,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#![cfg_attr(not(feature = "std"), no_std)]
|
#![cfg_attr(not(feature = "std"), no_std)]
|
||||||
//// alloc is required in no_std
|
//// alloc is required in no_std
|
||||||
#![cfg_attr(not(feature = "std"), feature(alloc))]
|
#![cfg_attr(not(feature = "std"), feature(alloc, alloc_prelude))]
|
||||||
|
|
||||||
#[cfg(not(feature = "std"))]
|
#[cfg(not(feature = "std"))]
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
@ -22,7 +22,7 @@ pub const DEFAULT_TABLE_INDEX: u32 = 0;
|
||||||
pub const LINEAR_MEMORY_MAX_PAGES: Pages = Pages(65536);
|
pub const LINEAR_MEMORY_MAX_PAGES: Pages = Pages(65536);
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
use std::error;
|
use std::error;
|
||||||
|
@ -167,8 +167,6 @@ pub fn deny_floating_point(module: &Module) -> Result<(), Error> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let (Some(sec), Some(types)) = (module.function_section(), module.type_section()) {
|
if let (Some(sec), Some(types)) = (module.function_section(), module.type_section()) {
|
||||||
use parity_wasm::elements::{Type, ValueType};
|
|
||||||
|
|
||||||
let types = types.types();
|
let types = types.types();
|
||||||
|
|
||||||
for sig in sec.entries() {
|
for sig in sec.entries() {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
|
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::Error;
|
use crate::Error;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use alloc::prelude::*;
|
use alloc::prelude::v1::*;
|
||||||
use parity_wasm::elements::{Local, ValueType};
|
use parity_wasm::elements::{Local, ValueType};
|
||||||
|
|
||||||
/// Locals are the concatenation of a slice of function parameters
|
/// Locals are the concatenation of a slice of function parameters
|
||||||
|
|
Loading…
Reference in New Issue