make runtime compatible with wasm
This commit is contained in:
205
runtime/internal/clite/syscall/tables_wasm.go
Normal file
205
runtime/internal/clite/syscall/tables_wasm.go
Normal file
@@ -0,0 +1,205 @@
|
||||
// Copyright 2023 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package syscall
|
||||
|
||||
import "runtime"
|
||||
|
||||
// TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.)
|
||||
const (
|
||||
E2BIG Errno = 1
|
||||
EACCES Errno = 2
|
||||
EADDRINUSE Errno = 3
|
||||
EADDRNOTAVAIL Errno = 4
|
||||
EAFNOSUPPORT Errno = 5
|
||||
EAGAIN Errno = 6
|
||||
EWOULDBLOCK Errno = EAGAIN
|
||||
EALREADY Errno = 7
|
||||
EBADF Errno = 8
|
||||
EBADMSG Errno = 9
|
||||
EBUSY Errno = 10
|
||||
ECANCELED Errno = 11
|
||||
ECHILD Errno = 12
|
||||
ECONNABORTED Errno = 13
|
||||
ECONNREFUSED Errno = 14
|
||||
ECONNRESET Errno = 15
|
||||
EDEADLK Errno = 16
|
||||
EDESTADDRREQ Errno = 17
|
||||
EDOM Errno = 18
|
||||
EDQUOT Errno = 19
|
||||
EEXIST Errno = 20
|
||||
EFAULT Errno = 21
|
||||
EFBIG Errno = 22
|
||||
EHOSTUNREACH Errno = 23
|
||||
EIDRM Errno = 24
|
||||
EILSEQ Errno = 25
|
||||
EINPROGRESS Errno = 26
|
||||
EINTR Errno = 27
|
||||
EINVAL Errno = 28
|
||||
EIO Errno = 29
|
||||
EISCONN Errno = 30
|
||||
EISDIR Errno = 31
|
||||
ELOOP Errno = 32
|
||||
EMFILE Errno = 33
|
||||
EMLINK Errno = 34
|
||||
EMSGSIZE Errno = 35
|
||||
EMULTIHOP Errno = 36
|
||||
ENAMETOOLONG Errno = 37
|
||||
ENETDOWN Errno = 38
|
||||
ENETRESET Errno = 39
|
||||
ENETUNREACH Errno = 40
|
||||
ENFILE Errno = 41
|
||||
ENOBUFS Errno = 42
|
||||
ENODEV Errno = 43
|
||||
ENOENT Errno = 44
|
||||
ENOEXEC Errno = 45
|
||||
ENOLCK Errno = 46
|
||||
ENOLINK Errno = 47
|
||||
ENOMEM Errno = 48
|
||||
ENOMSG Errno = 49
|
||||
ENOPROTOOPT Errno = 50
|
||||
ENOSPC Errno = 51
|
||||
ENOSYS Errno = 52
|
||||
ENOTCONN Errno = 53
|
||||
ENOTDIR Errno = 54
|
||||
ENOTEMPTY Errno = 55
|
||||
ENOTRECOVERABLE Errno = 56
|
||||
ENOTSOCK Errno = 57
|
||||
ENOTSUP Errno = 58
|
||||
ENOTTY Errno = 59
|
||||
ENXIO Errno = 60
|
||||
EOVERFLOW Errno = 61
|
||||
EOWNERDEAD Errno = 62
|
||||
EPERM Errno = 63
|
||||
EPIPE Errno = 64
|
||||
EPROTO Errno = 65
|
||||
EPROTONOSUPPORT Errno = 66
|
||||
EPROTOTYPE Errno = 67
|
||||
ERANGE Errno = 68
|
||||
EROFS Errno = 69
|
||||
ESPIPE Errno = 70
|
||||
ESRCH Errno = 71
|
||||
ESTALE Errno = 72
|
||||
ETIMEDOUT Errno = 73
|
||||
ETXTBSY Errno = 74
|
||||
EXDEV Errno = 75
|
||||
ENOTCAPABLE Errno = 76
|
||||
EBADFD Errno = 77
|
||||
// needed by src/net/error_unix_test.go
|
||||
EOPNOTSUPP = ENOTSUP
|
||||
)
|
||||
|
||||
// TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.)
|
||||
var errorstr = [...]string{
|
||||
E2BIG: "Argument list too long",
|
||||
EACCES: "Permission denied",
|
||||
EADDRINUSE: "Address already in use",
|
||||
EADDRNOTAVAIL: "Address not available",
|
||||
EAFNOSUPPORT: "Address family not supported by protocol family",
|
||||
EAGAIN: "Try again",
|
||||
EALREADY: "Socket already connected",
|
||||
EBADF: "Bad file number",
|
||||
EBADFD: "file descriptor in bad state",
|
||||
EBADMSG: "Trying to read unreadable message",
|
||||
EBUSY: "Device or resource busy",
|
||||
ECANCELED: "Operation canceled.",
|
||||
ECHILD: "No child processes",
|
||||
ECONNABORTED: "Connection aborted",
|
||||
ECONNREFUSED: "Connection refused",
|
||||
ECONNRESET: "Connection reset by peer",
|
||||
EDEADLK: "Deadlock condition",
|
||||
EDESTADDRREQ: "Destination address required",
|
||||
EDOM: "Math arg out of domain of func",
|
||||
EDQUOT: "Quota exceeded",
|
||||
EEXIST: "File exists",
|
||||
EFAULT: "Bad address",
|
||||
EFBIG: "File too large",
|
||||
EHOSTUNREACH: "Host is unreachable",
|
||||
EIDRM: "Identifier removed",
|
||||
EILSEQ: "EILSEQ",
|
||||
EINPROGRESS: "Connection already in progress",
|
||||
EINTR: "Interrupted system call",
|
||||
EINVAL: "Invalid argument",
|
||||
EIO: "I/O error",
|
||||
EISCONN: "Socket is already connected",
|
||||
EISDIR: "Is a directory",
|
||||
ELOOP: "Too many symbolic links",
|
||||
EMFILE: "Too many open files",
|
||||
EMLINK: "Too many links",
|
||||
EMSGSIZE: "Message too long",
|
||||
EMULTIHOP: "Multihop attempted",
|
||||
ENAMETOOLONG: "File name too long",
|
||||
ENETDOWN: "Network interface is not configured",
|
||||
ENETRESET: "Network dropped connection on reset",
|
||||
ENETUNREACH: "Network is unreachable",
|
||||
ENFILE: "File table overflow",
|
||||
ENOBUFS: "No buffer space available",
|
||||
ENODEV: "No such device",
|
||||
ENOENT: "No such file or directory",
|
||||
ENOEXEC: "Exec format error",
|
||||
ENOLCK: "No record locks available",
|
||||
ENOLINK: "The link has been severed",
|
||||
ENOMEM: "Out of memory",
|
||||
ENOMSG: "No message of desired type",
|
||||
ENOPROTOOPT: "Protocol not available",
|
||||
ENOSPC: "No space left on device",
|
||||
ENOSYS: "Not implemented on " + runtime.GOOS,
|
||||
ENOTCONN: "Socket is not connected",
|
||||
ENOTDIR: "Not a directory",
|
||||
ENOTEMPTY: "Directory not empty",
|
||||
ENOTRECOVERABLE: "State not recoverable",
|
||||
ENOTSOCK: "Socket operation on non-socket",
|
||||
ENOTSUP: "Not supported",
|
||||
ENOTTY: "Not a typewriter",
|
||||
ENXIO: "No such device or address",
|
||||
EOVERFLOW: "Value too large for defined data type",
|
||||
EOWNERDEAD: "Owner died",
|
||||
EPERM: "Operation not permitted",
|
||||
EPIPE: "Broken pipe",
|
||||
EPROTO: "Protocol error",
|
||||
EPROTONOSUPPORT: "Unknown protocol",
|
||||
EPROTOTYPE: "Protocol wrong type for socket",
|
||||
ERANGE: "Math result not representable",
|
||||
EROFS: "Read-only file system",
|
||||
ESPIPE: "Illegal seek",
|
||||
ESRCH: "No such process",
|
||||
ESTALE: "Stale file handle",
|
||||
ETIMEDOUT: "Connection timed out",
|
||||
ETXTBSY: "Text file busy",
|
||||
EXDEV: "Cross-device link",
|
||||
ENOTCAPABLE: "Capabilities insufficient",
|
||||
}
|
||||
|
||||
// Do the interface allocations only once for common
|
||||
// Errno values.
|
||||
var (
|
||||
errEAGAIN error = EAGAIN
|
||||
errEINVAL error = EINVAL
|
||||
errENOENT error = ENOENT
|
||||
)
|
||||
|
||||
// errnoErr returns common boxed Errno values, to prevent
|
||||
// allocations at runtime.
|
||||
//
|
||||
// We set both noinline and nosplit to reduce code size, this function has many
|
||||
// call sites in the syscall package, inlining it causes a significant increase
|
||||
// of the compiled code; the function call ultimately does not make a difference
|
||||
// in the performance of syscall functions since the time is dominated by calls
|
||||
// to the imports and path resolution.
|
||||
//
|
||||
//go:noinline
|
||||
//go:nosplit
|
||||
func errnoErr(e Errno) error {
|
||||
switch e {
|
||||
case 0:
|
||||
return nil
|
||||
case EAGAIN:
|
||||
return errEAGAIN
|
||||
case EINVAL:
|
||||
return errEINVAL
|
||||
case ENOENT:
|
||||
return errENOENT
|
||||
}
|
||||
return e
|
||||
}
|
||||
Reference in New Issue
Block a user