Refactor wasmtime-wasi crate
Changes:
* uses Rust edition 2018
* returns wasm32 errno directly rather than relying on
wasi_common::{host, memory} modules
* wraps extraction of memory and WASI context in a macro
This commit is contained in:
@@ -7,6 +7,7 @@ categories = ["wasm"]
|
|||||||
repository = "https://github.com/CraneStation/wasmtime"
|
repository = "https://github.com/CraneStation/wasmtime"
|
||||||
license = "Apache-2.0 WITH LLVM-exception"
|
license = "Apache-2.0 WITH LLVM-exception"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasmtime-runtime = { path = "../wasmtime-runtime" }
|
wasmtime-runtime = { path = "../wasmtime-runtime" }
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
use super::syscalls;
|
||||||
use cranelift_codegen::ir::types;
|
use cranelift_codegen::ir::types;
|
||||||
use cranelift_codegen::{ir, isa};
|
use cranelift_codegen::{ir, isa};
|
||||||
use cranelift_entity::PrimaryMap;
|
use cranelift_entity::PrimaryMap;
|
||||||
@@ -6,7 +7,6 @@ use std::cell::RefCell;
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use syscalls;
|
|
||||||
use target_lexicon::HOST;
|
use target_lexicon::HOST;
|
||||||
use wasi_common::WasiCtxBuilder;
|
use wasi_common::WasiCtxBuilder;
|
||||||
use wasmtime_environ::{translate_signature, Export, Module};
|
use wasmtime_environ::{translate_signature, Export, Module};
|
||||||
|
|||||||
@@ -1,14 +1,3 @@
|
|||||||
extern crate cranelift_codegen;
|
|
||||||
extern crate cranelift_entity;
|
|
||||||
extern crate cranelift_wasm;
|
|
||||||
extern crate target_lexicon;
|
|
||||||
extern crate wasmtime_environ;
|
|
||||||
extern crate wasmtime_jit;
|
|
||||||
extern crate wasmtime_runtime;
|
|
||||||
#[macro_use]
|
|
||||||
extern crate log;
|
|
||||||
extern crate wasi_common;
|
|
||||||
|
|
||||||
mod instantiate;
|
mod instantiate;
|
||||||
mod syscalls;
|
mod syscalls;
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +1,8 @@
|
|||||||
use cranelift_codegen::ir::types::{Type, I32, I64};
|
use cranelift_codegen::ir::types::{Type, I32, I64};
|
||||||
use wasi_common::{host, hostcalls, memory, wasm32, WasiCtx};
|
use log::trace;
|
||||||
|
use wasi_common::{hostcalls, wasm32, WasiCtx};
|
||||||
use wasmtime_runtime::{Export, VMContext};
|
use wasmtime_runtime::{Export, VMContext};
|
||||||
|
|
||||||
fn return_encoded_errno(e: host::__wasi_errno_t) -> wasm32::__wasi_errno_t {
|
|
||||||
let errno = memory::enc_errno(e);
|
|
||||||
trace!(" -> errno={}", wasm32::strerror(errno));
|
|
||||||
errno
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_wasi_ctx(vmctx: &mut VMContext) -> Result<&mut WasiCtx, host::__wasi_errno_t> {
|
|
||||||
unsafe {
|
|
||||||
vmctx.host_state().downcast_mut::<WasiCtx>().ok_or_else(|| {
|
|
||||||
println!("!!! no host state named WasiCtx available");
|
|
||||||
host::__WASI_EINVAL
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_memory(vmctx: &mut VMContext) -> Result<&mut [u8], host::__wasi_errno_t> {
|
|
||||||
unsafe {
|
|
||||||
match vmctx.lookup_global_export("memory") {
|
|
||||||
Some(Export::Memory {
|
|
||||||
definition,
|
|
||||||
vmctx: _,
|
|
||||||
memory: _,
|
|
||||||
}) => Ok(std::slice::from_raw_parts_mut(
|
|
||||||
(*definition).base,
|
|
||||||
(*definition).current_length,
|
|
||||||
)),
|
|
||||||
x => {
|
|
||||||
println!(
|
|
||||||
"!!! no export named \"memory\", or the export isn't a mem: {:?}",
|
|
||||||
x
|
|
||||||
);
|
|
||||||
Err(host::__WASI_EINVAL)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait AbiRet {
|
pub trait AbiRet {
|
||||||
type Abi;
|
type Abi;
|
||||||
fn convert(self) -> Self::Abi;
|
fn convert(self) -> Self::Abi;
|
||||||
@@ -110,6 +74,49 @@ impl AbiRet for () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_wasi_ctx(vmctx: &mut VMContext) -> Result<&mut WasiCtx, wasm32::__wasi_errno_t> {
|
||||||
|
unsafe {
|
||||||
|
vmctx.host_state().downcast_mut::<WasiCtx>().ok_or_else(|| {
|
||||||
|
println!("!!! no host state named WasiCtx available");
|
||||||
|
wasm32::__WASI_EINVAL
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_memory(vmctx: &mut VMContext) -> Result<&mut [u8], wasm32::__wasi_errno_t> {
|
||||||
|
unsafe {
|
||||||
|
match vmctx.lookup_global_export("memory") {
|
||||||
|
Some(Export::Memory {
|
||||||
|
definition,
|
||||||
|
vmctx: _,
|
||||||
|
memory: _,
|
||||||
|
}) => Ok(std::slice::from_raw_parts_mut(
|
||||||
|
(*definition).base,
|
||||||
|
(*definition).current_length,
|
||||||
|
)),
|
||||||
|
x => {
|
||||||
|
println!(
|
||||||
|
"!!! no export named \"memory\", or the export isn't a mem: {:?}",
|
||||||
|
x
|
||||||
|
);
|
||||||
|
Err(wasm32::__WASI_EINVAL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! ok_or_errno {
|
||||||
|
($expr:expr) => {
|
||||||
|
match $expr {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(e) => {
|
||||||
|
trace!(" -> errno={}", wasm32::strerror(e));
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! syscalls {
|
macro_rules! syscalls {
|
||||||
($(pub unsafe extern "C" fn $name:ident($ctx:ident: *mut VMContext $(, $arg:ident: $ty:ty)*,) -> $ret:ty {
|
($(pub unsafe extern "C" fn $name:ident($ctx:ident: *mut VMContext $(, $arg:ident: $ty:ty)*,) -> $ret:ty {
|
||||||
$($body:tt)*
|
$($body:tt)*
|
||||||
@@ -164,17 +171,8 @@ syscalls! {
|
|||||||
argv,
|
argv,
|
||||||
argv_buf,
|
argv_buf,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::args_get(wasi_ctx, memory, argv, argv_buf)
|
hostcalls::args_get(wasi_ctx, memory, argv, argv_buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,17 +186,8 @@ syscalls! {
|
|||||||
argc,
|
argc,
|
||||||
argv_buf_size,
|
argv_buf_size,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::args_sizes_get(wasi_ctx, memory, argc, argv_buf_size)
|
hostcalls::args_sizes_get(wasi_ctx, memory, argc, argv_buf_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,12 +201,7 @@ syscalls! {
|
|||||||
clock_id,
|
clock_id,
|
||||||
resolution,
|
resolution,
|
||||||
);
|
);
|
||||||
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::clock_res_get(memory, clock_id, resolution)
|
hostcalls::clock_res_get(memory, clock_id, resolution)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,12 +217,7 @@ syscalls! {
|
|||||||
precision,
|
precision,
|
||||||
time,
|
time,
|
||||||
);
|
);
|
||||||
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::clock_time_get(memory, clock_id, precision, time)
|
hostcalls::clock_time_get(memory, clock_id, precision, time)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,17 +231,8 @@ syscalls! {
|
|||||||
environ,
|
environ,
|
||||||
environ_buf,
|
environ_buf,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::environ_get(wasi_ctx, memory, environ, environ_buf)
|
hostcalls::environ_get(wasi_ctx, memory, environ, environ_buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,17 +246,8 @@ syscalls! {
|
|||||||
environ_count,
|
environ_count,
|
||||||
environ_buf_size,
|
environ_buf_size,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::environ_sizes_get(wasi_ctx, memory, environ_count, environ_buf_size)
|
hostcalls::environ_sizes_get(wasi_ctx, memory, environ_count, environ_buf_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,17 +257,8 @@ syscalls! {
|
|||||||
buf: wasm32::uintptr_t,
|
buf: wasm32::uintptr_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_prestat_get(fd={:?}, buf={:#x?})", fd, buf);
|
trace!("fd_prestat_get(fd={:?}, buf={:#x?})", fd, buf);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_prestat_get(wasi_ctx, memory, fd, buf)
|
hostcalls::fd_prestat_get(wasi_ctx, memory, fd, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,17 +269,8 @@ syscalls! {
|
|||||||
path_len: wasm32::size_t,
|
path_len: wasm32::size_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_prestat_dir_name(fd={:?}, path={:#x?}, path_len={})", fd, path, path_len);
|
trace!("fd_prestat_dir_name(fd={:?}, path={:#x?}, path_len={})", fd, path, path_len);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_prestat_dir_name(wasi_ctx, memory, fd, path, path_len)
|
hostcalls::fd_prestat_dir_name(wasi_ctx, memory, fd, path, path_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,12 +279,7 @@ syscalls! {
|
|||||||
fd: wasm32::__wasi_fd_t,
|
fd: wasm32::__wasi_fd_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_close(fd={:?})", fd);
|
trace!("fd_close(fd={:?})", fd);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_close(wasi_ctx, fd)
|
hostcalls::fd_close(wasi_ctx, fd)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,12 +288,7 @@ syscalls! {
|
|||||||
fd: wasm32::__wasi_fd_t,
|
fd: wasm32::__wasi_fd_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_datasync(fd={:?})", fd);
|
trace!("fd_datasync(fd={:?})", fd);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_datasync(wasi_ctx, fd)
|
hostcalls::fd_datasync(wasi_ctx, fd)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -375,17 +308,8 @@ syscalls! {
|
|||||||
offset,
|
offset,
|
||||||
nread
|
nread
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_pread(
|
hostcalls::fd_pread(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -413,17 +337,8 @@ syscalls! {
|
|||||||
offset,
|
offset,
|
||||||
nwritten
|
nwritten
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_pwrite(
|
hostcalls::fd_pwrite(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -449,17 +364,8 @@ syscalls! {
|
|||||||
iovs_len,
|
iovs_len,
|
||||||
nread
|
nread
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_read(wasi_ctx, memory, fd, iovs, iovs_len, nread)
|
hostcalls::fd_read(wasi_ctx, memory, fd, iovs, iovs_len, nread)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -469,12 +375,7 @@ syscalls! {
|
|||||||
to: wasm32::__wasi_fd_t,
|
to: wasm32::__wasi_fd_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_renumber(from={:?}, to={:?})", from, to);
|
trace!("fd_renumber(from={:?}, to={:?})", from, to);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_renumber(wasi_ctx, from, to)
|
hostcalls::fd_renumber(wasi_ctx, from, to)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,17 +393,8 @@ syscalls! {
|
|||||||
wasm32::whence_to_str(whence),
|
wasm32::whence_to_str(whence),
|
||||||
newoffset
|
newoffset
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_seek(wasi_ctx, memory, fd, offset, whence, newoffset)
|
hostcalls::fd_seek(wasi_ctx, memory, fd, offset, whence, newoffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,17 +404,8 @@ syscalls! {
|
|||||||
newoffset: wasm32::uintptr_t,
|
newoffset: wasm32::uintptr_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_tell(fd={:?}, newoffset={:#x?})", fd, newoffset);
|
trace!("fd_tell(fd={:?}, newoffset={:#x?})", fd, newoffset);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_tell(wasi_ctx, memory, fd, newoffset)
|
hostcalls::fd_tell(wasi_ctx, memory, fd, newoffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -532,17 +415,8 @@ syscalls! {
|
|||||||
buf: wasm32::uintptr_t,
|
buf: wasm32::uintptr_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_fdstat_get(fd={:?}, buf={:#x?})", fd, buf);
|
trace!("fd_fdstat_get(fd={:?}, buf={:#x?})", fd, buf);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_fdstat_get(wasi_ctx, memory, fd, buf)
|
hostcalls::fd_fdstat_get(wasi_ctx, memory, fd, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -556,12 +430,7 @@ syscalls! {
|
|||||||
fd,
|
fd,
|
||||||
flags
|
flags
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_fdstat_set_flags(wasi_ctx, fd, flags)
|
hostcalls::fd_fdstat_set_flags(wasi_ctx, fd, flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -577,12 +446,7 @@ syscalls! {
|
|||||||
fs_rights_base,
|
fs_rights_base,
|
||||||
fs_rights_inheriting
|
fs_rights_inheriting
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_fdstat_set_rights(
|
hostcalls::fd_fdstat_set_rights(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
fd,
|
fd,
|
||||||
@@ -596,12 +460,7 @@ syscalls! {
|
|||||||
fd: wasm32::__wasi_fd_t,
|
fd: wasm32::__wasi_fd_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_sync(fd={:?})", fd);
|
trace!("fd_sync(fd={:?})", fd);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_sync(wasi_ctx, fd)
|
hostcalls::fd_sync(wasi_ctx, fd)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -619,17 +478,8 @@ syscalls! {
|
|||||||
iovs_len,
|
iovs_len,
|
||||||
nwritten
|
nwritten
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_write(wasi_ctx, memory, fd, iovs, iovs_len, nwritten)
|
hostcalls::fd_write(wasi_ctx, memory, fd, iovs, iovs_len, nwritten)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -647,12 +497,7 @@ syscalls! {
|
|||||||
len,
|
len,
|
||||||
advice
|
advice
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_advise(wasi_ctx, fd, offset, len, advice)
|
hostcalls::fd_advise(wasi_ctx, fd, offset, len, advice)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -663,12 +508,7 @@ syscalls! {
|
|||||||
len: wasm32::__wasi_filesize_t,
|
len: wasm32::__wasi_filesize_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_allocate(fd={:?}, offset={}, len={})", fd, offset, len);
|
trace!("fd_allocate(fd={:?}, offset={}, len={})", fd, offset, len);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_allocate(wasi_ctx, fd, offset, len)
|
hostcalls::fd_allocate(wasi_ctx, fd, offset, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -684,17 +524,8 @@ syscalls! {
|
|||||||
path,
|
path,
|
||||||
path_len,
|
path_len,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_create_directory(wasi_ctx, memory, fd, path, path_len)
|
hostcalls::path_create_directory(wasi_ctx, memory, fd, path, path_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -718,17 +549,8 @@ syscalls! {
|
|||||||
path1,
|
path1,
|
||||||
path_len1
|
path_len1
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_link(
|
hostcalls::path_link(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -768,17 +590,8 @@ syscalls! {
|
|||||||
fs_flags,
|
fs_flags,
|
||||||
fd
|
fd
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_open(
|
hostcalls::path_open(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -810,17 +623,8 @@ syscalls! {
|
|||||||
cookie,
|
cookie,
|
||||||
buf_used,
|
buf_used,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_readdir(
|
hostcalls::fd_readdir(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -850,17 +654,8 @@ syscalls! {
|
|||||||
buf_len,
|
buf_len,
|
||||||
buf_used,
|
buf_used,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_readlink(
|
hostcalls::path_readlink(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -891,17 +686,8 @@ syscalls! {
|
|||||||
path1,
|
path1,
|
||||||
path_len1,
|
path_len1,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_rename(
|
hostcalls::path_rename(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -920,17 +706,8 @@ syscalls! {
|
|||||||
buf: wasm32::uintptr_t,
|
buf: wasm32::uintptr_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("fd_filestat_get(fd={:?}, buf={:#x?})", fd, buf);
|
trace!("fd_filestat_get(fd={:?}, buf={:#x?})", fd, buf);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_filestat_get(wasi_ctx, memory, fd, buf)
|
hostcalls::fd_filestat_get(wasi_ctx, memory, fd, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -947,12 +724,7 @@ syscalls! {
|
|||||||
st_atim, st_mtim,
|
st_atim, st_mtim,
|
||||||
fstflags
|
fstflags
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_filestat_set_times(wasi_ctx, fd, st_atim, st_mtim, fstflags)
|
hostcalls::fd_filestat_set_times(wasi_ctx, fd, st_atim, st_mtim, fstflags)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -966,12 +738,7 @@ syscalls! {
|
|||||||
fd,
|
fd,
|
||||||
size
|
size
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::fd_filestat_set_size(wasi_ctx, fd, size)
|
hostcalls::fd_filestat_set_size(wasi_ctx, fd, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -991,17 +758,8 @@ syscalls! {
|
|||||||
path_len,
|
path_len,
|
||||||
buf
|
buf
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_filestat_get(wasi_ctx, memory, fd, flags, path, path_len, buf)
|
hostcalls::path_filestat_get(wasi_ctx, memory, fd, flags, path, path_len, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1024,17 +782,8 @@ syscalls! {
|
|||||||
st_atim, st_mtim,
|
st_atim, st_mtim,
|
||||||
fstflags
|
fstflags
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_filestat_set_times(
|
hostcalls::path_filestat_set_times(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -1064,17 +813,8 @@ syscalls! {
|
|||||||
path1,
|
path1,
|
||||||
path_len1
|
path_len1
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_symlink(
|
hostcalls::path_symlink(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -1098,17 +838,8 @@ syscalls! {
|
|||||||
path,
|
path,
|
||||||
path_len
|
path_len
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_unlink_file(wasi_ctx, memory, fd, path, path_len)
|
hostcalls::path_unlink_file(wasi_ctx, memory, fd, path, path_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1124,17 +855,8 @@ syscalls! {
|
|||||||
path,
|
path,
|
||||||
path_len
|
path_len
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::path_remove_directory(wasi_ctx, memory, fd, path, path_len)
|
hostcalls::path_remove_directory(wasi_ctx, memory, fd, path, path_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1152,18 +874,12 @@ syscalls! {
|
|||||||
nsubscriptions,
|
nsubscriptions,
|
||||||
nevents,
|
nevents,
|
||||||
);
|
);
|
||||||
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::poll_oneoff(memory, in_, out, nsubscriptions, nevents)
|
hostcalls::poll_oneoff(memory, in_, out, nsubscriptions, nevents)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub unsafe extern "C" fn proc_exit(_vmctx: *mut VMContext, rval: u32,) -> () {
|
pub unsafe extern "C" fn proc_exit(_vmctx: *mut VMContext, rval: u32,) -> () {
|
||||||
trace!("proc_exit(rval={:?})", rval);
|
trace!("proc_exit(rval={:?})", rval);
|
||||||
|
|
||||||
hostcalls::proc_exit(rval)
|
hostcalls::proc_exit(rval)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1172,17 +888,8 @@ syscalls! {
|
|||||||
sig: wasm32::__wasi_signal_t,
|
sig: wasm32::__wasi_signal_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("proc_raise(sig={:?})", sig);
|
trace!("proc_raise(sig={:?})", sig);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::proc_raise(wasi_ctx, memory, sig)
|
hostcalls::proc_raise(wasi_ctx, memory, sig)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1192,18 +899,12 @@ syscalls! {
|
|||||||
buf_len: wasm32::size_t,
|
buf_len: wasm32::size_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("random_get(buf={:#x?}, buf_len={:?})", buf, buf_len);
|
trace!("random_get(buf={:#x?}, buf_len={:?})", buf, buf_len);
|
||||||
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::random_get(memory, buf, buf_len)
|
hostcalls::random_get(memory, buf, buf_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub unsafe extern "C" fn sched_yield(_vmctx: *mut VMContext,) -> wasm32::__wasi_errno_t {
|
pub unsafe extern "C" fn sched_yield(_vmctx: *mut VMContext,) -> wasm32::__wasi_errno_t {
|
||||||
trace!("sched_yield(void)");
|
trace!("sched_yield(void)");
|
||||||
|
|
||||||
hostcalls::sched_yield()
|
hostcalls::sched_yield()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1222,17 +923,8 @@ syscalls! {
|
|||||||
ri_data, ri_data_len, ri_flags,
|
ri_data, ri_data_len, ri_flags,
|
||||||
ro_datalen, ro_flags
|
ro_datalen, ro_flags
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::sock_recv(
|
hostcalls::sock_recv(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -1258,17 +950,8 @@ syscalls! {
|
|||||||
sock,
|
sock,
|
||||||
si_data, si_data_len, si_flags, so_datalen,
|
si_data, si_data_len, si_flags, so_datalen,
|
||||||
);
|
);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::sock_send(
|
hostcalls::sock_send(
|
||||||
wasi_ctx,
|
wasi_ctx,
|
||||||
memory,
|
memory,
|
||||||
@@ -1286,17 +969,8 @@ syscalls! {
|
|||||||
how: wasm32::__wasi_sdflags_t,
|
how: wasm32::__wasi_sdflags_t,
|
||||||
) -> wasm32::__wasi_errno_t {
|
) -> wasm32::__wasi_errno_t {
|
||||||
trace!("sock_shutdown(sock={:?}, how={:?})", sock, how);
|
trace!("sock_shutdown(sock={:?}, how={:?})", sock, how);
|
||||||
|
let wasi_ctx = ok_or_errno!(get_wasi_ctx(&mut *vmctx));
|
||||||
let wasi_ctx = match get_wasi_ctx(&mut *vmctx) {
|
let memory = ok_or_errno!(get_memory(&mut *vmctx));
|
||||||
Ok(ctx) => ctx,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
let memory = match get_memory(&mut *vmctx) {
|
|
||||||
Ok(memory) => memory,
|
|
||||||
Err(e) => return return_encoded_errno(e),
|
|
||||||
};
|
|
||||||
|
|
||||||
hostcalls::sock_shutdown(wasi_ctx, memory, sock, how)
|
hostcalls::sock_shutdown(wasi_ctx, memory, sock, how)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user