mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-12 08:31:21 +00:00
Cargo fmt
This commit is contained in:
@ -91,8 +91,12 @@ pub trait RunnableModule: Send + Sync {
|
||||
|
||||
unsafe fn do_early_trap(&self, data: Box<dyn Any>) -> !;
|
||||
|
||||
fn get_code(&self) -> Option<&[u8]> { None }
|
||||
fn get_offsets(&self) -> Option<Vec<usize>> { None }
|
||||
fn get_code(&self) -> Option<&[u8]> {
|
||||
None
|
||||
}
|
||||
fn get_offsets(&self) -> Option<Vec<usize>> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub trait CacheGen: Send + Sync {
|
||||
|
@ -57,7 +57,9 @@ pub trait ModuleCodeGenerator<FCG: FunctionCodeGenerator<E>, RM: RunnableModule,
|
||||
/// Adds an import function.
|
||||
fn feed_import_function(&mut self) -> Result<(), E>;
|
||||
|
||||
fn feed_compiler_config(&mut self, _config: &CompilerConfig) -> Result<(), E> { Ok(()) }
|
||||
fn feed_compiler_config(&mut self, _config: &CompilerConfig) -> Result<(), E> {
|
||||
Ok(())
|
||||
}
|
||||
unsafe fn from_cache(cache: Artifact, _: Token) -> Result<ModuleInner, CacheError>;
|
||||
}
|
||||
|
||||
|
@ -5,15 +5,15 @@ use crate::{
|
||||
export::{Context, Export, ExportIter, FuncPointer},
|
||||
global::Global,
|
||||
import::{ImportObject, LikeNamespace},
|
||||
loader::Loader,
|
||||
memory::Memory,
|
||||
module::{ExportIndex, Module, ModuleInfo, ModuleInner},
|
||||
sig_registry::SigRegistry,
|
||||
structures::TypedIndex,
|
||||
table::Table,
|
||||
typed_func::{Func, Wasm, WasmTrapInfo, WasmTypeList},
|
||||
types::{FuncIndex, FuncSig, GlobalIndex, LocalOrImport, MemoryIndex, TableIndex, Type, Value},
|
||||
vm,
|
||||
loader::Loader,
|
||||
structures::TypedIndex,
|
||||
};
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
use std::{mem, ptr::NonNull, sync::Arc};
|
||||
@ -130,7 +130,9 @@ impl Instance {
|
||||
}
|
||||
|
||||
pub fn load<T: Loader>(&self, loader: T) -> ::std::result::Result<T::Instance, T::Error> {
|
||||
loader.load(&*self.module.runnable_module, &self.module.info, unsafe { &*self.inner.vmctx })
|
||||
loader.load(&*self.module.runnable_module, &self.module.info, unsafe {
|
||||
&*self.inner.vmctx
|
||||
})
|
||||
}
|
||||
|
||||
/// Through generic magic and the awe-inspiring power of traits, we bring you...
|
||||
|
@ -21,6 +21,7 @@ pub mod export;
|
||||
pub mod global;
|
||||
pub mod import;
|
||||
pub mod instance;
|
||||
pub mod loader;
|
||||
pub mod memory;
|
||||
pub mod module;
|
||||
pub mod parse;
|
||||
@ -34,7 +35,6 @@ pub mod units;
|
||||
pub mod vm;
|
||||
#[doc(hidden)]
|
||||
pub mod vmcalls;
|
||||
pub mod loader;
|
||||
|
||||
use self::error::CompileResult;
|
||||
#[doc(inline)]
|
||||
|
@ -1,24 +1,21 @@
|
||||
use crate::{backend::RunnableModule, module::ModuleInfo, types::Value, vm::Ctx};
|
||||
#[cfg(unix)]
|
||||
use libc::{mmap, mprotect, munmap, MAP_ANON, MAP_PRIVATE, PROT_EXEC, PROT_READ, PROT_WRITE};
|
||||
use std::{
|
||||
fmt::Debug,
|
||||
ops::{Deref, DerefMut},
|
||||
};
|
||||
use crate::{
|
||||
backend::RunnableModule,
|
||||
vm::Ctx,
|
||||
module::ModuleInfo,
|
||||
types::Value,
|
||||
};
|
||||
#[cfg(unix)]
|
||||
use libc::{
|
||||
mmap, mprotect, munmap, MAP_ANON, MAP_PRIVATE, PROT_EXEC, PROT_READ,
|
||||
PROT_WRITE,
|
||||
};
|
||||
|
||||
pub trait Loader {
|
||||
type Instance: Instance;
|
||||
type Error: Debug;
|
||||
|
||||
fn load(&self, rm: &dyn RunnableModule, module: &ModuleInfo, ctx: &Ctx) -> Result<Self::Instance, Self::Error>;
|
||||
fn load(
|
||||
&self,
|
||||
rm: &dyn RunnableModule,
|
||||
module: &ModuleInfo,
|
||||
ctx: &Ctx,
|
||||
) -> Result<Self::Instance, Self::Error>;
|
||||
}
|
||||
|
||||
pub trait Instance {
|
||||
@ -39,7 +36,12 @@ impl Loader for LocalLoader {
|
||||
type Instance = LocalInstance;
|
||||
type Error = String;
|
||||
|
||||
fn load(&self, rm: &dyn RunnableModule, _module: &ModuleInfo, _ctx: &Ctx) -> Result<Self::Instance, Self::Error> {
|
||||
fn load(
|
||||
&self,
|
||||
rm: &dyn RunnableModule,
|
||||
_module: &ModuleInfo,
|
||||
_ctx: &Ctx,
|
||||
) -> Result<Self::Instance, Self::Error> {
|
||||
let code = rm.get_code().unwrap();
|
||||
let mut code_mem = CodeMemory::new(code.len());
|
||||
code_mem[..code.len()].copy_from_slice(code);
|
||||
@ -67,11 +69,29 @@ impl Instance for LocalInstance {
|
||||
match args.len() {
|
||||
0 => (transmute::<_, extern "C" fn() -> u64>(addr))(),
|
||||
1 => (transmute::<_, extern "C" fn(u64) -> u64>(addr))(args[0].to_u64()),
|
||||
2 => (transmute::<_, extern "C" fn(u64, u64) -> u64>(addr))(args[0].to_u64(), args[1].to_u64()),
|
||||
3 => (transmute::<_, extern "C" fn(u64, u64, u64) -> u64>(addr))(args[0].to_u64(), args[1].to_u64(), args[2].to_u64()),
|
||||
4 => (transmute::<_, extern "C" fn(u64, u64, u64, u64) -> u64>(addr))(args[0].to_u64(), args[1].to_u64(), args[2].to_u64(), args[3].to_u64()),
|
||||
5 => (transmute::<_, extern "C" fn(u64, u64, u64, u64, u64) -> u64>(addr))(args[0].to_u64(), args[1].to_u64(), args[2].to_u64(), args[3].to_u64(), args[4].to_u64()),
|
||||
_ => return Err("too many arguments".into())
|
||||
2 => (transmute::<_, extern "C" fn(u64, u64) -> u64>(addr))(
|
||||
args[0].to_u64(),
|
||||
args[1].to_u64(),
|
||||
),
|
||||
3 => (transmute::<_, extern "C" fn(u64, u64, u64) -> u64>(addr))(
|
||||
args[0].to_u64(),
|
||||
args[1].to_u64(),
|
||||
args[2].to_u64(),
|
||||
),
|
||||
4 => (transmute::<_, extern "C" fn(u64, u64, u64, u64) -> u64>(addr))(
|
||||
args[0].to_u64(),
|
||||
args[1].to_u64(),
|
||||
args[2].to_u64(),
|
||||
args[3].to_u64(),
|
||||
),
|
||||
5 => (transmute::<_, extern "C" fn(u64, u64, u64, u64, u64) -> u64>(addr))(
|
||||
args[0].to_u64(),
|
||||
args[1].to_u64(),
|
||||
args[2].to_u64(),
|
||||
args[3].to_u64(),
|
||||
args[4].to_u64(),
|
||||
),
|
||||
_ => return Err("too many arguments".into()),
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -129,23 +149,21 @@ impl CodeMemory {
|
||||
#[cfg(unix)]
|
||||
impl Drop for CodeMemory {
|
||||
fn drop(&mut self) {
|
||||
unsafe { munmap(self.ptr as _, self.size); }
|
||||
unsafe {
|
||||
munmap(self.ptr as _, self.size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for CodeMemory {
|
||||
type Target = [u8];
|
||||
fn deref(&self) -> &[u8] {
|
||||
unsafe {
|
||||
::std::slice::from_raw_parts(self.ptr, self.size)
|
||||
}
|
||||
unsafe { ::std::slice::from_raw_parts(self.ptr, self.size) }
|
||||
}
|
||||
}
|
||||
|
||||
impl DerefMut for CodeMemory {
|
||||
fn deref_mut(&mut self) -> &mut [u8] {
|
||||
unsafe {
|
||||
::std::slice::from_raw_parts_mut(self.ptr, self.size)
|
||||
}
|
||||
unsafe { ::std::slice::from_raw_parts_mut(self.ptr, self.size) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -300,9 +300,7 @@ impl Ctx {
|
||||
|
||||
/// Returns the number of dynamic sigindices.
|
||||
pub fn dynamic_sigindice_count(&self) -> usize {
|
||||
unsafe {
|
||||
(*self.local_backing).dynamic_sigindices.len()
|
||||
}
|
||||
unsafe { (*self.local_backing).dynamic_sigindices.len() }
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user