diff options
Diffstat (limited to 'src/syscall')
| -rw-r--r-- | src/syscall/fs_wasip1.go | 96 | ||||
| -rw-r--r-- | src/syscall/syscall_wasip1.go | 4 |
2 files changed, 54 insertions, 46 deletions
diff --git a/src/syscall/fs_wasip1.go b/src/syscall/fs_wasip1.go index d2265eb3ee..b331629d79 100644 --- a/src/syscall/fs_wasip1.go +++ b/src/syscall/fs_wasip1.go @@ -118,23 +118,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 *iovec, iovsLen size, offset filesize, nread *size) Errno +func fd_pread(fd int32, iovs unsafe.Pointer, iovsLen size, offset filesize, nread unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 fd_pwrite //go:noescape -func fd_pwrite(fd int32, iovs *iovec, iovsLen size, offset filesize, nwritten *size) Errno +func fd_pwrite(fd int32, iovs unsafe.Pointer, iovsLen size, offset filesize, nwritten unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 fd_read //go:noescape -func fd_read(fd int32, iovs *iovec, iovsLen size, nread *size) Errno +func fd_read(fd int32, iovs unsafe.Pointer, iovsLen size, nread unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 fd_readdir //go:noescape -func fd_readdir(fd int32, buf *byte, bufLen size, cookie dircookie, nwritten *size) Errno +func fd_readdir(fd int32, buf unsafe.Pointer, bufLen size, cookie dircookie, nwritten unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 fd_seek //go:noescape -func fd_seek(fd int32, offset filedelta, whence uint32, newoffset *filesize) Errno +func fd_seek(fd int32, offset filedelta, whence uint32, newoffset unsafe.Pointer) 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 // @@ -144,11 +144,11 @@ func fd_fdstat_set_rights(fd int32, rightsBase rights, rightsInheriting rights) //go:wasmimport wasi_snapshot_preview1 fd_filestat_get //go:noescape -func fd_filestat_get(fd int32, buf *Stat_t) Errno +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 *iovec, iovsLen size, nwritten *size) Errno +func fd_write(fd int32, iovs unsafe.Pointer, iovsLen size, nwritten unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 fd_sync //go:noescape @@ -156,47 +156,47 @@ func fd_sync(fd int32) Errno //go:wasmimport wasi_snapshot_preview1 path_create_directory //go:noescape -func path_create_directory(fd int32, path *byte, pathLen size) Errno +func path_create_directory(fd int32, path unsafe.Pointer, pathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_filestat_get //go:noescape -func path_filestat_get(fd int32, flags lookupflags, path *byte, pathLen size, buf *Stat_t) Errno +func path_filestat_get(fd int32, flags lookupflags, path unsafe.Pointer, 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 *byte, pathLen size, atim timestamp, mtim timestamp, fstflags fstflags) Errno +func path_filestat_set_times(fd int32, flags lookupflags, path unsafe.Pointer, 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 *byte, oldPathLen size, newFd int32, newPath *byte, newPathLen size) Errno +func path_link(oldFd int32, oldFlags lookupflags, oldPath unsafe.Pointer, oldPathLen size, newFd int32, newPath unsafe.Pointer, newPathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_readlink //go:noescape -func path_readlink(fd int32, path *byte, pathLen size, buf *byte, bufLen size, nwritten *size) Errno +func path_readlink(fd int32, path unsafe.Pointer, pathLen size, buf unsafe.Pointer, bufLen size, nwritten unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 path_remove_directory //go:noescape -func path_remove_directory(fd int32, path *byte, pathLen size) Errno +func path_remove_directory(fd int32, path unsafe.Pointer, pathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_rename //go:noescape -func path_rename(oldFd int32, oldPath *byte, oldPathLen size, newFd int32, newPath *byte, newPathLen size) Errno +func path_rename(oldFd int32, oldPath unsafe.Pointer, oldPathLen size, newFd int32, newPath unsafe.Pointer, newPathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_symlink //go:noescape -func path_symlink(oldPath *byte, oldPathLen size, fd int32, newPath *byte, newPathLen size) Errno +func path_symlink(oldPath unsafe.Pointer, oldPathLen size, fd int32, newPath unsafe.Pointer, newPathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_unlink_file //go:noescape -func path_unlink_file(fd int32, path *byte, pathLen size) Errno +func path_unlink_file(fd int32, path unsafe.Pointer, pathLen size) Errno //go:wasmimport wasi_snapshot_preview1 path_open //go:noescape -func path_open(rootFD int32, dirflags lookupflags, path *byte, pathLen size, oflags oflags, fsRightsBase rights, fsRightsInheriting rights, fsFlags fdflags, fd *int32) Errno +func path_open(rootFD int32, dirflags lookupflags, path unsafe.Pointer, pathLen size, oflags oflags, fsRightsBase rights, fsRightsInheriting rights, fsFlags fdflags, fd unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 random_get //go:noescape -func random_get(buf *byte, bufLen size) Errno +func random_get(buf unsafe.Pointer, bufLen size) Errno type preopentype = uint8 @@ -215,11 +215,11 @@ type prestat struct { //go:wasmimport wasi_snapshot_preview1 fd_prestat_get //go:noescape -func fd_prestat_get(fd int32, prestat *prestat) Errno +func fd_prestat_get(fd int32, prestat unsafe.Pointer) Errno //go:wasmimport wasi_snapshot_preview1 fd_prestat_dir_name //go:noescape -func fd_prestat_dir_name(fd int32, path *byte, pathLen size) Errno +func fd_prestat_dir_name(fd int32, path unsafe.Pointer, pathLen size) Errno type opendir struct { fd int32 @@ -246,7 +246,7 @@ func init() { for preopenFd := int32(3); ; preopenFd++ { var prestat prestat - errno := fd_prestat_get(preopenFd, &prestat) + errno := fd_prestat_get(preopenFd, unsafe.Pointer(&prestat)) if errno == EBADF { break } @@ -260,7 +260,7 @@ func init() { dirNameBuf = make([]byte, prestat.dir.prNameLen) } - errno = fd_prestat_dir_name(preopenFd, &dirNameBuf[0], prestat.dir.prNameLen) + errno = fd_prestat_dir_name(preopenFd, unsafe.Pointer(&dirNameBuf[0]), prestat.dir.prNameLen) if errno != 0 { panic("fd_prestat_dir_name: " + errno.Error()) } @@ -388,7 +388,7 @@ func hasSuffix(s, x 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, *byte, size) { +func preparePath(path string) (int32, unsafe.Pointer, size) { var dirFd = int32(-1) var dirName string @@ -412,7 +412,7 @@ func preparePath(path string) (int32, *byte, size) { path = "." } - return dirFd, unsafe.StringData(path), size(len(path)) + return dirFd, stringPointer(path), size(len(path)) } func Open(path string, openmode int, perm uint32) (int, error) { @@ -439,7 +439,7 @@ func Open(path string, openmode int, perm uint32) (int, error) { LOOKUP_SYMLINK_FOLLOW, pathPtr, pathLen, - &fi, + unsafe.Pointer(&fi), ); errno != 0 && errno != ENOENT { return -1, errnoErr(errno) } @@ -483,7 +483,7 @@ func Open(path string, openmode int, perm uint32) (int, error) { rights, fullRights, fdflags, - &fd, + unsafe.Pointer(&fd), ) return int(fd), errnoErr(errno) } @@ -508,7 +508,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), &buf[0], size(len(buf)), cookie, &nwritten) + errno := fd_readdir(int32(fd), unsafe.Pointer(&buf[0]), size(len(buf)), cookie, unsafe.Pointer(&nwritten)) return int(nwritten), errnoErr(errno) } @@ -534,7 +534,7 @@ func Stat(path string, st *Stat_t) error { return EINVAL } dirFd, pathPtr, pathLen := preparePath(path) - errno := path_filestat_get(dirFd, LOOKUP_SYMLINK_FOLLOW, pathPtr, pathLen, st) + errno := path_filestat_get(dirFd, LOOKUP_SYMLINK_FOLLOW, pathPtr, pathLen, unsafe.Pointer(st)) setDefaultMode(st) return errnoErr(errno) } @@ -544,13 +544,13 @@ func Lstat(path string, st *Stat_t) error { return EINVAL } dirFd, pathPtr, pathLen := preparePath(path) - errno := path_filestat_get(dirFd, 0, pathPtr, pathLen, st) + errno := path_filestat_get(dirFd, 0, pathPtr, pathLen, unsafe.Pointer(st)) setDefaultMode(st) return errnoErr(errno) } func Fstat(fd int, st *Stat_t) error { - errno := fd_filestat_get(int32(fd), st) + errno := fd_filestat_get(int32(fd), unsafe.Pointer(st)) setDefaultMode(st) return errnoErr(errno) } @@ -676,7 +676,7 @@ func Chdir(path string) error { var stat Stat_t dirFd, pathPtr, pathLen := preparePath(path) - errno := path_filestat_get(dirFd, LOOKUP_SYMLINK_FOLLOW, pathPtr, pathLen, &stat) + errno := path_filestat_get(dirFd, LOOKUP_SYMLINK_FOLLOW, pathPtr, pathLen, unsafe.Pointer(&stat)) if errno != 0 { return errnoErr(errno) } @@ -700,9 +700,9 @@ func Readlink(path string, buf []byte) (n int, err error) { dirFd, pathPtr, pathLen, - &buf[0], + unsafe.Pointer(&buf[0]), size(len(buf)), - &nwritten, + unsafe.Pointer(&nwritten), ) // For some reason wasmtime returns ERANGE when the output buffer is // shorter than the symbolic link value. os.Readlink expects a nil @@ -736,7 +736,7 @@ func Symlink(path, link string) error { } dirFd, pathPtr, pathlen := preparePath(link) errno := path_symlink( - unsafe.StringData(path), + stringPointer(path), size(len(path)), dirFd, pathPtr, @@ -750,44 +750,52 @@ func Fsync(fd int) error { return errnoErr(errno) } -func makeIOVec(b []byte) *iovec { - return &iovec{ - buf: uintptr32(uintptr(unsafe.Pointer(unsafe.SliceData(b)))), +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))), bufLen: size(len(b)), - } + }) } func Read(fd int, b []byte) (int, error) { var nread size - errno := fd_read(int32(fd), makeIOVec(b), 1, &nread) + errno := fd_read(int32(fd), makeIOVec(b), 1, unsafe.Pointer(&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, &nwritten) + errno := fd_write(int32(fd), makeIOVec(b), 1, unsafe.Pointer(&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), &nread) + errno := fd_pread(int32(fd), makeIOVec(b), 1, filesize(offset), unsafe.Pointer(&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), &nwritten) + errno := fd_pwrite(int32(fd), makeIOVec(b), 1, filesize(offset), unsafe.Pointer(&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), &newoffset) + errno := fd_seek(int32(fd), filedelta(offset), uint32(whence), unsafe.Pointer(&newoffset)) return int64(newoffset), errnoErr(errno) } @@ -804,6 +812,6 @@ func Pipe(fd []int) error { } func RandomGet(b []byte) error { - errno := random_get(unsafe.SliceData(b), size(len(b))) + errno := random_get(bytesPointer(b), size(len(b))) return errnoErr(errno) } diff --git a/src/syscall/syscall_wasip1.go b/src/syscall/syscall_wasip1.go index d86688f692..73a461763a 100644 --- a/src/syscall/syscall_wasip1.go +++ b/src/syscall/syscall_wasip1.go @@ -381,7 +381,7 @@ func Getppid() int { func Gettimeofday(tv *Timeval) error { var time timestamp - if errno := clock_time_get(clockRealtime, 1e3, &time); errno != 0 { + if errno := clock_time_get(clockRealtime, 1e3, unsafe.Pointer(&time)); errno != 0 { return errno } tv.setTimestamp(time) @@ -463,4 +463,4 @@ const ( //go:wasmimport wasi_snapshot_preview1 clock_time_get //go:noescape -func clock_time_get(id clockid, precision timestamp, time *timestamp) Errno +func clock_time_get(id clockid, precision timestamp, time unsafe.Pointer) Errno |
