mirror of
https://github.com/fluencelabs/wasmer
synced 2025-05-03 22:32:14 +00:00
35 lines
745 B
Rust
35 lines
745 B
Rust
|
use libc::{c_void, c_int};
|
||
|
use crate::webassembly::Instance;
|
||
|
|
||
|
|
||
|
/// setjmp
|
||
|
pub extern "C" fn __setjmp(
|
||
|
env_addr: u32,
|
||
|
instance: &mut Instance,
|
||
|
) -> c_int {
|
||
|
debug!("emscripten::__setjmp (setjmp)");
|
||
|
unsafe {
|
||
|
let env = instance.memory_offset_addr(0, env_addr as usize) as *mut c_void;
|
||
|
setjmp(env)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/// longjmp
|
||
|
pub extern "C" fn __longjmp(
|
||
|
env_addr: u32,
|
||
|
val: c_int,
|
||
|
instance: &mut Instance,
|
||
|
) -> ! {
|
||
|
debug!("emscripten::__longjmp (longjmp) {}", val);
|
||
|
unsafe {
|
||
|
let env = instance.memory_offset_addr(0, env_addr as usize) as *mut c_void;
|
||
|
longjmp(env, val)
|
||
|
};
|
||
|
}
|
||
|
|
||
|
extern "C" {
|
||
|
fn setjmp(env: *mut c_void) -> c_int;
|
||
|
fn longjmp(env: *mut c_void, val: c_int) -> !;
|
||
|
}
|