Skip to content

Commit f817556

Browse files
authored
Update wasip3 WITs to 0.3.0-rc-2026-03-15 (WebAssembly#774)
This requires a number of changes throughout the code and additionally requires an updated version of Wasmtime. For now this PR uses the `dev` release but that'll get published as Wasmtime 43.0.0 in a few days.
1 parent 2fc32bc commit f817556

50 files changed

Lines changed: 6630 additions & 1491 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ else()
145145
endif()
146146

147147
set(wasip2-version 0.2.0)
148-
set(wasip3-version 0.3.0-rc-2026-01-06)
148+
set(wasip3-version 0.3.0-rc-2026-03-15)
149149

150150
include(bindings)
151151
include(builtins)

cmake/wasi-wits.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ if(WKG_EXECUTABLE)
1212
OUTPUT_VARIABLE WKG_VERSION
1313
OUTPUT_STRIP_TRAILING_WHITESPACE)
1414

15-
if (NOT (WKG_VERSION MATCHES "0\\.13\\.0"))
16-
message(WARNING "wkg version 0.13.0 is required, found: ${WKG_VERSION}")
15+
if (NOT (WKG_VERSION MATCHES "0\\.15\\.0"))
16+
message(WARNING "wkg version 0.15.0 is required, found: ${WKG_VERSION}")
1717
set(WKG_EXECUTABLE "")
1818
endif()
1919
endif()
@@ -23,7 +23,7 @@ if (NOT WKG_EXECUTABLE)
2323
ba_download(
2424
wkg
2525
"https://github.com/bytecodealliance/wasm-pkg-tools"
26-
"0.13.0"
26+
"0.15.0"
2727
)
2828
ExternalProject_Get_Property(wkg DOWNLOADED_FILE)
2929
set(wkg_bin ${DOWNLOADED_FILE})

expected/wasm32-wasip3/defined-symbols.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,9 @@ fileno_unlocked
618618
filesystem_borrow_descriptor
619619
filesystem_descriptor_drop_own
620620
filesystem_descriptor_stat_free
621+
filesystem_descriptor_type_free
621622
filesystem_directory_entry_free
623+
filesystem_error_code_free
622624
filesystem_future_result_void_error_code_cancel_read
623625
filesystem_future_result_void_error_code_cancel_write
624626
filesystem_future_result_void_error_code_drop_readable
@@ -833,6 +835,7 @@ inet_pton
833835
initstate
834836
insque
835837
ioctl
838+
ip_name_lookup_error_code_free
836839
ip_name_lookup_ip_address_free
837840
ip_name_lookup_list_ip_address_free
838841
ip_name_lookup_resolve_addresses
@@ -1226,6 +1229,7 @@ snprintf
12261229
socket
12271230
sockets_borrow_tcp_socket
12281231
sockets_borrow_udp_socket
1232+
sockets_error_code_free
12291233
sockets_future_result_void_error_code_cancel_read
12301234
sockets_future_result_void_error_code_cancel_write
12311235
sockets_future_result_void_error_code_drop_readable
@@ -1315,6 +1319,13 @@ sscanf
13151319
stat
13161320
statvfs
13171321
stderr
1322+
stderr_future_result_void_error_code_cancel_read
1323+
stderr_future_result_void_error_code_cancel_write
1324+
stderr_future_result_void_error_code_drop_readable
1325+
stderr_future_result_void_error_code_drop_writable
1326+
stderr_future_result_void_error_code_new
1327+
stderr_future_result_void_error_code_read
1328+
stderr_future_result_void_error_code_write
13181329
stderr_result_void_error_code_free
13191330
stderr_write_via_stream
13201331
stdin
@@ -1335,6 +1346,13 @@ stdin_stream_u8_new
13351346
stdin_stream_u8_read
13361347
stdin_stream_u8_write
13371348
stdout
1349+
stdout_future_result_void_error_code_cancel_read
1350+
stdout_future_result_void_error_code_cancel_write
1351+
stdout_future_result_void_error_code_drop_readable
1352+
stdout_future_result_void_error_code_drop_writable
1353+
stdout_future_result_void_error_code_new
1354+
stdout_future_result_void_error_code_read
1355+
stdout_future_result_void_error_code_write
13381356
stdout_result_void_error_code_free
13391357
stdout_write_via_stream
13401358
stpcpy

