From 7760d5a4a20762ad212bb454b15093690a83b1da Mon Sep 17 00:00:00 2001 From: Mark McCaskey Date: Wed, 31 Jul 2019 15:59:08 +0900 Subject: [PATCH] simplify example and make public get_wasi_state unsafe --- examples/plugin-for-example.wasm | Bin 71029 -> 71005 bytes examples/plugin-for-example/README.md | 2 -- examples/plugin-for-example/src/main.rs | 5 +---- examples/plugin.rs | 7 ++++--- lib/wasi/src/state.rs | 5 +++-- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/examples/plugin-for-example.wasm b/examples/plugin-for-example.wasm index 4719a0b63c374b9c64d93674ceac25b500f41a6a..c87ae2081bb6ba79a252e674ed4433574532f5f4 100755 GIT binary patch delta 5822 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 diff --git a/examples/plugin-for-example/README.md b/examples/plugin-for-example/README.md index a405e250c..42bc3ac26 100644 --- a/examples/plugin-for-example/README.md +++ b/examples/plugin-for-example/README.md @@ -40,6 +40,4 @@ In this example, we instantiate a system with an extended (WASI)[wasi] ABI, allo Because the Rust WASI doesn't support the crate type of `cdylib`, we have to include a main function which we don't use. This is being discussed [here](https://github.com/WebAssembly/WASI/issues/24). -We call the main function to initialize WASI's libpreopen internal datastructures and have the module call back into the host to set swap out the modules implementation of stdout. The host then provides a wrapper around stdout, allowing the guest's writes to stdout to be formatted in a host-appropriate manner. - [wasi]: https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/ diff --git a/examples/plugin-for-example/src/main.rs b/examples/plugin-for-example/src/main.rs index 7479e9bcf..9ee284aab 100644 --- a/examples/plugin-for-example/src/main.rs +++ b/examples/plugin-for-example/src/main.rs @@ -1,6 +1,5 @@ extern "C" { fn it_works() -> i32; - fn initialize(); } #[no_mangle] @@ -10,6 +9,4 @@ pub fn plugin_entrypoint(n: i32) -> i32 { result + n } -pub fn main() { - unsafe { initialize() }; -} +pub fn main() {} diff --git a/examples/plugin.rs b/examples/plugin.rs index 6d576914e..ed36c3cd6 100644 --- a/examples/plugin.rs +++ b/examples/plugin.rs @@ -103,7 +103,7 @@ impl WasiFile for LoggingWrapper { /// Called by the program when it wants to set itself up fn initialize(ctx: &mut Ctx) { - let state = state::get_wasi_state(ctx); + let state = unsafe { state::get_wasi_state(ctx) }; let wasi_file_inner = LoggingWrapper { wasm_module_name: "example module name".to_string(), }; @@ -127,14 +127,15 @@ fn main() { let custom_imports = imports! { "env" => { "it_works" => func!(it_works), - "initialize" => func!(initialize), }, }; // The WASI imports object contains all required import functions for a WASI module to run. // Extend this imports with our custom imports containing "it_works" function so that our custom wasm code may run. base_imports.extend(custom_imports); - let instance = + let mut instance = instantiate(&wasm_bytes[..], &base_imports).expect("failed to instantiate wasm module"); + // set up logging by replacing stdout + initialize(instance.context_mut()); let main = instance.func::<(), ()>("_start").unwrap(); main.call().expect("Could not initialize"); diff --git a/lib/wasi/src/state.rs b/lib/wasi/src/state.rs index 051a46850..a7f36d232 100644 --- a/lib/wasi/src/state.rs +++ b/lib/wasi/src/state.rs @@ -25,8 +25,9 @@ pub const VIRTUAL_ROOT_FD: __wasi_fd_t = 4; pub const ALL_RIGHTS: __wasi_rights_t = 0x1FFFFFFF; /// Get WasiState from a Ctx -pub fn get_wasi_state(ctx: &mut Ctx) -> &mut WasiState { - unsafe { &mut *(ctx.data as *mut WasiState) } +/// This function is unsafe because it must be called on a WASI Ctx +pub unsafe fn get_wasi_state(ctx: &mut Ctx) -> &mut WasiState { + &mut *(ctx.data as *mut WasiState) } /// A completely aribtrary "big enough" number used as the upper limit for