Bind Trap::i32_exit_status in C API (#1912)
This allows embedders to take a different action when a WASI program exits depending on whether it exited with an exit status or exited with a trap. cc bytecodealliance/wasmtime-py#30
This commit is contained in:
@@ -167,6 +167,15 @@ WASM_API_EXTERN own wasmtime_interrupt_handle_t *wasmtime_interrupt_handle_new(w
|
|||||||
|
|
||||||
WASM_API_EXTERN void wasmtime_interrupt_handle_interrupt(wasmtime_interrupt_handle_t *handle);
|
WASM_API_EXTERN void wasmtime_interrupt_handle_interrupt(wasmtime_interrupt_handle_t *handle);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Extensions to `wasm_trap_t`
|
||||||
|
|
||||||
|
// Returns `true` if the trap is a WASI "exit" trap and has a return status. If
|
||||||
|
// `true` is returned then the exit status is returned through the `status`
|
||||||
|
// pointer. If `false` is returned then this is not a wasi exit trap.
|
||||||
|
WASM_API_EXTERN bool wasmtime_trap_exit_status(const wasm_trap_t*, int *status);
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Extensions to `wasm_frame_t`
|
// Extensions to `wasm_frame_t`
|
||||||
|
|||||||
@@ -91,6 +91,18 @@ pub extern "C" fn wasm_trap_trace(raw: &wasm_trap_t, out: &mut wasm_frame_vec_t)
|
|||||||
out.set_buffer(vec);
|
out.set_buffer(vec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn wasmtime_trap_exit_status(raw: &wasm_trap_t, status: &mut i32) -> bool {
|
||||||
|
let trap = raw.trap.borrow();
|
||||||
|
match trap.i32_exit_status() {
|
||||||
|
Some(i) => {
|
||||||
|
*status = i;
|
||||||
|
true
|
||||||
|
}
|
||||||
|
None => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn wasm_frame_func_index(frame: &wasm_frame_t) -> u32 {
|
pub extern "C" fn wasm_frame_func_index(frame: &wasm_frame_t) -> u32 {
|
||||||
frame.trap.borrow().trace()[frame.idx].func_index()
|
frame.trap.borrow().trace()[frame.idx].func_index()
|
||||||
|
|||||||
Reference in New Issue
Block a user