expected/wasm32-wasip3/predefined-macros.txt

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -373,14 +373,14 @@
373373
#define FILESYSTEM_DESCRIPTOR_FLAGS_READ (1 << 0)
374374
#define FILESYSTEM_DESCRIPTOR_FLAGS_REQUESTED_WRITE_SYNC (1 << 4)
375375
#define FILESYSTEM_DESCRIPTOR_FLAGS_WRITE (1 << 1)
376-
#define FILESYSTEM_DESCRIPTOR_TYPE_BLOCK_DEVICE 1
377-
#define FILESYSTEM_DESCRIPTOR_TYPE_CHARACTER_DEVICE 2
378-
#define FILESYSTEM_DESCRIPTOR_TYPE_DIRECTORY 3
379-
#define FILESYSTEM_DESCRIPTOR_TYPE_FIFO 4
380-
#define FILESYSTEM_DESCRIPTOR_TYPE_REGULAR_FILE 6
381-
#define FILESYSTEM_DESCRIPTOR_TYPE_SOCKET 7
382-
#define FILESYSTEM_DESCRIPTOR_TYPE_SYMBOLIC_LINK 5
383-
#define FILESYSTEM_DESCRIPTOR_TYPE_UNKNOWN 0
376+
#define FILESYSTEM_DESCRIPTOR_TYPE_BLOCK_DEVICE 0
377+
#define FILESYSTEM_DESCRIPTOR_TYPE_CHARACTER_DEVICE 1
378+
#define FILESYSTEM_DESCRIPTOR_TYPE_DIRECTORY 2
379+
#define FILESYSTEM_DESCRIPTOR_TYPE_FIFO 3
380+
#define FILESYSTEM_DESCRIPTOR_TYPE_OTHER 7
381+
#define FILESYSTEM_DESCRIPTOR_TYPE_REGULAR_FILE 5
382+
#define FILESYSTEM_DESCRIPTOR_TYPE_SOCKET 6
383+
#define FILESYSTEM_DESCRIPTOR_TYPE_SYMBOLIC_LINK 4
384384
#define FILESYSTEM_ERROR_CODE_ACCESS 0
385385
#define FILESYSTEM_ERROR_CODE_ALREADY 1
386386
#define FILESYSTEM_ERROR_CODE_BAD_DESCRIPTOR 2
@@ -410,6 +410,7 @@
410410
#define FILESYSTEM_ERROR_CODE_NO_LOCK 20
411411
#define FILESYSTEM_ERROR_CODE_NO_SUCH_DEVICE 28
412412
#define FILESYSTEM_ERROR_CODE_NO_TTY 27
413+
#define FILESYSTEM_ERROR_CODE_OTHER 36
413414
#define FILESYSTEM_ERROR_CODE_OVERFLOW 29
414415
#define FILESYSTEM_ERROR_CODE_PIPE 31
415416
#define FILESYSTEM_ERROR_CODE_QUOTA 5
@@ -1003,12 +1004,12 @@
10031004
#define IP_MULTICAST_IF 32
10041005
#define IP_MULTICAST_LOOP 34
10051006
#define IP_MULTICAST_TTL 33
1006-
#define IP_NAME_LOOKUP_ERROR_CODE_ACCESS_DENIED 1
1007-
#define IP_NAME_LOOKUP_ERROR_CODE_INVALID_ARGUMENT 2
1008-
#define IP_NAME_LOOKUP_ERROR_CODE_NAME_UNRESOLVABLE 3
1009-
#define IP_NAME_LOOKUP_ERROR_CODE_PERMANENT_RESOLVER_FAILURE 5
1010-
#define IP_NAME_LOOKUP_ERROR_CODE_TEMPORARY_RESOLVER_FAILURE 4
1011-
#define IP_NAME_LOOKUP_ERROR_CODE_UNKNOWN 0
1007+
#define IP_NAME_LOOKUP_ERROR_CODE_ACCESS_DENIED 0
1008+
#define IP_NAME_LOOKUP_ERROR_CODE_INVALID_ARGUMENT 1
1009+
#define IP_NAME_LOOKUP_ERROR_CODE_NAME_UNRESOLVABLE 2
1010+
#define IP_NAME_LOOKUP_ERROR_CODE_OTHER 5
1011+
#define IP_NAME_LOOKUP_ERROR_CODE_PERMANENT_RESOLVER_FAILURE 4
1012+
#define IP_NAME_LOOKUP_ERROR_CODE_TEMPORARY_RESOLVER_FAILURE 3
10121013
#define IP_NODEFRAG 22
10131014
#define IP_OFFMASK 0x1fff
10141015
#define IP_OPTIONS 4
@@ -1781,20 +1782,21 @@
17811782
#define SLC_XON 15
17821783
#define SNDPIPE 0x002
17831784
#define SNDZERO 0x001
1784-
#define SOCKETS_ERROR_CODE_ACCESS_DENIED 1
1785-
#define SOCKETS_ERROR_CODE_ADDRESS_IN_USE 8
1786-
#define SOCKETS_ERROR_CODE_ADDRESS_NOT_BINDABLE 7
1785+
#define SOCKETS_ERROR_CODE_ACCESS_DENIED 0
1786+
#define SOCKETS_ERROR_CODE_ADDRESS_IN_USE 7
1787+
#define SOCKETS_ERROR_CODE_ADDRESS_NOT_BINDABLE 6
17871788
#define SOCKETS_ERROR_CODE_CONNECTION_ABORTED 12
1788-
#define SOCKETS_ERROR_CODE_CONNECTION_REFUSED 10
1789+
#define SOCKETS_ERROR_CODE_CONNECTION_BROKEN 10
1790+
#define SOCKETS_ERROR_CODE_CONNECTION_REFUSED 9
17891791
#define SOCKETS_ERROR_CODE_CONNECTION_RESET 11
17901792
#define SOCKETS_ERROR_CODE_DATAGRAM_TOO_LARGE 13
1791-
#define SOCKETS_ERROR_CODE_INVALID_ARGUMENT 3
1792-
#define SOCKETS_ERROR_CODE_INVALID_STATE 6
1793-
#define SOCKETS_ERROR_CODE_NOT_SUPPORTED 2
1794-
#define SOCKETS_ERROR_CODE_OUT_OF_MEMORY 4
1795-
#define SOCKETS_ERROR_CODE_REMOTE_UNREACHABLE 9
1796-
#define SOCKETS_ERROR_CODE_TIMEOUT 5
1797-
#define SOCKETS_ERROR_CODE_UNKNOWN 0
1793+
#define SOCKETS_ERROR_CODE_INVALID_ARGUMENT 2
1794+
#define SOCKETS_ERROR_CODE_INVALID_STATE 5
1795+
#define SOCKETS_ERROR_CODE_NOT_SUPPORTED 1
1796+
#define SOCKETS_ERROR_CODE_OTHER 14
1797+
#define SOCKETS_ERROR_CODE_OUT_OF_MEMORY 3
1798+
#define SOCKETS_ERROR_CODE_REMOTE_UNREACHABLE 8
1799+
#define SOCKETS_ERROR_CODE_TIMEOUT 4
17981800
#define SOCKETS_IP_ADDRESS_FAMILY_IPV4 0
17991801
#define SOCKETS_IP_ADDRESS_FAMILY_IPV6 1
18001802
#define SOCKETS_IP_ADDRESS_IPV4 0

