Update ESP32 WASI implementation. Fix #140

extensions
Volodymyr Shymanskyy 4 years ago
parent ad51428341
commit 43727c3289

@ -26,11 +26,11 @@ typedef uint32_t __wasi_size_t;
#include <fcntl.h>
#include <unistd.h>
struct wasi_iovec
typedef struct wasi_iovec_t
{
__wasi_size_t iov_base;
__wasi_size_t iov_len;
};
__wasi_size_t buf;
__wasi_size_t buf_len;
} wasi_iovec_t;
#define PREOPEN_CNT 3
@ -113,19 +113,19 @@ __wasi_timestamp_t convert_timespec(const struct timespec *ts) {
m3ApiRawFunction(m3_wasi_unstable_args_get)
{
m3ApiReturnType (uint32_t)
m3ApiGetArgMem (u32 * , argv_offset)
m3ApiGetArgMem (u8 * , argv_buf_offset)
m3ApiGetArgMem (uint32_t * , argv)
m3ApiGetArgMem (char * , argv_buf)
if (runtime == NULL) { m3ApiReturn(__WASI_EINVAL); }
for (u32 i = 0; i < runtime->argc; ++i)
{
argv_offset [i] = m3ApiPtrToOffset (argv_buf_offset);
size_t len = strlen (runtime->argv [i]);
memcpy (argv_buf_offset, runtime->argv [i], len);
argv_buf_offset += len;
* argv_buf_offset++ = 0;
m3ApiWriteMem32(&argv[i], m3ApiPtrToOffset(argv_buf));
size_t len = strlen (runtime->argv[i]);
memcpy (argv_buf, runtime->argv[i], len);
argv_buf += len;
* argv_buf++ = 0;
}
m3ApiReturn(__WASI_ESUCCESS);
@ -134,25 +134,28 @@ m3ApiRawFunction(m3_wasi_unstable_args_get)
m3ApiRawFunction(m3_wasi_unstable_args_sizes_get)
{
m3ApiReturnType (uint32_t)
m3ApiGetArgMem (__wasi_size_t* , argc)
m3ApiGetArgMem (__wasi_size_t* , argv_buf_size)
m3ApiGetArgMem (__wasi_size_t * , argc)
m3ApiGetArgMem (__wasi_size_t * , argv_buf_size)
if (runtime == NULL) { m3ApiReturn(__WASI_EINVAL); }
*argc = runtime->argc;
*argv_buf_size = 0;
__wasi_size_t buflen = 0;
for (u32 i = 0; i < runtime->argc; ++i)
{
* argv_buf_size += strlen (runtime->argv [i]) + 1;
buflen += strlen (runtime->argv[i]) + 1;
}
m3ApiWriteMem32(argc, runtime->argc);
m3ApiWriteMem32(argv_buf_size, buflen);
m3ApiReturn(__WASI_ESUCCESS);
}
m3ApiRawFunction(m3_wasi_unstable_environ_get)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (uint32_t , environ_ptrs_offset)
m3ApiGetArg (uint32_t , environ_strs_offset)
m3ApiGetArgMem (uint32_t * , env)
m3ApiGetArgMem (char * , env_buf)
if (runtime == NULL) { m3ApiReturn(__WASI_EINVAL); }
// TODO
@ -162,13 +165,15 @@ m3ApiRawFunction(m3_wasi_unstable_environ_get)
m3ApiRawFunction(m3_wasi_unstable_environ_sizes_get)
{
m3ApiReturnType (uint32_t)
m3ApiGetArgMem (__wasi_size_t* , environ_count)
m3ApiGetArgMem (__wasi_size_t* , environ_buf_size)
m3ApiGetArgMem (__wasi_size_t * , env_count)
m3ApiGetArgMem (__wasi_size_t * , env_buf_size)
if (runtime == NULL) { m3ApiReturn(__WASI_EINVAL); }
// TODO
*environ_count = 0;
*environ_buf_size = 0;
m3ApiWriteMem32(env_count, 0);
m3ApiWriteMem32(env_buf_size, 0);
m3ApiReturn(__WASI_ESUCCESS);
}
@ -176,13 +181,13 @@ m3ApiRawFunction(m3_wasi_unstable_fd_prestat_dir_name)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_fd_t , fd)
m3ApiGetArgMem (char* , path)
m3ApiGetArgMem (char * , path)
m3ApiGetArg (__wasi_size_t , path_len)
if (runtime == NULL) { m3ApiReturn(__WASI_EINVAL); }
if (fd < 3 || fd >= PREOPEN_CNT) { m3ApiReturn(__WASI_EBADF); }
int size = M3_MIN(strlen(preopen[fd].path), path_len);
memcpy(path, preopen[fd].path, size);
size_t slen = strlen(preopen[fd].path);
memcpy(path, preopen[fd].path, M3_MIN(slen, path_len));
m3ApiReturn(__WASI_ESUCCESS);
}
@ -190,12 +195,12 @@ m3ApiRawFunction(m3_wasi_unstable_fd_prestat_get)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_fd_t , fd)
m3ApiGetArgMem (uint32_t* , buf) // TODO: use actual struct
m3ApiGetArgMem (uint32_t * , buf) // TODO: use actual struct
if (runtime == NULL) { m3ApiReturn(__WASI_EINVAL); }
if (fd < 3 || fd >= PREOPEN_CNT) { m3ApiReturn(__WASI_EBADF); }
*(buf) = __WASI_PREOPENTYPE_DIR;
*(buf+1) = strlen(preopen[fd].path);
m3ApiWriteMem32(buf, __WASI_PREOPENTYPE_DIR);
m3ApiWriteMem32(buf+1, strlen(preopen[fd].path));
m3ApiReturn(__WASI_ESUCCESS);
}
@ -203,7 +208,7 @@ m3ApiRawFunction(m3_wasi_unstable_fd_fdstat_get)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_fd_t , fd)
m3ApiGetArgMem (__wasi_fdstat_t* , fdstat)
m3ApiGetArgMem (__wasi_fdstat_t * , fdstat)
if (runtime == NULL || fdstat == NULL) { m3ApiReturn(__WASI_EINVAL); }
@ -218,33 +223,50 @@ m3ApiRawFunction(m3_wasi_unstable_fd_fdstat_get)
(S_ISREG(mode) ? __WASI_FILETYPE_REGULAR_FILE : 0) |
//(S_ISSOCK(mode) ? __WASI_FILETYPE_SOCKET_STREAM : 0) |
(S_ISLNK(mode) ? __WASI_FILETYPE_SYMBOLIC_LINK : 0);
fdstat->fs_flags = ((fl & O_APPEND) ? __WASI_FDFLAG_APPEND : 0) |
m3ApiWriteMem16(&fdstat->fs_flags,
((fl & O_APPEND) ? __WASI_FDFLAG_APPEND : 0) |
//((fl & O_DSYNC) ? __WASI_FDFLAG_DSYNC : 0) |
((fl & O_NONBLOCK) ? __WASI_FDFLAG_NONBLOCK : 0) |
//((fl & O_RSYNC) ? __WASI_FDFLAG_RSYNC : 0) |
((fl & O_SYNC) ? __WASI_FDFLAG_SYNC : 0);
((fl & O_SYNC) ? __WASI_FDFLAG_SYNC : 0));
fdstat->fs_rights_base = (uint64_t)-1; // all rights
fdstat->fs_rights_inheriting = (uint64_t)-1; // all rights
m3ApiReturn(__WASI_ESUCCESS);
}
m3ApiRawFunction(m3_wasi_unstable_fd_fdstat_set_flags)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_fd_t , fd)
m3ApiGetArg (__wasi_fdflags_t , flags)
// TODO
m3ApiReturn(__WASI_ESUCCESS);
}
m3ApiRawFunction(m3_wasi_unstable_fd_seek)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_fd_t , fd)
m3ApiGetArg (__wasi_filedelta_t , offset)
m3ApiGetArg (__wasi_whence_t , whence)
m3ApiGetArgMem (__wasi_filesize_t* , result)
m3ApiGetArg (__wasi_whence_t , wasi_whence)
m3ApiGetArgMem (__wasi_filesize_t * , result)
if (runtime == NULL || result == NULL) { m3ApiReturn(__WASI_EINVAL); }
int wasi_whence = whence == __WASI_WHENCE_END ? SEEK_END :
__WASI_WHENCE_CUR ? SEEK_CUR : 0;
int64_t ret;
ret = lseek(fd, offset, wasi_whence);
int whence;
switch (wasi_whence) {
case __WASI_WHENCE_CUR: whence = SEEK_CUR; break;
case __WASI_WHENCE_END: whence = SEEK_END; break;
case __WASI_WHENCE_SET: whence = SEEK_SET; break;
default: m3ApiReturn(__WASI_EINVAL);
}
int64_t ret;
ret = lseek(fd, offset, whence);
if (ret < 0) { m3ApiReturn(errno_to_wasi(errno)); }
*result = ret;
m3ApiWriteMem64(result, ret);
m3ApiReturn(__WASI_ESUCCESS);
}
@ -255,7 +277,7 @@ m3ApiRawFunction(m3_wasi_unstable_path_open)
m3ApiGetArg (__wasi_fd_t , dirfd)
m3ApiGetArg (__wasi_lookupflags_t , dirflags)
m3ApiGetArgMem (const char * , path)
m3ApiGetArg (uint32_t , path_len)
m3ApiGetArg (__wasi_size_t , path_len)
m3ApiGetArg (__wasi_oflags_t , oflags)
m3ApiGetArg (__wasi_rights_t , fs_rights_base)
m3ApiGetArg (__wasi_rights_t , fs_rights_inheriting)
@ -269,7 +291,7 @@ m3ApiRawFunction(m3_wasi_unstable_path_open)
char host_path [path_len+1];
memcpy (host_path, path, path_len);
host_path [path_len] = '\0'; // NULL terminator
host_path[path_len] = '\0'; // NULL terminator
// TODO
m3ApiReturn(__WASI_ENOSYS);
@ -279,17 +301,16 @@ m3ApiRawFunction(m3_wasi_unstable_fd_read)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_fd_t , fd)
m3ApiGetArg (uint32_t , iovs_offset)
m3ApiGetArgMem (wasi_iovec_t * , wasi_iovs)
m3ApiGetArg (__wasi_size_t , iovs_len)
m3ApiGetArgMem (__wasi_size_t* , nread)
m3ApiGetArgMem (__wasi_size_t * , nread)
if (runtime == NULL || nread == NULL) { m3ApiReturn(__WASI_EINVAL); }
ssize_t res = 0;
struct wasi_iovec *wasi_iov = m3ApiOffsetToPtr(iovs_offset);
for (__wasi_size_t i = 0; i < iovs_len; i++) {
void* addr = m3ApiOffsetToPtr(wasi_iov[i].iov_base);
size_t len = wasi_iov[i].iov_len;
void* addr = m3ApiOffsetToPtr(m3ApiReadMem32(&wasi_iovs[i].buf));
size_t len = m3ApiReadMem32(&wasi_iovs[i].buf_len);
if (len == 0) continue;
int ret = read (fd, addr, len);
@ -297,7 +318,7 @@ m3ApiRawFunction(m3_wasi_unstable_fd_read)
res += ret;
if ((size_t)ret < len) break;
}
*nread = res;
m3ApiWriteMem32(nread, res);
m3ApiReturn(__WASI_ESUCCESS);
}
@ -305,17 +326,16 @@ m3ApiRawFunction(m3_wasi_unstable_fd_write)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_fd_t , fd)
m3ApiGetArg (uint32_t , iovs_offset)
m3ApiGetArgMem (wasi_iovec_t * , wasi_iovs)
m3ApiGetArg (__wasi_size_t , iovs_len)
m3ApiGetArgMem (__wasi_size_t* , nwritten)
m3ApiGetArgMem (__wasi_size_t * , nwritten)
if (runtime == NULL || nwritten == NULL) { m3ApiReturn(__WASI_EINVAL); }
ssize_t res = 0;
struct wasi_iovec *wasi_iov = m3ApiOffsetToPtr(iovs_offset);
for (__wasi_size_t i = 0; i < iovs_len; i++) {
void* addr = m3ApiOffsetToPtr(wasi_iov[i].iov_base);
size_t len = wasi_iov[i].iov_len;
void* addr = m3ApiOffsetToPtr(m3ApiReadMem32(&wasi_iovs[i].buf));
size_t len = m3ApiReadMem32(&wasi_iovs[i].buf_len);
if (len == 0) continue;
int ret = write (fd, addr, len);
@ -323,7 +343,7 @@ m3ApiRawFunction(m3_wasi_unstable_fd_write)
res += ret;
if ((size_t)ret < len) break;
}
*nwritten = res;
m3ApiWriteMem32(nwritten, res);
m3ApiReturn(__WASI_ESUCCESS);
}
@ -348,19 +368,19 @@ m3ApiRawFunction(m3_wasi_unstable_fd_datasync)
m3ApiRawFunction(m3_wasi_unstable_random_get)
{
m3ApiReturnType (uint32_t)
m3ApiGetArgMem (uint8_t* , buf)
m3ApiGetArgMem (uint8_t * , buf)
m3ApiGetArg (__wasi_size_t , buflen)
while (1) {
ssize_t retlen = 0;
#if defined(__wasi__) || defined(__APPLE__) || defined(__ANDROID_API__) || defined(__OpenBSD__)
size_t reqlen = M3_MIN(buflen, 256);
if (getentropy(buf, reqlen) < 0) {
retlen = -1;
} else {
retlen = reqlen;
}
size_t reqlen = M3_MIN (buflen, 256);
# if defined(__APPLE__) && (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
retlen = SecRandomCopyBytes(kSecRandomDefault, reqlen, buf) < 0 ? -1 : reqlen;
# else
retlen = getentropy(buf, reqlen) < 0 ? -1 : reqlen;
# endif
#elif defined(__FreeBSD__) || defined(__linux__)
retlen = getrandom(buf, buflen, 0);
#elif defined(_WIN32)
@ -388,7 +408,7 @@ m3ApiRawFunction(m3_wasi_unstable_clock_res_get)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_clockid_t , wasi_clk_id)
m3ApiGetArgMem (__wasi_timestamp_t* , resolution)
m3ApiGetArgMem (__wasi_timestamp_t * , resolution)
if (runtime == NULL || resolution == NULL) { m3ApiReturn(__WASI_EINVAL); }
@ -396,10 +416,11 @@ m3ApiRawFunction(m3_wasi_unstable_clock_res_get)
if (clk < 0) m3ApiReturn(__WASI_EINVAL);
struct timespec tp;
if (clock_getres(clk, &tp) != 0)
*resolution = 1000000;
else
*resolution = convert_timespec(&tp);
if (clock_getres(clk, &tp) != 0) {
m3ApiWriteMem64(resolution, 1000000);
} else {
m3ApiWriteMem64(resolution, convert_timespec(&tp));
}
m3ApiReturn(__WASI_ESUCCESS);
}
@ -409,7 +430,7 @@ m3ApiRawFunction(m3_wasi_unstable_clock_time_get)
m3ApiReturnType (uint32_t)
m3ApiGetArg (__wasi_clockid_t , wasi_clk_id)
m3ApiGetArg (__wasi_timestamp_t , precision)
m3ApiGetArgMem (__wasi_timestamp_t* , time)
m3ApiGetArgMem (__wasi_timestamp_t * , time)
if (runtime == NULL || time == NULL) { m3ApiReturn(__WASI_EINVAL); }
@ -421,15 +442,16 @@ m3ApiRawFunction(m3_wasi_unstable_clock_time_get)
m3ApiReturn(errno_to_wasi(errno));
}
*time = convert_timespec(&tp);
m3ApiWriteMem64(time, convert_timespec(&tp));
m3ApiReturn(__WASI_ESUCCESS);
}
m3ApiRawFunction(m3_wasi_unstable_proc_exit)
{
m3ApiReturnType (uint32_t)
m3ApiGetArg (uint32_t, code)
runtime->exit_code = code;
m3ApiTrap(m3Err_trapExit);
}
@ -448,35 +470,64 @@ M3Result m3_LinkEspWASI (IM3Module module)
{
M3Result result = m3Err_none;
const char* wasi = "wasi_unstable";
// TODO: Preopen dirs
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "args_sizes_get", "i(**)", &m3_wasi_unstable_args_sizes_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "environ_sizes_get", "i(**)", &m3_wasi_unstable_environ_sizes_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "args_get", "i(**)", &m3_wasi_unstable_args_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "environ_get", "i(**)", &m3_wasi_unstable_environ_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_prestat_dir_name", "i(i*i)", &m3_wasi_unstable_fd_prestat_dir_name)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_prestat_get", "i(i*)", &m3_wasi_unstable_fd_prestat_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_open", "i(ii*iiiii*)", &m3_wasi_unstable_path_open)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_fdstat_get", "i(i*)", &m3_wasi_unstable_fd_fdstat_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_write", "i(iii*)", &m3_wasi_unstable_fd_write)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_read", "i(iii*)", &m3_wasi_unstable_fd_read)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_seek", "i(iii*)", &m3_wasi_unstable_fd_seek)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_datasync", "i(i)", &m3_wasi_unstable_fd_datasync)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_close", "i(i)", &m3_wasi_unstable_fd_close)));
static const char* namespaces[2] = { "wasi_unstable", "wasi_snapshot_preview1" };
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "sock_send", "i()", &...)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "sock_recv", "i()", &...)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "random_get", "i(*i)", &m3_wasi_unstable_random_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "clock_res_get", "i(i*)", &m3_wasi_unstable_clock_res_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "clock_time_get", "i(ii*)", &m3_wasi_unstable_clock_time_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "proc_exit", "i(i)", &m3_wasi_unstable_proc_exit)));
for (int i=0; i<2; i++)
{
const char* wasi = namespaces[i];
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "args_get", "i(**)", &m3_wasi_unstable_args_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "args_sizes_get", "i(**)", &m3_wasi_unstable_args_sizes_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "clock_res_get", "i(i*)", &m3_wasi_unstable_clock_res_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "clock_time_get", "i(iI*)", &m3_wasi_unstable_clock_time_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "environ_get", "i(**)", &m3_wasi_unstable_environ_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "environ_sizes_get", "i(**)", &m3_wasi_unstable_environ_sizes_get)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_advise", "i(iIIi)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_allocate", "i(iII)", )));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_close", "i(i)", &m3_wasi_unstable_fd_close)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_datasync", "i(i)", &m3_wasi_unstable_fd_datasync)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_fdstat_get", "i(i*)", &m3_wasi_unstable_fd_fdstat_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_fdstat_set_flags", "i(ii)", &m3_wasi_unstable_fd_fdstat_set_flags)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_fdstat_set_rights", "i(iII)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_filestat_get", "i(i*)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_filestat_set_size", "i(iI)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_filestat_set_times","i(iIIi)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_pread", "i(i*iI*)",)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_prestat_get", "i(i*)", &m3_wasi_unstable_fd_prestat_get)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_prestat_dir_name", "i(i*i)", &m3_wasi_unstable_fd_prestat_dir_name)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_pwrite", "i(i*iI*)",)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_read", "i(i*i*)", &m3_wasi_unstable_fd_read)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_readdir", "i(i*iI*)",)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_renumber", "i(ii)", )));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_seek", "i(iIi*)", &m3_wasi_unstable_fd_seek)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_sync", "i(i)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_tell", "i(i*)", )));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "fd_write", "i(i*i*)", &m3_wasi_unstable_fd_write)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_create_directory", "i(i*i)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_filestat_get", "i(ii*i*)", &m3_wasi_unstable_path_filestat_get)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_filestat_set_times", "i(ii*iIIi)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_link", "i(ii*ii*i)", )));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_open", "i(ii*iiIIi*)", &m3_wasi_unstable_path_open)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_readlink", "i(i*i*i*)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_remove_directory", "i(i*i)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_rename", "i(i*ii*i)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_symlink", "i(*ii*i)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "path_unlink_file", "i(i*i)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "poll_oneoff", "i(**i*)", &m3_wasi_unstable_poll_oneoff)));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "proc_exit", "v(i)", &m3_wasi_unstable_proc_exit)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "proc_raise", "i(i)", )));
_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "random_get", "i(*i)", &m3_wasi_unstable_random_get)));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "sched_yield", "i()", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "sock_recv", "i(i*ii**)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "sock_send", "i(i*ii*)", )));
//_ (SuppressLookupFailure (m3_LinkRawFunction (module, wasi, "sock_shutdown", "i(ii)", )));
}
_catch:
return result;

Loading…
Cancel
Save