Auto-generate the hostcalls module of wasi-common (#846)
* Auto-generate shims for old `wasi_unstable` module This commit is effectively just doing what #707 already did, but applying it to the `snapshot_0` module as well. The end result is the same, where we cut down on all the boilerplate in `snapshot_0` and bring it in line with the main `wasi_snapshot_preview1` implementation. The goal here is to make it easier to change the two in tandem since they're both doing the same thing. * Migrate `wasi_common::hostcalls` to a macro This commit migrates the `hostcalls` module to being auto-generated by a macro rather than duplicating a handwritten signature for each wasi syscall. * Auto-generate snapshot_0's `hostcalls` module Similar to the previous commit, but for `snapshot_0` * Delete the `wasi-common-cbindgen` crate This is no longer needed with the hostcalls macro now, we can easily fold the definition of the cbindgen macro into the same crate. * Rustfmt * Fix windows build errors * Rustfmt * Remove now no-longer-necessary code * rustfmt
This commit is contained in:
@@ -16,7 +16,11 @@ use std::io::{self, Read, Seek, SeekFrom, Write};
|
||||
use std::ops::DerefMut;
|
||||
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||
|
||||
pub(crate) unsafe fn fd_close(wasi_ctx: &mut WasiCtx, fd: wasi::__wasi_fd_t) -> Result<()> {
|
||||
pub(crate) unsafe fn fd_close(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
) -> Result<()> {
|
||||
trace!("fd_close(fd={:?})", fd);
|
||||
|
||||
if let Ok(fe) = wasi_ctx.get_fd_entry(fd) {
|
||||
@@ -30,7 +34,11 @@ pub(crate) unsafe fn fd_close(wasi_ctx: &mut WasiCtx, fd: wasi::__wasi_fd_t) ->
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) unsafe fn fd_datasync(wasi_ctx: &WasiCtx, fd: wasi::__wasi_fd_t) -> Result<()> {
|
||||
pub(crate) unsafe fn fd_datasync(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
) -> Result<()> {
|
||||
trace!("fd_datasync(fd={:?})", fd);
|
||||
|
||||
let fd = wasi_ctx
|
||||
@@ -175,6 +183,7 @@ pub(crate) unsafe fn fd_read(
|
||||
|
||||
pub(crate) unsafe fn fd_renumber(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
from: wasi::__wasi_fd_t,
|
||||
to: wasi::__wasi_fd_t,
|
||||
) -> Result<()> {
|
||||
@@ -291,6 +300,7 @@ pub(crate) unsafe fn fd_fdstat_get(
|
||||
|
||||
pub(crate) unsafe fn fd_fdstat_set_flags(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fdflags: wasi::__wasi_fdflags_t,
|
||||
) -> Result<()> {
|
||||
@@ -306,6 +316,7 @@ pub(crate) unsafe fn fd_fdstat_set_flags(
|
||||
|
||||
pub(crate) unsafe fn fd_fdstat_set_rights(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fs_rights_base: wasi::__wasi_rights_t,
|
||||
fs_rights_inheriting: wasi::__wasi_rights_t,
|
||||
@@ -329,7 +340,11 @@ pub(crate) unsafe fn fd_fdstat_set_rights(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) unsafe fn fd_sync(wasi_ctx: &WasiCtx, fd: wasi::__wasi_fd_t) -> Result<()> {
|
||||
pub(crate) unsafe fn fd_sync(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
) -> Result<()> {
|
||||
trace!("fd_sync(fd={:?})", fd);
|
||||
|
||||
let fd = wasi_ctx
|
||||
@@ -397,6 +412,7 @@ pub(crate) unsafe fn fd_write(
|
||||
|
||||
pub(crate) unsafe fn fd_advise(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
len: wasi::__wasi_filesize_t,
|
||||
@@ -420,6 +436,7 @@ pub(crate) unsafe fn fd_advise(
|
||||
|
||||
pub(crate) unsafe fn fd_allocate(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
len: wasi::__wasi_filesize_t,
|
||||
@@ -702,6 +719,7 @@ pub(crate) unsafe fn fd_filestat_get(
|
||||
|
||||
pub(crate) unsafe fn fd_filestat_set_times(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
st_atim: wasi::__wasi_timestamp_t,
|
||||
st_mtim: wasi::__wasi_timestamp_t,
|
||||
@@ -761,6 +779,7 @@ pub(crate) fn fd_filestat_set_times_impl(
|
||||
|
||||
pub(crate) unsafe fn fd_filestat_set_size(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
st_size: wasi::__wasi_filesize_t,
|
||||
) -> Result<()> {
|
||||
|
||||
@@ -128,6 +128,7 @@ pub(crate) fn environ_sizes_get(
|
||||
}
|
||||
|
||||
pub(crate) fn random_get(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
buf_ptr: wasi32::uintptr_t,
|
||||
buf_len: wasi32::size_t,
|
||||
@@ -143,6 +144,7 @@ pub(crate) fn random_get(
|
||||
}
|
||||
|
||||
pub(crate) fn clock_res_get(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
clock_id: wasi::__wasi_clockid_t,
|
||||
resolution_ptr: wasi32::uintptr_t,
|
||||
@@ -161,6 +163,7 @@ pub(crate) fn clock_res_get(
|
||||
}
|
||||
|
||||
pub(crate) fn clock_time_get(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
clock_id: wasi::__wasi_clockid_t,
|
||||
precision: wasi::__wasi_timestamp_t,
|
||||
@@ -180,7 +183,7 @@ pub(crate) fn clock_time_get(
|
||||
enc_timestamp_byref(memory, time_ptr, time)
|
||||
}
|
||||
|
||||
pub(crate) fn sched_yield() -> Result<()> {
|
||||
pub(crate) fn sched_yield(_wasi_ctx: &WasiCtx, _memory: &mut [u8]) -> Result<()> {
|
||||
trace!("sched_yield()");
|
||||
|
||||
std::thread::yield_now();
|
||||
@@ -314,3 +317,18 @@ pub(crate) struct FdEventData<'a> {
|
||||
pub(crate) r#type: wasi::__wasi_eventtype_t,
|
||||
pub(crate) userdata: wasi::__wasi_userdata_t,
|
||||
}
|
||||
|
||||
pub(crate) fn proc_exit(_wasi_ctx: &WasiCtx, _memory: &mut [u8], rval: wasi::__wasi_exitcode_t) {
|
||||
trace!("proc_exit(rval={:?})", rval);
|
||||
// TODO: Rather than call std::process::exit here, we should trigger a
|
||||
// stack unwind similar to a trap.
|
||||
std::process::exit(rval as i32);
|
||||
}
|
||||
|
||||
pub(crate) fn proc_raise(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sig: wasi::__wasi_signal_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("proc_raise")
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
mod fs;
|
||||
mod fs_helpers;
|
||||
mod misc;
|
||||
mod sock;
|
||||
|
||||
pub(crate) use self::fs::*;
|
||||
pub(crate) use self::fs_helpers::PathGet;
|
||||
pub(crate) use self::misc::*;
|
||||
pub(crate) use self::sock::*;
|
||||
|
||||
35
crates/wasi-common/src/old/snapshot_0/hostcalls_impl/sock.rs
Normal file
35
crates/wasi-common/src/old/snapshot_0/hostcalls_impl/sock.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
use crate::old::snapshot_0::{wasi, wasi32, Result, WasiCtx};
|
||||
|
||||
pub fn sock_recv(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_ri_data: wasi32::uintptr_t,
|
||||
_ri_data_len: wasi32::size_t,
|
||||
_ri_flags: wasi::__wasi_riflags_t,
|
||||
_ro_datalen: wasi32::uintptr_t,
|
||||
_ro_flags: wasi32::uintptr_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_recv")
|
||||
}
|
||||
|
||||
pub fn sock_send(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_si_data: wasi32::uintptr_t,
|
||||
_si_data_len: wasi32::size_t,
|
||||
_si_flags: wasi::__wasi_siflags_t,
|
||||
_so_datalen: wasi32::uintptr_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_send")
|
||||
}
|
||||
|
||||
pub fn sock_shutdown(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_how: wasi::__wasi_sdflags_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_shutdown")
|
||||
}
|
||||
Reference in New Issue
Block a user