mirror of
https://github.com/fluencelabs/wasmer
synced 2025-04-01 23:41:03 +00:00
73 lines
2.2 KiB
Rust
73 lines
2.2 KiB
Rust
|
/// 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
|
||
|
}
|