mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-25 22:51:32 +00:00
Disable memory bound checking for kernel loader.
This commit is contained in:
@ -39,12 +39,25 @@ impl Token {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug)]
|
||||||
|
pub enum MemoryBoundCheckMode {
|
||||||
|
Default,
|
||||||
|
Enable,
|
||||||
|
Disable,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for MemoryBoundCheckMode {
|
||||||
|
fn default() -> MemoryBoundCheckMode {
|
||||||
|
MemoryBoundCheckMode::Default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Configuration data for the compiler
|
/// Configuration data for the compiler
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct CompilerConfig {
|
pub struct CompilerConfig {
|
||||||
/// Symbol information generated from emscripten; used for more detailed debug messages
|
/// Symbol information generated from emscripten; used for more detailed debug messages
|
||||||
pub symbol_map: Option<HashMap<u32, String>>,
|
pub symbol_map: Option<HashMap<u32, String>>,
|
||||||
pub enforce_memory_bound_check: bool,
|
pub memory_bound_check_mode: MemoryBoundCheckMode,
|
||||||
pub enforce_stack_check: bool,
|
pub enforce_stack_check: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ use smallvec::SmallVec;
|
|||||||
use std::ptr::NonNull;
|
use std::ptr::NonNull;
|
||||||
use std::{any::Any, collections::HashMap, sync::Arc};
|
use std::{any::Any, collections::HashMap, sync::Arc};
|
||||||
use wasmer_runtime_core::{
|
use wasmer_runtime_core::{
|
||||||
backend::{Backend, RunnableModule, CompilerConfig},
|
backend::{Backend, RunnableModule, CompilerConfig, MemoryBoundCheckMode},
|
||||||
codegen::*,
|
codegen::*,
|
||||||
memory::MemoryType,
|
memory::MemoryType,
|
||||||
module::ModuleInfo,
|
module::ModuleInfo,
|
||||||
@ -290,7 +290,7 @@ pub struct CodegenError {
|
|||||||
|
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
struct CodegenConfig {
|
struct CodegenConfig {
|
||||||
enforce_memory_bound_check: bool,
|
memory_bound_check_mode: MemoryBoundCheckMode,
|
||||||
enforce_stack_check: bool,
|
enforce_stack_check: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,7 +475,7 @@ impl ModuleCodeGenerator<X64FunctionCode, X64ExecutionContext, CodegenError>
|
|||||||
|
|
||||||
fn feed_compiler_config(&mut self, config: &CompilerConfig) -> Result<(), CodegenError> {
|
fn feed_compiler_config(&mut self, config: &CompilerConfig) -> Result<(), CodegenError> {
|
||||||
self.config = Some(Arc::new(CodegenConfig {
|
self.config = Some(Arc::new(CodegenConfig {
|
||||||
enforce_memory_bound_check: config.enforce_memory_bound_check,
|
memory_bound_check_mode: config.memory_bound_check_mode,
|
||||||
enforce_stack_check: config.enforce_stack_check,
|
enforce_stack_check: config.enforce_stack_check,
|
||||||
}));
|
}));
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -1243,13 +1243,13 @@ impl X64FunctionCode {
|
|||||||
&module_info.imported_memories[import_mem_index].1
|
&module_info.imported_memories[import_mem_index].1
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let need_check = if config.enforce_memory_bound_check {
|
let need_check = match config.memory_bound_check_mode {
|
||||||
true
|
MemoryBoundCheckMode::Default => match mem_desc.memory_type() {
|
||||||
} else {
|
|
||||||
match mem_desc.memory_type() {
|
|
||||||
MemoryType::Dynamic => true,
|
MemoryType::Dynamic => true,
|
||||||
MemoryType::Static | MemoryType::SharedStatic => false,
|
MemoryType::Static | MemoryType::SharedStatic => false,
|
||||||
}
|
},
|
||||||
|
MemoryBoundCheckMode::Enable => true,
|
||||||
|
MemoryBoundCheckMode::Disable => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
if need_check {
|
if need_check {
|
||||||
|
@ -10,7 +10,7 @@ use wasmer_runtime::{
|
|||||||
};
|
};
|
||||||
use wasmer_runtime_core::{
|
use wasmer_runtime_core::{
|
||||||
self,
|
self,
|
||||||
backend::{Compiler, CompilerConfig},
|
backend::{Compiler, CompilerConfig, MemoryBoundCheckMode},
|
||||||
loader::{self, Loader, Instance as LoadedInstance, LocalLoader},
|
loader::{self, Loader, Instance as LoadedInstance, LocalLoader},
|
||||||
};
|
};
|
||||||
use wasmer_singlepass_backend::SinglePassCompiler;
|
use wasmer_singlepass_backend::SinglePassCompiler;
|
||||||
@ -50,7 +50,7 @@ fn handle_client(mut stream: UnixStream) {
|
|||||||
&wasm_binary[..],
|
&wasm_binary[..],
|
||||||
CompilerConfig {
|
CompilerConfig {
|
||||||
symbol_map: None,
|
symbol_map: None,
|
||||||
enforce_memory_bound_check: true,
|
memory_bound_check_mode: MemoryBoundCheckMode::Disable,
|
||||||
enforce_stack_check: true,
|
enforce_stack_check: true,
|
||||||
},
|
},
|
||||||
&SinglePassCompiler::new(),
|
&SinglePassCompiler::new(),
|
||||||
|
@ -22,7 +22,7 @@ use wasmer_runtime::{
|
|||||||
};
|
};
|
||||||
use wasmer_runtime_core::{
|
use wasmer_runtime_core::{
|
||||||
self,
|
self,
|
||||||
backend::{Compiler, CompilerConfig},
|
backend::{Compiler, CompilerConfig, MemoryBoundCheckMode},
|
||||||
loader::{self, Loader, Instance as LoadedInstance, LocalLoader},
|
loader::{self, Loader, Instance as LoadedInstance, LocalLoader},
|
||||||
};
|
};
|
||||||
#[cfg(feature = "backend:singlepass")]
|
#[cfg(feature = "backend:singlepass")]
|
||||||
@ -298,7 +298,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> {
|
|||||||
&wasm_binary[..],
|
&wasm_binary[..],
|
||||||
CompilerConfig {
|
CompilerConfig {
|
||||||
symbol_map: em_symbol_map,
|
symbol_map: em_symbol_map,
|
||||||
enforce_memory_bound_check: true,
|
memory_bound_check_mode: MemoryBoundCheckMode::Disable,
|
||||||
enforce_stack_check: true,
|
enforce_stack_check: true,
|
||||||
},
|
},
|
||||||
&*compiler,
|
&*compiler,
|
||||||
@ -368,7 +368,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> {
|
|||||||
.map(|arg| arg.as_str())
|
.map(|arg| arg.as_str())
|
||||||
.map(|x| Value::I32(x.parse().unwrap()))
|
.map(|x| Value::I32(x.parse().unwrap()))
|
||||||
.collect();
|
.collect();
|
||||||
let index = instance.resolve_local_func("main").unwrap();
|
let index = instance.resolve_func("_start").unwrap();
|
||||||
let mut ins: Box<LoadedInstance<Error = String>> = match loader {
|
let mut ins: Box<LoadedInstance<Error = String>> = match loader {
|
||||||
LoaderName::Local => Box::new(instance.load(LocalLoader).unwrap()),
|
LoaderName::Local => Box::new(instance.load(LocalLoader).unwrap()),
|
||||||
LoaderName::Kernel => Box::new(instance.load(::kwasm_loader::KernelLoader).unwrap()),
|
LoaderName::Kernel => Box::new(instance.load(::kwasm_loader::KernelLoader).unwrap()),
|
||||||
|
Reference in New Issue
Block a user