Change proc_exit to unwind the stack rather than exiting the host process. (#1646)
* Remove Cranelift's OutOfBounds trap, which is no longer used. * Change proc_exit to unwind instead of exit the host process. This implements the semantics in https://github.com/WebAssembly/WASI/pull/235. Fixes #783. Fixes #993. * Fix exit-status tests on Windows. * Revert the wiggle changes and re-introduce the wasi-common implementations. * Move `wasi_proc_exit` into the wasmtime-wasi crate. * Revert the spec_testsuite change. * Remove the old proc_exit implementations. * Make `TrapReason` an implementation detail. * Allow exit status 2 on Windows too. * Fix a documentation link. * Really fix a documentation link.
This commit is contained in:
@@ -46,6 +46,15 @@ pub fn define_struct(args: TokenStream) -> TokenStream {
|
||||
linker_add.push(quote! {
|
||||
linker.define(#module_name, #name, self.#name_ident.clone())?;
|
||||
});
|
||||
// `proc_exit` is special; it's essentially an unwinding primitive,
|
||||
// so we implement it in the runtime rather than use the implementation
|
||||
// in wasi-common.
|
||||
if name == "proc_exit" {
|
||||
ctor_externs.push(quote! {
|
||||
let #name_ident = wasmtime::Func::wrap(store, crate::wasi_proc_exit);
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut shim_arg_decls = Vec::new();
|
||||
let mut params = Vec::new();
|
||||
@@ -291,6 +300,15 @@ pub fn define_struct_for_wiggle(args: TokenStream) -> TokenStream {
|
||||
linker_add.push(quote! {
|
||||
linker.define(#module_name, #name, self.#name_ident.clone())?;
|
||||
});
|
||||
// `proc_exit` is special; it's essentially an unwinding primitive,
|
||||
// so we implement it in the runtime rather than use the implementation
|
||||
// in wasi-common.
|
||||
if name == "proc_exit" {
|
||||
ctor_externs.push(quote! {
|
||||
let #name_ident = wasmtime::Func::wrap(store, crate::wasi_proc_exit);
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut shim_arg_decls = Vec::new();
|
||||
let mut params = Vec::new();
|
||||
|
||||
Reference in New Issue
Block a user