diff --git a/src/bin/wasmer.rs b/src/bin/wasmer.rs index ca31259cc..bbff3f03d 100644 --- a/src/bin/wasmer.rs +++ b/src/bin/wasmer.rs @@ -62,6 +62,14 @@ fn execute_wasm(wasm_path: PathBuf) -> Result<(), String> { .map_err(|err| format!("Can't instantiate the WebAssembly module: {}", err))?; if instance.emscripten_data.as_ref().is_some() { + // Emscripten __ATINIT__ + if let Some(&webassembly::Export::Function(environ_constructor_index)) = module.info.exports.get("___emscripten_environ_constructor") { + debug!("emscripten::___emscripten_environ_constructor"); + let ___emscripten_environ_constructor: extern "C" fn(&webassembly::Instance) = + get_instance_function!(instance, environ_constructor_index); + call_protected!(___emscripten_environ_constructor(&instance)).map_err(|err| format!("{}", err))?; + }; + // TODO: We also need to handle TTY.init() and SOCKFS.root = FS.mount(SOCKFS, {}, null) let func_index = match module.info.exports.get("_main") { Some(&webassembly::Export::Function(index)) => index, _ => panic!("_main emscripten function not found"), @@ -69,6 +77,7 @@ fn execute_wasm(wasm_path: PathBuf) -> Result<(), String> { let main: extern "C" fn(u32, u32, &webassembly::Instance) = get_instance_function!(instance, func_index); return call_protected!(main(0, 0, &instance)).map_err(|err| format!("{}", err)); + // TODO: We should implement emscripten __ATEXIT__ } else { let func_index = instance