wasmer/src/apis/emscripten/syscalls.rs

73 lines
2.2 KiB
Rust
Raw Normal View History

2018-11-21 15:10:03 -08:00
/// NOTE: These syscalls only support wasm_32 for now because they take u32 offset
use libc::{
c_int,
c_void,
size_t,
ssize_t,
exit,
read,
write,
open,
close,
};
use std::os::raw::c_char;
use std::ffi::CStr;
use crate::webassembly::{Instance};
/// emscripten: ___syscall3 (sys_read)
pub extern "C" fn ___syscall3(which: c_int, varargs: c_int, instance: &mut Instance) -> ssize_t {
// function ___syscall3(which, varargs) {
// which, varargs
// SYSCALLS.varargs = varargs;
// try {
// var stream = SYSCALLS.getStreamFromFD(),
// buf = SYSCALLS.get(),
// count = SYSCALLS.get();
// return FS.read(stream, HEAP8, buf, count);
// } catch (e) {
// if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
// return -e.errno;
// }
// }
debug!("emscripten::___syscall3({}, {})", which, varargs);
0
}
/// emscripten: ___syscall4 (sys_write)
pub extern "C" fn ___syscall4(which_ptr: c_int, varargs_ptr: c_int, instance: &mut Instance) -> c_int {
// function ___syscall4(which, varargs) {
// SYSCALLS.varargs = varargs;
// try {
// var stream = SYSCALLS.getStreamFromFD(),
// buf = SYSCALLS.get(),
// count = SYSCALLS.get();
// return FS.write(stream, HEAP8, buf, count);
// } catch (e) {
// if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
// return -e.errno;
// }
// }
debug!("emscripten::___syscall4({}, {})", which_ptr, varargs_ptr);
0
}
/// emscripten: ___syscall5 (sys_open)
pub extern "C" fn ___syscall5(which: c_int, varargs: c_int, instance: &mut Instance) -> c_int {
// function ___syscall5(which, varargs) {
// SYSCALLS.varargs = varargs;
// try {
// var pathname = SYSCALLS.getStr(),
// flags = SYSCALLS.get(),
// mode = SYSCALLS.get();
// var stream = FS.open(pathname, flags, mode);
// return stream.fd;
// } catch (e) {
// if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
// return -e.errno;
// }
// }
debug!("host::___syscall5({}, {})", which, varargs);
-2
}