diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index c71d82f178..44f98aafb2 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -61,6 +61,7 @@ var depsRules = ` internal/trace/traceviewer/format, log/internal, math/bits, + structs, unicode, unicode/utf8, unicode/utf16; @@ -78,7 +79,8 @@ var depsRules = ` internal/goexperiment, internal/goos, internal/profilerecord, - math/bits + math/bits, + structs < internal/bytealg < internal/stringslite < internal/itoa diff --git a/src/internal/syscall/unix/at_wasip1.go b/src/internal/syscall/unix/at_wasip1.go index 888b156741..45ae22afcc 100644 --- a/src/internal/syscall/unix/at_wasip1.go +++ b/src/internal/syscall/unix/at_wasip1.go @@ -27,11 +27,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (int, error) { var nwritten size errno := path_readlink( int32(dirfd), - unsafe.Pointer(unsafe.StringData(path)), + unsafe.StringData(path), size(len(path)), - unsafe.Pointer(&buf[0]), + &buf[0], size(len(buf)), - unsafe.Pointer(&nwritten)) + &nwritten) return int(nwritten), errnoErr(errno) } @@ -42,7 +42,7 @@ type ( //go:wasmimport wasi_snapshot_preview1 path_readlink //go:noescape -func path_readlink(fd int32, path unsafe.Pointer, pathLen size, buf unsafe.Pointer, bufLen size, nwritten unsafe.Pointer) syscall.Errno +func path_readlink(fd int32, path *byte, pathLen size, buf *byte, bufLen size, nwritten *size) syscall.Errno func Mkdirat(dirfd int, path string, mode uint32) error { if path == "" { @@ -50,14 +50,14 @@ func Mkdirat(dirfd int, path string, mode uint32) error { } return errnoErr(path_create_directory( int32(dirfd), - unsafe.Pointer(unsafe.StringData(path)), + unsafe.StringData(path), size(len(path)), )) } //go:wasmimport wasi_snapshot_preview1 path_create_directory //go:noescape -func path_create_directory(fd int32, path unsafe.Pointer, pathLen size) syscall.Errno +func path_create_directory(fd int32, path *byte, pathLen size) syscall.Errno func errnoErr(errno syscall.Errno) error { if errno == 0 { diff --git a/src/runtime/netpoll_wasip1.go b/src/runtime/netpoll_wasip1.go index e6b299a20f..c7e66a64dd 100644 --- a/src/runtime/netpoll_wasip1.go +++ b/src/runtime/netpoll_wasip1.go @@ -209,7 +209,7 @@ func netpoll(delay int64) (gList, int32) { retry: var nevents size - errno := poll_oneoff(unsafe.Pointer(&pollsubs[0]), unsafe.Pointer(&evts[0]), uint32(len(pollsubs)), unsafe.Pointer(&nevents)) + errno := poll_oneoff(&pollsubs[0], &evts[0], uint32(len(pollsubs)), &nevents) if errno != 0 { if errno != _EINTR { println("errno=", errno, " len(pollsubs)=", len(pollsubs)) diff --git a/src/runtime/os_wasip1.go b/src/runtime/os_wasip1.go index acac2b3f7a..ed4f646a62 100644 --- a/src/runtime/os_wasip1.go +++ b/src/runtime/os_wasip1.go @@ -6,7 +6,10 @@ package runtime -import "unsafe" +import ( + "structs" + "unsafe" +) // GOARCH=wasm currently has 64 bits pointers, but the WebAssembly host expects // pointers to be 32 bits so we use this type alias to represent pointers in @@ -48,31 +51,31 @@ func exit(code int32) //go:wasmimport wasi_snapshot_preview1 args_get //go:noescape -func args_get(argv, argvBuf unsafe.Pointer) errno +func args_get(argv *uintptr32, argvBuf *byte) errno //go:wasmimport wasi_snapshot_preview1 args_sizes_get //go:noescape -func args_sizes_get(argc, argvBufLen unsafe.Pointer) errno +func args_sizes_get(argc, argvBufLen *size) errno //go:wasmimport wasi_snapshot_preview1 clock_time_get //go:noescape -func clock_time_get(clock_id clockid, precision timestamp, time unsafe.Pointer) errno +func clock_time_get(clock_id clockid, precision timestamp, time *timestamp) errno //go:wasmimport wasi_snapshot_preview1 environ_get //go:noescape -func environ_get(environ, environBuf unsafe.Pointer) errno +func environ_get(environ *uintptr32, environBuf *byte) errno //go:wasmimport wasi_snapshot_preview1 environ_sizes_get //go:noescape -func environ_sizes_get(environCount, environBufLen unsafe.Pointer) errno +func environ_sizes_get(environCount, environBufLen *size) errno //go:wasmimport wasi_snapshot_preview1 fd_write //go:noescape -func fd_write(fd int32, iovs unsafe.Pointer, iovsLen size, nwritten unsafe.Pointer) errno +func fd_write(fd int32, iovs unsafe.Pointer, iovsLen size, nwritten *size) errno //go:wasmimport wasi_snapshot_preview1 random_get //go:noescape -func random_get(buf unsafe.Pointer, bufLen size) errno +func random_get(buf *byte, bufLen size) errno type eventtype = uint8 @@ -99,6 +102,7 @@ type userdata = uint64 // struct size because errno is declared as a 32 bits type, so we declare the // error field as a plain uint16. type event struct { + _ structs.HostLayout userdata userdata error uint16 typ eventtype @@ -106,6 +110,7 @@ type event struct { } type eventFdReadwrite struct { + _ structs.HostLayout nbytes filesize flags eventrwflags } @@ -117,6 +122,7 @@ const ( ) type subscriptionClock struct { + _ structs.HostLayout id clockid timeout timestamp precision timestamp @@ -124,10 +130,12 @@ type subscriptionClock struct { } type subscriptionFdReadwrite struct { + _ structs.HostLayout fd int32 } type subscription struct { + _ structs.HostLayout userdata userdata u subscriptionUnion } @@ -148,7 +156,7 @@ func (u *subscriptionUnion) subscriptionFdReadwrite() *subscriptionFdReadwrite { //go:wasmimport wasi_snapshot_preview1 poll_oneoff //go:noescape -func poll_oneoff(in, out unsafe.Pointer, nsubscriptions size, nevents unsafe.Pointer) errno +func poll_oneoff(in *subscription, out *event, nsubscriptions size, nevents *size) errno func write1(fd uintptr, p unsafe.Pointer, n int32) int32 { iov := iovec{ @@ -156,7 +164,7 @@ func write1(fd uintptr, p unsafe.Pointer, n int32) int32 { bufLen: size(n), } var nwritten size - if fd_write(int32(fd), unsafe.Pointer(&iov), 1, unsafe.Pointer(&nwritten)) != 0 { + if fd_write(int32(fd), unsafe.Pointer(&iov), 1, &nwritten) != 0 { throw("fd_write failed") } return int32(nwritten) @@ -175,13 +183,13 @@ func usleep(usec uint32) { subscription.timeout = timestamp(usec) * 1e3 subscription.precision = 1e3 - if poll_oneoff(unsafe.Pointer(&in), unsafe.Pointer(&out), 1, unsafe.Pointer(&nevents)) != 0 { + if poll_oneoff(&in, &out, 1, &nevents) != 0 { throw("wasi_snapshot_preview1.poll_oneoff") } } func readRandom(r []byte) int { - if random_get(unsafe.Pointer(&r[0]), size(len(r))) != 0 { + if random_get(&r[0], size(len(r))) != 0 { return 0 } return len(r) @@ -191,7 +199,7 @@ func goenvs() { // arguments var argc size var argvBufLen size - if args_sizes_get(unsafe.Pointer(&argc), unsafe.Pointer(&argvBufLen)) != 0 { + if args_sizes_get(&argc, &argvBufLen) != 0 { throw("args_sizes_get failed") } @@ -199,7 +207,7 @@ func goenvs() { if argc > 0 { argv := make([]uintptr32, argc) argvBuf := make([]byte, argvBufLen) - if args_get(unsafe.Pointer(&argv[0]), unsafe.Pointer(&argvBuf[0])) != 0 { + if args_get(&argv[0], &argvBuf[0]) != 0 { throw("args_get failed") } @@ -216,7 +224,7 @@ func goenvs() { // environment var environCount size var environBufLen size - if environ_sizes_get(unsafe.Pointer(&environCount), unsafe.Pointer(&environBufLen)) != 0 { + if environ_sizes_get(&environCount, &environBufLen) != 0 { throw("environ_sizes_get failed") } @@ -224,7 +232,7 @@ func goenvs() { if environCount > 0 { environ := make([]uintptr32, environCount) environBuf := make([]byte, environBufLen) - if environ_get(unsafe.Pointer(&environ[0]), unsafe.Pointer(&environBuf[0])) != 0 { + if environ_get(&environ[0], &environBuf[0]) != 0 { throw("environ_get failed") } @@ -245,7 +253,7 @@ func walltime() (sec int64, nsec int32) { func walltime1() (sec int64, nsec int32) { var time timestamp - if clock_time_get(clockRealtime, 0, unsafe.Pointer(&time)) != 0 { + if clock_time_get(clockRealtime, 0, &time) != 0 { throw("clock_time_get failed") } return int64(time / 1000000000), int32(time % 1000000000) @@ -253,7 +261,7 @@ func walltime1() (sec int64, nsec int32) { func nanotime1() int64 { var time timestamp - if clock_time_get(clockMonotonic, 0, unsafe.Pointer(&time)) != 0 { + if clock_time_get(clockMonotonic, 0, &time) != 0 { throw("clock_time_get failed") } return int64(time) diff --git a/src/syscall/fs_wasip1.go b/src/syscall/fs_wasip1.go index da36d8f5b8..0eff07e95a 100644 --- a/src/syscall/fs_wasip1.go +++ b/src/syscall/fs_wasip1.go @@ -9,6 +9,7 @@ package syscall import ( "internal/stringslite" "runtime" + "structs" "unsafe" ) @@ -40,6 +41,7 @@ type filedelta = int64 type fstflags = uint32 type iovec struct { + _ structs.HostLayout buf uintptr32 bufLen size } @@ -190,23 +192,23 @@ func fd_filestat_set_size(fd int32, set_size filesize) Errno // //go:wasmimport wasi_snapshot_preview1 fd_pread //go:noescape -func fd_pread(fd int32, iovs unsafe.Pointer, iovsLen size, offset filesize, nread unsafe.Pointer) Errno +func fd_pread(fd int32, iovs *iovec, iovsLen size, offset filesize, nread *size) Errno //go:wasmimport wasi_snapshot_preview1 fd_pwrite //go:noescape -func fd_pwrite(fd int32, iovs unsafe.Pointer, iovsLen size, offset filesize, nwritten unsafe.Pointer) Errno +func fd_pwrite(fd int32, iovs *iovec, iovsLen size, offset filesize, nwritten *size) Errno //go:wasmimport wasi_snapshot_preview1 fd_read //go:noescape -func fd_read(fd int32, iovs unsafe.Pointer, iovsLen size, nread unsafe.Pointer) Errno +func fd_read(fd int32, iovs *iovec, iovsLen size, nread *size) Errno //go:wasmimport wasi_snapshot_preview1 fd_readdir //go:noescape -func fd_readdir(fd int32, buf unsafe.Pointer, bufLen size, cookie dircookie, nwritten unsafe.Pointer) Errno +func fd_readdir(fd int32, buf *byte, bufLen size, cookie dircookie, nwritten *size) Errno //go:wasmimport wasi_snapshot_preview1 fd_seek //go:noescape -func fd_seek(fd int32, offset filedelta, whence uint32, newoffset unsafe.Pointer) Errno +func fd_seek(fd int32, offset filedelta, whence uint32, newoffset *filesize) Errno // https://github.com/WebAssembly/WASI/blob/a2b96e81c0586125cc4dc79a5be0b78d9a059925/legacy/preview1/docs.md#-fd_fdstat_set_rightsfd-fd-fs_rights_base-rights-fs_rights_inheriting-rights---result-errno // @@ -220,7 +222,7 @@ func fd_filestat_get(fd int32, buf unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 fd_write //go:noescape -func fd_write(fd int32, iovs unsafe.Pointer, iovsLen size, nwritten unsafe.Pointer) Errno +func fd_write(fd int32, iovs *iovec, iovsLen size, nwritten *size) Errno //go:wasmimport wasi_snapshot_preview1 fd_sync //go:noescape @@ -228,52 +230,53 @@ func fd_sync(fd int32) Errno //go:wasmimport wasi_snapshot_preview1 path_create_directory //go:noescape -func path_create_directory(fd int32, path unsafe.Pointer, pathLen size) Errno +func path_create_directory(fd int32, path *byte, pathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_filestat_get //go:noescape -func path_filestat_get(fd int32, flags lookupflags, path unsafe.Pointer, pathLen size, buf unsafe.Pointer) Errno +func path_filestat_get(fd int32, flags lookupflags, path *byte, pathLen size, buf unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 path_filestat_set_times //go:noescape -func path_filestat_set_times(fd int32, flags lookupflags, path unsafe.Pointer, pathLen size, atim timestamp, mtim timestamp, fstflags fstflags) Errno +func path_filestat_set_times(fd int32, flags lookupflags, path *byte, pathLen size, atim timestamp, mtim timestamp, fstflags fstflags) Errno //go:wasmimport wasi_snapshot_preview1 path_link //go:noescape -func path_link(oldFd int32, oldFlags lookupflags, oldPath unsafe.Pointer, oldPathLen size, newFd int32, newPath unsafe.Pointer, newPathLen size) Errno +func path_link(oldFd int32, oldFlags lookupflags, oldPath *byte, oldPathLen size, newFd int32, newPath *byte, newPathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_readlink //go:noescape -func path_readlink(fd int32, path unsafe.Pointer, pathLen size, buf unsafe.Pointer, bufLen size, nwritten unsafe.Pointer) Errno +func path_readlink(fd int32, path *byte, pathLen size, buf *byte, bufLen size, nwritten *size) Errno //go:wasmimport wasi_snapshot_preview1 path_remove_directory //go:noescape -func path_remove_directory(fd int32, path unsafe.Pointer, pathLen size) Errno +func path_remove_directory(fd int32, path *byte, pathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_rename //go:noescape -func path_rename(oldFd int32, oldPath unsafe.Pointer, oldPathLen size, newFd int32, newPath unsafe.Pointer, newPathLen size) Errno +func path_rename(oldFd int32, oldPath *byte, oldPathLen size, newFd int32, newPath *byte, newPathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_symlink //go:noescape -func path_symlink(oldPath unsafe.Pointer, oldPathLen size, fd int32, newPath unsafe.Pointer, newPathLen size) Errno +func path_symlink(oldPath *byte, oldPathLen size, fd int32, newPath *byte, newPathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_unlink_file //go:noescape -func path_unlink_file(fd int32, path unsafe.Pointer, pathLen size) Errno +func path_unlink_file(fd int32, path *byte, pathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_open //go:noescape -func path_open(rootFD int32, dirflags lookupflags, path unsafe.Pointer, pathLen size, oflags oflags, fsRightsBase rights, fsRightsInheriting rights, fsFlags fdflags, fd unsafe.Pointer) Errno +func path_open(rootFD int32, dirflags lookupflags, path *byte, pathLen size, oflags oflags, fsRightsBase rights, fsRightsInheriting rights, fsFlags fdflags, fd *int32) Errno //go:wasmimport wasi_snapshot_preview1 random_get //go:noescape -func random_get(buf unsafe.Pointer, bufLen size) Errno +func random_get(buf *byte, bufLen size) Errno // https://github.com/WebAssembly/WASI/blob/a2b96e81c0586125cc4dc79a5be0b78d9a059925/legacy/preview1/docs.md#-fdstat-record // fdflags must be at offset 2, hence the uint16 type rather than the // fdflags (uint32) type. type fdstat struct { + _ structs.HostLayout filetype filetype fdflags uint16 rightsBase rights @@ -282,7 +285,7 @@ type fdstat struct { //go:wasmimport wasi_snapshot_preview1 fd_fdstat_get //go:noescape -func fd_fdstat_get(fd int32, buf unsafe.Pointer) Errno +func fd_fdstat_get(fd int32, buf *fdstat) Errno //go:wasmimport wasi_snapshot_preview1 fd_fdstat_set_flags //go:noescape @@ -293,7 +296,7 @@ func fd_fdstat_set_flags(fd int32, flags fdflags) Errno func fd_fdstat_get_flags(fd int) (uint32, error) { var stat fdstat - errno := fd_fdstat_get(int32(fd), unsafe.Pointer(&stat)) + errno := fd_fdstat_get(int32(fd), &stat) return uint32(stat.fdflags), errnoErr(errno) } @@ -302,7 +305,7 @@ func fd_fdstat_get_flags(fd int) (uint32, error) { func fd_fdstat_get_type(fd int) (uint8, error) { var stat fdstat - errno := fd_fdstat_get(int32(fd), unsafe.Pointer(&stat)) + errno := fd_fdstat_get(int32(fd), &stat) return stat.filetype, errnoErr(errno) } @@ -313,21 +316,23 @@ const ( ) type prestatDir struct { + _ structs.HostLayout prNameLen size } type prestat struct { + _ structs.HostLayout typ preopentype dir prestatDir } //go:wasmimport wasi_snapshot_preview1 fd_prestat_get //go:noescape -func fd_prestat_get(fd int32, prestat unsafe.Pointer) Errno +func fd_prestat_get(fd int32, prestat *prestat) Errno //go:wasmimport wasi_snapshot_preview1 fd_prestat_dir_name //go:noescape -func fd_prestat_dir_name(fd int32, path unsafe.Pointer, pathLen size) Errno +func fd_prestat_dir_name(fd int32, path *byte, pathLen size) Errno type opendir struct { fd int32 @@ -354,7 +359,7 @@ func init() { for preopenFd := int32(3); ; preopenFd++ { var prestat prestat - errno := fd_prestat_get(preopenFd, unsafe.Pointer(&prestat)) + errno := fd_prestat_get(preopenFd, &prestat) if errno == EBADF { break } @@ -368,7 +373,7 @@ func init() { dirNameBuf = make([]byte, prestat.dir.prNameLen) } - errno = fd_prestat_dir_name(preopenFd, unsafe.Pointer(&dirNameBuf[0]), prestat.dir.prNameLen) + errno = fd_prestat_dir_name(preopenFd, &dirNameBuf[0], prestat.dir.prNameLen) if errno != 0 { panic("fd_prestat_dir_name: " + errno.Error()) } @@ -488,7 +493,7 @@ func isDir(path string) bool { // // If the path argument is not absolute, it is first appended to the current // working directory before resolution. -func preparePath(path string) (int32, unsafe.Pointer, size) { +func preparePath(path string) (int32, *byte, size) { var dirFd = int32(-1) var dirName string @@ -512,7 +517,7 @@ func preparePath(path string) (int32, unsafe.Pointer, size) { path = "." } - return dirFd, stringPointer(path), size(len(path)) + return dirFd, unsafe.StringData(path), size(len(path)) } func Open(path string, openmode int, perm uint32) (int, error) { @@ -524,10 +529,10 @@ func Open(path string, openmode int, perm uint32) (int, error) { } func Openat(dirFd int, path string, openmode int, perm uint32) (int, error) { - return openat(int32(dirFd), stringPointer(path), size(len(path)), openmode, perm) + return openat(int32(dirFd), unsafe.StringData(path), size(len(path)), openmode, perm) } -func openat(dirFd int32, pathPtr unsafe.Pointer, pathLen size, openmode int, perm uint32) (int, error) { +func openat(dirFd int32, pathPtr *byte, pathLen size, openmode int, perm uint32) (int, error) { var oflags oflags if (openmode & O_CREATE) != 0 { oflags |= OFLAG_CREATE @@ -580,7 +585,7 @@ func openat(dirFd int32, pathPtr unsafe.Pointer, pathLen size, openmode int, per rights, fileRights, fdflags, - unsafe.Pointer(&fd), + &fd, ) if errno == EISDIR && oflags == 0 && fdflags == 0 && ((rights & writeRights) == 0) { // wasmtime and wasmedge will error if attempting to open a directory @@ -601,7 +606,7 @@ func openat(dirFd int32, pathPtr unsafe.Pointer, pathLen size, openmode int, per rights&dirRights, fileRights, fdflags, - unsafe.Pointer(&fd), + &fd, ) } return int(fd), errnoErr(errno) @@ -627,7 +632,7 @@ func Mkdir(path string, perm uint32) error { func ReadDir(fd int, buf []byte, cookie dircookie) (int, error) { var nwritten size - errno := fd_readdir(int32(fd), unsafe.Pointer(&buf[0]), size(len(buf)), cookie, unsafe.Pointer(&nwritten)) + errno := fd_readdir(int32(fd), &buf[0], size(len(buf)), cookie, &nwritten) return int(nwritten), errnoErr(errno) } @@ -835,9 +840,9 @@ func Readlink(path string, buf []byte) (n int, err error) { dirFd, pathPtr, pathLen, - unsafe.Pointer(&buf[0]), + &buf[0], size(len(buf)), - unsafe.Pointer(&nwritten), + &nwritten, ) // For some reason wasmtime returns ERANGE when the output buffer is // shorter than the symbolic link value. os.Readlink expects a nil @@ -871,7 +876,7 @@ func Symlink(path, link string) error { } dirFd, pathPtr, pathlen := preparePath(link) errno := path_symlink( - stringPointer(path), + unsafe.StringData(path), size(len(path)), dirFd, pathPtr, @@ -885,52 +890,44 @@ func Fsync(fd int) error { return errnoErr(errno) } -func bytesPointer(b []byte) unsafe.Pointer { - return unsafe.Pointer(unsafe.SliceData(b)) -} - -func stringPointer(s string) unsafe.Pointer { - return unsafe.Pointer(unsafe.StringData(s)) -} - -func makeIOVec(b []byte) unsafe.Pointer { - return unsafe.Pointer(&iovec{ - buf: uintptr32(uintptr(bytesPointer(b))), +func makeIOVec(b []byte) *iovec { + return &iovec{ + buf: uintptr32(uintptr(unsafe.Pointer(unsafe.SliceData(b)))), bufLen: size(len(b)), - }) + } } func Read(fd int, b []byte) (int, error) { var nread size - errno := fd_read(int32(fd), makeIOVec(b), 1, unsafe.Pointer(&nread)) + errno := fd_read(int32(fd), makeIOVec(b), 1, &nread) runtime.KeepAlive(b) return int(nread), errnoErr(errno) } func Write(fd int, b []byte) (int, error) { var nwritten size - errno := fd_write(int32(fd), makeIOVec(b), 1, unsafe.Pointer(&nwritten)) + errno := fd_write(int32(fd), makeIOVec(b), 1, &nwritten) runtime.KeepAlive(b) return int(nwritten), errnoErr(errno) } func Pread(fd int, b []byte, offset int64) (int, error) { var nread size - errno := fd_pread(int32(fd), makeIOVec(b), 1, filesize(offset), unsafe.Pointer(&nread)) + errno := fd_pread(int32(fd), makeIOVec(b), 1, filesize(offset), &nread) runtime.KeepAlive(b) return int(nread), errnoErr(errno) } func Pwrite(fd int, b []byte, offset int64) (int, error) { var nwritten size - errno := fd_pwrite(int32(fd), makeIOVec(b), 1, filesize(offset), unsafe.Pointer(&nwritten)) + errno := fd_pwrite(int32(fd), makeIOVec(b), 1, filesize(offset), &nwritten) runtime.KeepAlive(b) return int(nwritten), errnoErr(errno) } func Seek(fd int, offset int64, whence int) (int64, error) { var newoffset filesize - errno := fd_seek(int32(fd), filedelta(offset), uint32(whence), unsafe.Pointer(&newoffset)) + errno := fd_seek(int32(fd), filedelta(offset), uint32(whence), &newoffset) return int64(newoffset), errnoErr(errno) } @@ -947,6 +944,6 @@ func Pipe(fd []int) error { } func RandomGet(b []byte) error { - errno := random_get(bytesPointer(b), size(len(b))) + errno := random_get(unsafe.SliceData(b), size(len(b))) return errnoErr(errno) } diff --git a/src/syscall/net_wasip1.go b/src/syscall/net_wasip1.go index 3918840a7e..fefd939a0a 100644 --- a/src/syscall/net_wasip1.go +++ b/src/syscall/net_wasip1.go @@ -6,8 +6,6 @@ package syscall -import "unsafe" - const ( SHUT_RD = 0x1 SHUT_WR = 0x2 @@ -18,7 +16,7 @@ type sdflags = uint32 //go:wasmimport wasi_snapshot_preview1 sock_accept //go:noescape -func sock_accept(fd int32, flags fdflags, newfd unsafe.Pointer) Errno +func sock_accept(fd int32, flags fdflags, newfd *int32) Errno //go:wasmimport wasi_snapshot_preview1 sock_shutdown //go:noescape @@ -42,7 +40,7 @@ func Listen(fd int, backlog int) error { func Accept(fd int) (int, Sockaddr, error) { var newfd int32 - errno := sock_accept(int32(fd), 0, unsafe.Pointer(&newfd)) + errno := sock_accept(int32(fd), 0, &newfd) return int(newfd), nil, errnoErr(errno) } diff --git a/src/syscall/syscall_wasip1.go b/src/syscall/syscall_wasip1.go index a125777933..c9225293a0 100644 --- a/src/syscall/syscall_wasip1.go +++ b/src/syscall/syscall_wasip1.go @@ -383,7 +383,7 @@ func Getppid() int { func Gettimeofday(tv *Timeval) error { var time timestamp - if errno := clock_time_get(clockRealtime, 1e3, unsafe.Pointer(&time)); errno != 0 { + if errno := clock_time_get(clockRealtime, 1e3, &time); errno != 0 { return errno } tv.setTimestamp(time) @@ -465,7 +465,7 @@ const ( //go:wasmimport wasi_snapshot_preview1 clock_time_get //go:noescape -func clock_time_get(id clockid, precision timestamp, time unsafe.Pointer) Errno +func clock_time_get(id clockid, precision timestamp, time *timestamp) Errno func SetNonblock(fd int, nonblocking bool) error { flags, err := fd_fdstat_get_flags(fd)