expected/wasm32-wasip3/undefined-symbols.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,13 @@ sockets_stream_u8__drop_writable
185185
sockets_stream_u8__new
186186
sockets_stream_u8__read
187187
sockets_stream_u8__write
188+
stderr_future_result_void_error_code__cancel_read
189+
stderr_future_result_void_error_code__cancel_write
190+
stderr_future_result_void_error_code__drop_readable
191+
stderr_future_result_void_error_code__drop_writable
192+
stderr_future_result_void_error_code__new
193+
stderr_future_result_void_error_code__read
194+
stderr_future_result_void_error_code__write
188195
stdin_future_result_void_error_code__cancel_read
189196
stdin_future_result_void_error_code__cancel_write
190197
stdin_future_result_void_error_code__drop_readable
@@ -199,3 +206,10 @@ stdin_stream_u8__drop_writable
199206
stdin_stream_u8__new
200207
stdin_stream_u8__read
201208
stdin_stream_u8__write
209+
stdout_future_result_void_error_code__cancel_read
210+
stdout_future_result_void_error_code__cancel_write
211+
stdout_future_result_void_error_code__drop_readable
212+
stdout_future_result_void_error_code__drop_writable
213+
stdout_future_result_void_error_code__new
214+
stdout_future_result_void_error_code__read
215+
stdout_future_result_void_error_code__write

libc-bottom-half/cloudlibc/src/common/errors.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
#include <wasi/api.h>
22

33
#if defined(__wasip2__) || defined(__wasip3__)
4+
#include <assert.h>
45
#include <errno.h>
56
#include <stdlib.h>
67

