Skip to content

Commit 3f1c9be

Browse files
committed
feat: add all wasi hostcalls used by Go SDK
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
1 parent f3f9969 commit 3f1c9be

File tree

5 files changed

+500
-37
lines changed

5 files changed

+500
-37
lines changed

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
@@ -398,7 +398,9 @@ inline void *WasmBase::allocMemory(uint64_t size, uint64_t *address) {
398398
// logging (stdout/stderr)
399399
"wasi_unstable.fd_write", "wasi_snapshot_preview1.fd_write",
400400
// time
401-
"wasi_unstable.clock_time_get", "wasi_snapshot_preview1.clock_time_get"});
401+
"wasi_unstable.clock_time_get", "wasi_snapshot_preview1.clock_time_get",
402+
// go runtime gc sleep
403+
"wasi_unstable.poll_oneoff", "wasi_snapshot_preview1.poll_oneoff"});
402404
Word a = malloc_(vm_context(), size);
403405
wasm_vm_->setRestrictedCallback(false);
404406
if (!a.u64_) {

include/proxy-wasm/wasm_vm.h

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -114,23 +114,31 @@ using WasmCallback_WWmW = Word (*)(Word, uint64_t, Word);
114114
using WasmCallback_WWWWWWllWW = Word (*)(Word, Word, Word, Word, Word, int64_t, int64_t, Word,
115115
Word);
116116
using WasmCallback_dd = double (*)(double);
117+
// Additional callback types for new WASI functions
118+
using WasmCallback_WWWWmm = Word (*)(Word, Word, Word, Word, uint64_t, uint64_t);
119+
using WasmCallback_WWWWmmW = Word (*)(Word, Word, Word, Word, uint64_t, uint64_t, Word);
120+
using WasmCallback_WWmm = Word (*)(Word, uint64_t, uint64_t);
121+
using WasmCallback_WWmmW = Word (*)(Word, uint64_t, uint64_t, Word);
122+
using WasmCallback_WWWWmW = Word (*)(Word, Word, Word, uint64_t, Word);
117123

118124
#define FOR_ALL_WASM_VM_IMPORTS(_f) \
119125
_f(proxy_wasm::WasmCallbackVoid<0>) _f(proxy_wasm::WasmCallbackVoid<1>) \
120126
_f(proxy_wasm::WasmCallbackVoid<2>) _f(proxy_wasm::WasmCallbackVoid<3>) \
121127
_f(proxy_wasm::WasmCallbackVoid<4>) _f(proxy_wasm::WasmCallbackWord<0>) \
122128
_f(proxy_wasm::WasmCallbackWord<1>) _f(proxy_wasm::WasmCallbackWord<2>) \
123-
_f(proxy_wasm::WasmCallbackWord<3>) _f(proxy_wasm::WasmCallbackWord<4>) \
124-
_f(proxy_wasm::WasmCallbackWord<5>) _f(proxy_wasm::WasmCallbackWord<6>) \
125-
_f(proxy_wasm::WasmCallbackWord<7>) _f(proxy_wasm::WasmCallbackWord<8>) \
126-
_f(proxy_wasm::WasmCallbackWord<9>) \
127-
_f(proxy_wasm::WasmCallbackWord<10>) \
128-
_f(proxy_wasm::WasmCallbackWord<12>) \
129-
_f(proxy_wasm::WasmCallback_WWl) \
130-
_f(proxy_wasm::WasmCallback_WWlWW) \
131-
_f(proxy_wasm::WasmCallback_WWm) \
132-
_f(proxy_wasm::WasmCallback_WWmW) \
133-
_f(proxy_wasm::WasmCallback_WWWWWWllWW) \
129+
_f(proxy_wasm::WasmCallbackWord<3>) _f(proxy_wasm::WasmCallbackWord<4>) _f( \
130+
proxy_wasm::WasmCallbackWord<5>) _f(proxy_wasm::WasmCallbackWord<6>) \
131+
_f(proxy_wasm::WasmCallbackWord<7>) _f(proxy_wasm::WasmCallbackWord<8>) _f( \
132+
proxy_wasm::WasmCallbackWord<9>) _f(proxy_wasm::WasmCallbackWord<10>) \
133+
_f(proxy_wasm::WasmCallbackWord<12>) _f(proxy_wasm::WasmCallback_WWl) \
134+
_f(proxy_wasm::WasmCallback_WWlWW) _f(proxy_wasm::WasmCallback_WWm) \
135+
_f(proxy_wasm::WasmCallback_WWmW) \
136+
_f(proxy_wasm::WasmCallback_WWWWWWllWW) \
137+
_f(proxy_wasm::WasmCallback_WWWWmm) \
138+
_f(proxy_wasm::WasmCallback_WWWWmmW) \
139+
_f(proxy_wasm::WasmCallback_WWmm) \
140+
_f(proxy_wasm::WasmCallback_WWmmW) \
141+
_f(proxy_wasm::WasmCallback_WWWWmW) \
134142
_f(proxy_wasm::WasmCallback_dd)
135143

136144
enum class Cloneable {

0 commit comments

Comments
 (0)