Skip to content

Commit 94091cd

Browse files
leonm1johnlanni
andauthored
add all wasi hostcalls used by Go SDK (#533)
In #427, a portion of the wasi hostcalls was added, but not all. Now, all the wasi hostcalls have been included, and their stability has been verified in our multiple go 1.24 compiled wasm plugins --------- Signed-off-by: zty98751 <zty98751@alibaba-inc.com> Signed-off-by: Matt Leon <mattleon@google.com> Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
1 parent 3930b7b commit 94091cd

5 files changed

Lines changed: 506 additions & 40 deletions

File tree

include/proxy-wasm/exports.h

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ Word wasi_unstable_path_open(Word fd, Word dir_flags, Word path, Word path_len,
133133
int64_t fs_rights_base, int64_t fg_rights_inheriting, Word fd_flags,
134134
Word nwritten_ptr);
135135
Word wasi_unstable_fd_prestat_get(Word fd, Word buf_ptr);
136+
Word wasi_unstable_fd_filestat_get(Word fd, Word buf_ptr);
136137
Word wasi_unstable_fd_prestat_dir_name(Word fd, Word path_ptr, Word path_len);
137138
Word wasi_unstable_fd_write(Word fd, Word iovs, Word iovs_len, Word nwritten_ptr);
138139
Word wasi_unstable_fd_read(Word, Word, Word, Word);
@@ -148,9 +149,35 @@ Word wasi_unstable_sched_yield();
148149
Word wasi_unstable_poll_oneoff(Word in, Word out, Word nsubscriptions, Word nevents);
149150
void wasi_unstable_proc_exit(Word);
150151
Word wasi_unstable_clock_time_get(Word, uint64_t, Word);
152+
Word wasi_unstable_clock_res_get(Word, Word);
153+
Word wasi_unstable_fd_advise(Word, uint64_t, uint64_t, Word);
154+
Word wasi_unstable_fd_allocate(Word, uint64_t, uint64_t);
155+
Word wasi_unstable_fd_datasync(Word);
156+
Word wasi_unstable_fd_fdstat_set_rights(Word, uint64_t, uint64_t);
157+
Word wasi_unstable_fd_filestat_set_size(Word, uint64_t);
158+
Word wasi_unstable_fd_filestat_set_times(Word, uint64_t, uint64_t, Word);
159+
Word wasi_unstable_fd_pread(Word, Word, Word, uint64_t, Word);
160+
Word wasi_unstable_fd_pwrite(Word, Word, Word, uint64_t, Word);
161+
Word wasi_unstable_fd_readdir(Word, Word, Word, uint64_t, Word);
162+
Word wasi_unstable_fd_renumber(Word, Word);
163+
Word wasi_unstable_fd_sync(Word);
164+
Word wasi_unstable_fd_tell(Word, Word);
165+
Word wasi_unstable_path_create_directory(Word, Word, Word);
166+
Word wasi_unstable_path_filestat_set_times(Word, Word, Word, Word, uint64_t, uint64_t, Word);
167+
Word wasi_unstable_path_link(Word, Word, Word, Word, Word, Word);
168+
Word wasi_unstable_path_readlink(Word, Word, Word, Word, Word, Word);
169+
Word wasi_unstable_path_remove_directory(Word, Word, Word);
170+
Word wasi_unstable_path_rename(Word, Word, Word, Word, Word, Word);
171+
Word wasi_unstable_path_symlink(Word, Word, Word, Word);
172+
Word wasi_unstable_path_unlink_file(Word, Word, Word);
173+
Word wasi_unstable_sock_accept(Word, Word, Word);
174+
Word wasi_unstable_sock_recv(Word, Word, Word, Word, Word, Word);
175+
Word wasi_unstable_sock_send(Word, Word, Word, Word, Word);
176+
Word wasi_unstable_sock_shutdown(Word, Word);
151177
Word wasi_unstable_random_get(Word, Word);
152178
Word pthread_equal(Word left, Word right);
153179
void emscripten_notify_memory_growth(Word);
180+
Word wasi_unstable_path_filestat_get(Word fd, Word flags, Word path, Word path_len, Word buf);
154181

155182
// Support for embedders, not exported to Wasm.
156183

@@ -174,9 +201,17 @@ void emscripten_notify_memory_growth(Word);
174201

175202
#define FOR_ALL_WASI_FUNCTIONS(_f) \
176203
_f(fd_write) _f(fd_read) _f(fd_seek) _f(fd_close) _f(fd_fdstat_get) _f(fd_fdstat_set_flags) \
177-
_f(environ_get) _f(environ_sizes_get) _f(args_get) _f(args_sizes_get) _f(clock_time_get) \
178-
_f(random_get) _f(sched_yield) _f(poll_oneoff) _f(proc_exit) _f(path_open) \
179-
_f(fd_prestat_get) _f(fd_prestat_dir_name)
204+
_f(fd_fdstat_set_rights) _f(environ_get) _f(environ_sizes_get) _f(args_get) \
205+
_f(args_sizes_get) _f(clock_time_get) _f(clock_res_get) _f(fd_advise) _f(fd_allocate) \
206+
_f(fd_datasync) _f(fd_filestat_set_size) _f(fd_filestat_set_times) _f(fd_pread) \
207+
_f(fd_pwrite) _f(fd_readdir) _f(fd_renumber) _f(fd_sync) _f(fd_tell) \
208+
_f(path_create_directory) _f(path_filestat_set_times) _f(path_link) \
209+
_f(path_readlink) _f(path_remove_directory) _f(path_rename) \
210+
_f(path_symlink) _f(path_unlink_file) _f(sock_accept) _f(sock_recv) \
211+
_f(sock_send) _f(sock_shutdown) _f(random_get) _f(sched_yield) \
212+
_f(poll_oneoff) _f(proc_exit) _f(path_open) \
213+
_f(fd_prestat_get) _f(fd_prestat_dir_name) \
214+
_f(path_filestat_get) _f(fd_filestat_get)
180215

181216
// Helpers to generate a stub to pass to VM, in place of a restricted proxy-wasm capability.
182217
#define _CREATE_PROXY_WASM_STUB(_fn) \

include/proxy-wasm/wasm.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,9 @@ inline void *WasmBase::allocMemory(uint64_t size, uint64_t *address) {
400400
// logging (stdout/stderr)
401401
"wasi_unstable.fd_write", "wasi_snapshot_preview1.fd_write",
402402
// time
403-
"wasi_unstable.clock_time_get", "wasi_snapshot_preview1.clock_time_get"});
403+
"wasi_unstable.clock_time_get", "wasi_snapshot_preview1.clock_time_get",
404+
// go runtime gc sleep
405+
"wasi_unstable.poll_oneoff", "wasi_snapshot_preview1.poll_oneoff"});
404406
Word a = malloc_(vm_context(), size);
405407
wasm_vm_->setRestrictedCallback(false);
406408
if (!a.u64_) {

include/proxy-wasm/wasm_vm.h

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,23 +123,31 @@ using WasmCallback_WWmW = Word (*)(Word, uint64_t, Word);
123123
using WasmCallback_WWWWWWllWW = Word (*)(Word, Word, Word, Word, Word, int64_t, int64_t, Word,
124124
Word);
125125
using WasmCallback_dd = double (*)(double);
126+
// Additional callback types for WASIp1 functions
127+
using WasmCallback_WWWWmm = Word (*)(Word, Word, Word, Word, uint64_t, uint64_t);
128+
using WasmCallback_WWWWmmW = Word (*)(Word, Word, Word, Word, uint64_t, uint64_t, Word);
129+
using WasmCallback_WWmm = Word (*)(Word, uint64_t, uint64_t);
130+
using WasmCallback_WWmmW = Word (*)(Word, uint64_t, uint64_t, Word);
131+
using WasmCallback_WWWWmW = Word (*)(Word, Word, Word, uint64_t, Word);
126132

127133
#define FOR_ALL_WASM_VM_IMPORTS(_f) \
128134
_f(proxy_wasm::WasmCallbackVoid<0>) _f(proxy_wasm::WasmCallbackVoid<1>) \
129135
_f(proxy_wasm::WasmCallbackVoid<2>) _f(proxy_wasm::WasmCallbackVoid<3>) \
130136
_f(proxy_wasm::WasmCallbackVoid<4>) _f(proxy_wasm::WasmCallbackWord<0>) \
131137
_f(proxy_wasm::WasmCallbackWord<1>) _f(proxy_wasm::WasmCallbackWord<2>) \
132-
_f(proxy_wasm::WasmCallbackWord<3>) _f(proxy_wasm::WasmCallbackWord<4>) \
133-
_f(proxy_wasm::WasmCallbackWord<5>) _f(proxy_wasm::WasmCallbackWord<6>) \
134-
_f(proxy_wasm::WasmCallbackWord<7>) _f(proxy_wasm::WasmCallbackWord<8>) \
135-
_f(proxy_wasm::WasmCallbackWord<9>) \
136-
_f(proxy_wasm::WasmCallbackWord<10>) \
137-
_f(proxy_wasm::WasmCallbackWord<12>) \
138-
_f(proxy_wasm::WasmCallback_WWl) \
139-
_f(proxy_wasm::WasmCallback_WWlWW) \
140-
_f(proxy_wasm::WasmCallback_WWm) \
141-
_f(proxy_wasm::WasmCallback_WWmW) \
142-
_f(proxy_wasm::WasmCallback_WWWWWWllWW) \
138+
_f(proxy_wasm::WasmCallbackWord<3>) _f(proxy_wasm::WasmCallbackWord<4>) _f( \
139+
proxy_wasm::WasmCallbackWord<5>) _f(proxy_wasm::WasmCallbackWord<6>) \
140+
_f(proxy_wasm::WasmCallbackWord<7>) _f(proxy_wasm::WasmCallbackWord<8>) _f( \
141+
proxy_wasm::WasmCallbackWord<9>) _f(proxy_wasm::WasmCallbackWord<10>) \
142+
_f(proxy_wasm::WasmCallbackWord<12>) _f(proxy_wasm::WasmCallback_WWl) \
143+
_f(proxy_wasm::WasmCallback_WWlWW) _f(proxy_wasm::WasmCallback_WWm) \
144+
_f(proxy_wasm::WasmCallback_WWmW) \
145+
_f(proxy_wasm::WasmCallback_WWWWWWllWW) \
146+
_f(proxy_wasm::WasmCallback_WWWWmm) \
147+
_f(proxy_wasm::WasmCallback_WWWWmmW) \
148+
_f(proxy_wasm::WasmCallback_WWmm) \
149+
_f(proxy_wasm::WasmCallback_WWmmW) \
150+
_f(proxy_wasm::WasmCallback_WWWWmW) \
143151
_f(proxy_wasm::WasmCallback_dd)
144152

145153
enum class Cloneable {

0 commit comments

Comments
 (0)