Make the calls to wasm's memory.grow and memory.size indirect (#194)

* Make the calls to wasm's memory.grow and memory.size indirect
This commit is contained in:
Artur Jamro
2019-07-18 14:40:03 -07:00
committed by Dan Gohman
parent d27d190b74
commit c80508c8a9
5 changed files with 189 additions and 106 deletions

View File

@@ -11,9 +11,9 @@ use crate::signalhandlers::{wasmtime_init_eager, wasmtime_init_finish};
use crate::table::Table;
use crate::traphandlers::wasmtime_call;
use crate::vmcontext::{
VMCallerCheckedAnyfunc, VMContext, VMFunctionBody, VMFunctionImport, VMGlobalDefinition,
VMGlobalImport, VMMemoryDefinition, VMMemoryImport, VMSharedSignatureIndex, VMTableDefinition,
VMTableImport,
VMBuiltinFunctionsArray, VMCallerCheckedAnyfunc, VMContext, VMFunctionBody, VMFunctionImport,
VMGlobalDefinition, VMGlobalImport, VMMemoryDefinition, VMMemoryImport, VMSharedSignatureIndex,
VMTableDefinition, VMTableImport,
};
use core::any::Any;
use core::borrow::Borrow;
@@ -360,6 +360,15 @@ impl Instance {
}
}
/// Return a pointer to the `VMBuiltinFunctionsArray`.
fn builtin_functions_ptr(&mut self) -> *mut VMBuiltinFunctionsArray {
unsafe {
(&mut self.vmctx as *mut VMContext as *mut u8)
.add(usize::try_from(self.offsets.vmctx_builtin_functions_begin()).unwrap())
as *mut VMBuiltinFunctionsArray
}
}
/// Return a reference to the vmctx used by compiled wasm code.
pub fn vmctx(&self) -> &VMContext {
&self.vmctx
@@ -723,6 +732,10 @@ impl InstanceHandle {
instance.globals_ptr() as *mut VMGlobalDefinition,
vmctx_globals.len(),
);
ptr::write(
instance.builtin_functions_ptr() as *mut VMBuiltinFunctionsArray,
VMBuiltinFunctionsArray::initialized(),
);
}
// Check initializer bounds before initializing anything.