7-
static inline void translate_error(filesystem_error_code_t error) {
8-
switch (error) {
8+
static inline void translate_error(filesystem_error_code_t *error) {
9+
#ifdef __wasip2__
10+
switch (*error) {
11+
#else
12+
switch (error->tag) {
13+
#endif
914
case FILESYSTEM_ERROR_CODE_ACCESS:
1015
errno = EACCES;
1116
break;
@@ -119,6 +124,16 @@ static inline void translate_error(filesystem_error_code_t error) {
119124
case FILESYSTEM_ERROR_CODE_CROSS_DEVICE:
120125
errno = EXDEV;
121126
break;
127+
#ifdef __wasip3__
128+
case FILESYSTEM_ERROR_CODE_OTHER:
129+
errno = EIO;
130+
if (error->val.other.is_some) {
131+
assert(error->val.other.val.ptr);
132+
free(error->val.other.val.ptr);
133+
error->val.other.is_some = false;
134+
}
135+
break;
136+
#endif
122137
default:
123138
abort(); // Unreachable
124139
}

libc-bottom-half/cloudlibc/src/libc/dirent/fdopendir.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ DIR *fdopendir(int fd) {
6666
&error_code);
6767
if (!ok) {
6868
free(dirp);
69-
translate_error(error_code);
69+
translate_error(&error_code);
7070
return NULL;
7171
}
7272

libc-bottom-half/cloudlibc/src/libc/dirent/readdir.c

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ static int ensure_has_directory_stream(DIR *dirp, filesystem_borrow_descriptor_t
161161
&dirp->stream,
162162
&error_code);
163163
if (!ok) {
164-
translate_error(error_code);
164+
translate_error(&error_code);
165165
return -1;
166166
}
167167
#elif defined(__wasip3__)
@@ -190,7 +190,7 @@ static struct dirent *readdir_next(DIR *dirp) {
190190
&metadata,
191191
&error_code);
192192
if (!ok) {
193-
translate_error(error_code);
193+
translate_error(&error_code);
194194
return NULL;
195195
}
196196
dirp->dirent->d_ino = metadata.lower;
@@ -221,7 +221,7 @@ static struct dirent *readdir_next(DIR *dirp) {
221221
&dir_entry_optional,
222222
&error_code);
223223
if (!ok) {
224-
translate_error(error_code);
224+
translate_error(&error_code);
225225
return NULL;
226226
}
227227

@@ -263,7 +263,7 @@ static struct dirent *readdir_next(DIR *dirp) {
263263
filesystem_future_result_void_error_code_drop_readable(dirp->stream.f1);
264264
dirp->stream.f1 = 0;
265265
if (result.is_err)
266-
translate_error(result.val.err);
266+
translate_error(&result.val.err);
267267
}
268268

269269
// The stream is closed, so return NULL. If `errno` needs to be set it'll
@@ -277,16 +277,12 @@ static struct dirent *readdir_next(DIR *dirp) {
277277
// Ensure that the dirent is large enough to fit the filename
278278
size_t the_size = offsetof(struct dirent, d_name);
279279
if (grow(&dirp->dirent, &dirp->dirent_size, the_size + dir_entry.name.len + 1) == NULL) {
280-
#ifdef __wasip2__
281-
wasip2_string_free(&dir_entry.name);
282-
#else
283-
wasip3_string_free(&dir_entry.name);
284-
#endif
280+
filesystem_directory_entry_free(&dir_entry);
285281
return NULL;
286282
}
287283

288284
// Fill out `d_type` and `d_name`
289-
dirp->dirent->d_type = dir_entry_type_to_d_type(dir_entry.type);
285+
dirp->dirent->d_type = dir_entry_type_to_d_type(&dir_entry.type);
290286
memcpy(dirp->dirent->d_name, dir_entry.name.ptr, dir_entry.name.len);
291287
dirp->dirent->d_name[dir_entry.name.len] = '\0';
292288

@@ -297,13 +293,9 @@ static struct dirent *readdir_next(DIR *dirp) {
297293
&dir_entry.name,
298294
&metadata,
299295
&error_code);
300-
#ifdef __wasip2__
301-
wasip2_string_free(&dir_entry.name);
302-
#else
303-
wasip3_string_free(&dir_entry.name);
304-
#endif
296+
filesystem_directory_entry_free(&dir_entry);
305297
if (!ok) {
306-
translate_error(error_code);
298+
translate_error(&error_code);
307299
return NULL;
308300
}
309301
dirp->dirent->d_ino = metadata.lower;

libc-bottom-half/cloudlibc/src/libc/fcntl/openat.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ int __wasilibc_nocwd_openat_nomode(int fd, const char *path, int oflag) {
155155
&new_handle,
156156
&error_code);
157157
if (!ok) {
158-
translate_error(error_code);
158+
translate_error(&error_code);
159159
return -1;
160160
}
161161

libc-bottom-half/cloudlibc/src/libc/fcntl/posix_fadvise.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ int posix_fadvise(int fd, off_t offset, off_t len, int advice) {
6767
}
6868
bool ok = filesystem_method_descriptor_advise(file_handle, offset, len, fs_advice, &error_code);
6969
if (!ok) {
70-
translate_error(error_code);
70+
translate_error(&error_code);
7171
return errno;
7272
}
7373
return 0;

0 commit comments

Comments
 (0)