mirror of
https://github.com/fluencelabs/wasmer
synced 2025-03-30 22:41:03 +00:00
Added emscripten jmp instructions
This commit is contained in:
parent
903e3223dd
commit
87c3c037e4
34
src/apis/emscripten/jmp.rs
Normal file
34
src/apis/emscripten/jmp.rs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
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) -> !;
|
||||||
|
}
|
@ -8,6 +8,7 @@ mod env;
|
|||||||
mod errno;
|
mod errno;
|
||||||
mod exception;
|
mod exception;
|
||||||
mod io;
|
mod io;
|
||||||
|
mod jmp;
|
||||||
mod lock;
|
mod lock;
|
||||||
mod math;
|
mod math;
|
||||||
mod memory;
|
mod memory;
|
||||||
@ -479,6 +480,9 @@ pub fn generate_emscripten_env<'a, 'b>() -> ImportObject<&'a str, &'b str> {
|
|||||||
);
|
);
|
||||||
import_object.set("asm2wasm", "f64-rem", ImportValue::Func(math::f64_rem as _));
|
import_object.set("asm2wasm", "f64-rem", ImportValue::Func(math::f64_rem as _));
|
||||||
|
|
||||||
|
import_object.set("env", "__setjmp", ImportValue::Func(jmp::__setjmp as _));
|
||||||
|
import_object.set("env", "__longjmp", ImportValue::Func(jmp::__longjmp as _));
|
||||||
|
|
||||||
mock_external!(import_object, _waitpid);
|
mock_external!(import_object, _waitpid);
|
||||||
mock_external!(import_object, _utimes);
|
mock_external!(import_object, _utimes);
|
||||||
mock_external!(import_object, _usleep);
|
mock_external!(import_object, _usleep);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user