@@ -33,7 +33,7 @@ use spin::Mutex;
3333use tracing:: instrument;
3434use wasmtime:: { Config , Engine , Linker , Module , Store , Val } ;
3535
36- use crate :: { hostfuncs, marshal, platform, wasip1} ;
36+ use crate :: { hostfuncs, map_wasmtime_error , marshal, platform, wasip1} ;
3737
3838// Set by transition to WasmSandbox (by init_wasm_runtime)
3939static CUR_ENGINE : Mutex < Option < Engine > > = Mutex :: new ( None ) ;
@@ -86,7 +86,8 @@ pub fn guest_dispatch_function(function_call: FunctionCall) -> Result<Vec<u8>> {
8686 let is_void = ReturnType :: Void == function_call. expected_return_type ;
8787 let n_results = if is_void { 0 } else { 1 } ;
8888 let mut results = vec ! [ Val :: I32 ( 0 ) ; n_results] ;
89- func. call ( & mut * store, & w_params, & mut results) ?;
89+ func. call ( & mut * store, & w_params, & mut results)
90+ . map_err ( map_wasmtime_error) ?;
9091 marshal:: val_to_hl_result (
9192 & mut * store,
9293 |ctx, name| instance. get_export ( ctx, name) ,
@@ -119,7 +120,7 @@ fn init_wasm_runtime(function_call: FunctionCall) -> Result<Vec<u8>> {
119120 "Failed to set wasmtime target: pulley64" . to_string ( ) ,
120121 )
121122 } ) ?;
122- let engine = Engine :: new ( & config) ?;
123+ let engine = Engine :: new ( & config) . map_err ( map_wasmtime_error ) ?;
123124 let mut linker = Linker :: new ( & engine) ;
124125 wasip1:: register_handlers ( & mut linker) ?;
125126
@@ -157,15 +158,17 @@ fn init_wasm_runtime(function_call: FunctionCall) -> Result<Vec<u8>> {
157158
158159 for hostfunc in hostfuncs. iter ( ) {
159160 let captured = hostfunc. clone ( ) ;
160- linker. func_new (
161- "env" ,
162- & hostfunc. function_name ,
163- hostfuncs:: hostfunc_type ( hostfunc, & engine) ?,
164- move |c, ps, rs| {
165- hostfuncs:: call ( & captured, c, ps, rs)
166- . map_err ( |e| wasmtime:: Error :: msg ( format ! ( "{:?}" , e) ) )
167- } ,
168- ) ?;
161+ linker
162+ . func_new (
163+ "env" ,
164+ & hostfunc. function_name ,
165+ hostfuncs:: hostfunc_type ( hostfunc, & engine) ?,
166+ move |c, ps, rs| {
167+ hostfuncs:: call ( & captured, c, ps, rs)
168+ . map_err ( |e| wasmtime:: Error :: msg ( format ! ( "{:?}" , e) ) )
169+ } ,
170+ )
171+ . map_err ( map_wasmtime_error) ?;
169172 }
170173
171174 * CUR_ENGINE . lock ( ) = Some ( engine) ;
@@ -190,9 +193,12 @@ fn load_wasm_module(function_call: FunctionCall) -> Result<Vec<u8>> {
190193 "impossible: wasm runtime has no valid linker" . to_string ( ) ,
191194 ) ) ?;
192195
193- let module = unsafe { Module :: deserialize ( engine, wasm_bytes) ? } ;
196+ let module =
197+ unsafe { Module :: deserialize ( engine, wasm_bytes) . map_err ( map_wasmtime_error) ? } ;
194198 let mut store = Store :: new ( engine, ( ) ) ;
195- let instance = linker. instantiate ( & mut store, & module) ?;
199+ let instance = linker
200+ . instantiate ( & mut store, & module)
201+ . map_err ( map_wasmtime_error) ?;
196202
197203 * CUR_MODULE . lock ( ) = Some ( module) ;
198204 * CUR_STORE . lock ( ) = Some ( store) ;
@@ -219,9 +225,14 @@ fn load_wasm_module_phys(function_call: FunctionCall) -> Result<Vec<u8>> {
219225 "impossible: wasm runtime has no valid linker" . to_string ( ) ,
220226 ) ) ?;
221227
222- let module = unsafe { Module :: deserialize_raw ( engine, platform:: map_buffer ( * phys, * len) ) ? } ;
228+ let module = unsafe {
229+ Module :: deserialize_raw ( engine, platform:: map_buffer ( * phys, * len) )
230+ . map_err ( map_wasmtime_error) ?
231+ } ;
223232 let mut store = Store :: new ( engine, ( ) ) ;
224- let instance = linker. instantiate ( & mut store, & module) ?;
233+ let instance = linker
234+ . instantiate ( & mut store, & module)
235+ . map_err ( map_wasmtime_error) ?;
225236
226237 * CUR_MODULE . lock ( ) = Some ( module) ;
227238 * CUR_STORE . lock ( ) = Some ( store) ;
0 commit comments