blob: a7c4f8c890fbdb8261129ab820e6790b25a0d417 [file] [log] [blame]
// Copyright 2013 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.
// +build js,wasm
package syscall
import "runtime"
// These were originally used by Nacl, then later also used by
// js/wasm. Now that they're only used by js/wasm, these numbers are
// just arbitrary.
//
// TODO: delete? replace with something meaningful?
const (
sys_null = 1
sys_nameservice = 2
sys_dup = 8
sys_dup2 = 9
sys_open = 10
sys_close = 11
sys_read = 12
sys_write = 13
sys_lseek = 14
sys_stat = 16
sys_fstat = 17
sys_chmod = 18
sys_isatty = 19
sys_brk = 20
sys_mmap = 21
sys_munmap = 22
sys_getdents = 23
sys_mprotect = 24
sys_list_mappings = 25
sys_exit = 30
sys_getpid = 31
sys_sched_yield = 32
sys_sysconf = 33
sys_gettimeofday = 40
sys_clock = 41
sys_nanosleep = 42
sys_clock_getres = 43
sys_clock_gettime = 44
sys_mkdir = 45
sys_rmdir = 46
sys_chdir = 47
sys_getcwd = 48
sys_unlink = 49
sys_imc_makeboundsock = 60
sys_imc_accept = 61
sys_imc_connect = 62
sys_imc_sendmsg = 63
sys_imc_recvmsg = 64
sys_imc_mem_obj_create = 65
sys_imc_socketpair = 66
sys_mutex_create = 70
sys_mutex_lock = 71
sys_mutex_trylock = 72
sys_mutex_unlock = 73
sys_cond_create = 74
sys_cond_wait = 75
sys_cond_signal = 76
sys_cond_broadcast = 77
sys_cond_timed_wait_abs = 79
sys_thread_create = 80
sys_thread_exit = 81
sys_tls_init = 82
sys_thread_nice = 83
sys_tls_get = 84
sys_second_tls_set = 85
sys_second_tls_get = 86
sys_exception_handler = 87
sys_exception_stack = 88
sys_exception_clear_flag = 89
sys_sem_create = 100
sys_sem_wait = 101
sys_sem_post = 102
sys_sem_get_value = 103
sys_dyncode_create = 104
sys_dyncode_modify = 105
sys_dyncode_delete = 106
sys_test_infoleak = 109
sys_test_crash = 110
sys_test_syscall_1 = 111
sys_test_syscall_2 = 112
sys_futex_wait_abs = 120
sys_futex_wake = 121
sys_pread = 130
sys_pwrite = 131
sys_truncate = 140
sys_lstat = 141
sys_link = 142
sys_rename = 143
sys_symlink = 144
sys_access = 145
sys_readlink = 146
sys_utimes = 147
sys_get_random_bytes = 150
)
// TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.)
const (
// native_client/src/trusted/service_runtime/include/sys/errno.h
// The errors are mainly copied from Linux.
EPERM Errno = 1 /* Operation not permitted */
ENOENT Errno = 2 /* No such file or directory */
ESRCH Errno = 3 /* No such process */
EINTR Errno = 4 /* Interrupted system call */
EIO Errno = 5 /* I/O error */
ENXIO Errno = 6 /* No such device or address */
E2BIG Errno = 7 /* Argument list too long */
ENOEXEC Errno = 8 /* Exec format error */
EBADF Errno = 9 /* Bad file number */
ECHILD Errno = 10 /* No child processes */
EAGAIN Errno = 11 /* Try again */
ENOMEM Errno = 12 /* Out of memory */
EACCES Errno = 13 /* Permission denied */
EFAULT Errno = 14 /* Bad address */
EBUSY Errno = 16 /* Device or resource busy */
EEXIST Errno = 17 /* File exists */
EXDEV Errno = 18 /* Cross-device link */
ENODEV Errno = 19 /* No such device */
ENOTDIR Errno = 20 /* Not a directory */
EISDIR Errno = 21 /* Is a directory */
EINVAL Errno = 22 /* Invalid argument */
ENFILE Errno = 23 /* File table overflow */
EMFILE Errno = 24 /* Too many open files */
ENOTTY Errno = 25 /* Not a typewriter */
EFBIG Errno = 27 /* File too large */
ENOSPC Errno = 28 /* No space left on device */
ESPIPE Errno = 29 /* Illegal seek */
EROFS Errno = 30 /* Read-only file system */
EMLINK Errno = 31 /* Too many links */
EPIPE Errno = 32 /* Broken pipe */
ENAMETOOLONG Errno = 36 /* File name too long */
ENOSYS Errno = 38 /* Function not implemented */
EDQUOT Errno = 122 /* Quota exceeded */
EDOM Errno = 33 /* Math arg out of domain of func */
ERANGE Errno = 34 /* Math result not representable */
EDEADLK Errno = 35 /* Deadlock condition */
ENOLCK Errno = 37 /* No record locks available */
ENOTEMPTY Errno = 39 /* Directory not empty */
ELOOP Errno = 40 /* Too many symbolic links */
ENOMSG Errno = 42 /* No message of desired type */
EIDRM Errno = 43 /* Identifier removed */
ECHRNG Errno = 44 /* Channel number out of range */
EL2NSYNC Errno = 45 /* Level 2 not synchronized */
EL3HLT Errno = 46 /* Level 3 halted */
EL3RST Errno = 47 /* Level 3 reset */
ELNRNG Errno = 48 /* Link number out of range */
EUNATCH Errno = 49 /* Protocol driver not attached */
ENOCSI Errno = 50 /* No CSI structure available */
EL2HLT Errno = 51 /* Level 2 halted */
EBADE Errno = 52 /* Invalid exchange */
EBADR Errno = 53 /* Invalid request descriptor */
EXFULL Errno = 54 /* Exchange full */
ENOANO Errno = 55 /* No anode */
EBADRQC Errno = 56 /* Invalid request code */
EBADSLT Errno = 57 /* Invalid slot */
EDEADLOCK Errno = EDEADLK /* File locking deadlock error */
EBFONT Errno = 59 /* Bad font file fmt */
ENOSTR Errno = 60 /* Device not a stream */
ENODATA Errno = 61 /* No data (for no delay io) */
ETIME Errno = 62 /* Timer expired */
ENOSR Errno = 63 /* Out of streams resources */
ENONET Errno = 64 /* Machine is not on the network */
ENOPKG Errno = 65 /* Package not installed */
EREMOTE Errno = 66 /* The object is remote */
ENOLINK Errno = 67 /* The link has been severed */
EADV Errno = 68 /* Advertise error */
ESRMNT Errno = 69 /* Srmount error */
ECOMM Errno = 70 /* Communication error on send */
EPROTO Errno = 71 /* Protocol error */
EMULTIHOP Errno = 72 /* Multihop attempted */
EDOTDOT Errno = 73 /* Cross mount point (not really error) */
EBADMSG Errno = 74 /* Trying to read unreadable message */
EOVERFLOW Errno = 75 /* Value too large for defined data type */
ENOTUNIQ Errno = 76 /* Given log. name not unique */
EBADFD Errno = 77 /* f.d. invalid for this operation */
EREMCHG Errno = 78 /* Remote address changed */
ELIBACC Errno = 79 /* Can't access a needed shared lib */
ELIBBAD Errno = 80 /* Accessing a corrupted shared lib */
ELIBSCN Errno = 81 /* .lib section in a.out corrupted */
ELIBMAX Errno = 82 /* Attempting to link in too many libs */
ELIBEXEC Errno = 83 /* Attempting to exec a shared library */
EILSEQ Errno = 84
EUSERS Errno = 87
ENOTSOCK Errno = 88 /* Socket operation on non-socket */
EDESTADDRREQ Errno = 89 /* Destination address required */
EMSGSIZE Errno = 90 /* Message too long */
EPROTOTYPE Errno = 91 /* Protocol wrong type for socket */
ENOPROTOOPT Errno = 92 /* Protocol not available */
EPROTONOSUPPORT Errno = 93 /* Unknown protocol */
ESOCKTNOSUPPORT Errno = 94 /* Socket type not supported */
EOPNOTSUPP Errno = 95 /* Operation not supported on transport endpoint */
EPFNOSUPPORT Errno = 96 /* Protocol family not supported */
EAFNOSUPPORT Errno = 97 /* Address family not supported by protocol family */
EADDRINUSE Errno = 98 /* Address already in use */
EADDRNOTAVAIL Errno = 99 /* Address not available */
ENETDOWN Errno = 100 /* Network interface is not configured */
ENETUNREACH Errno = 101 /* Network is unreachable */
ENETRESET Errno = 102
ECONNABORTED Errno = 103 /* Connection aborted */
ECONNRESET Errno = 104 /* Connection reset by peer */
ENOBUFS Errno = 105 /* No buffer space available */
EISCONN Errno = 106 /* Socket is already connected */
ENOTCONN Errno = 107 /* Socket is not connected */
ESHUTDOWN Errno = 108 /* Can't send after socket shutdown */
ETOOMANYREFS Errno = 109
ETIMEDOUT Errno = 110 /* Connection timed out */
ECONNREFUSED Errno = 111 /* Connection refused */
EHOSTDOWN Errno = 112 /* Host is down */
EHOSTUNREACH Errno = 113 /* Host is unreachable */
EALREADY Errno = 114 /* Socket already connected */
EINPROGRESS Errno = 115 /* Connection already in progress */
ESTALE Errno = 116
ENOTSUP Errno = EOPNOTSUPP /* Not supported */
ENOMEDIUM Errno = 123 /* No medium (in tape drive) */
ECANCELED Errno = 125 /* Operation canceled. */
ELBIN Errno = 2048 /* Inode is remote (not really error) */
EFTYPE Errno = 2049 /* Inappropriate file type or format */
ENMFILE Errno = 2050 /* No more files */
EPROCLIM Errno = 2051
ENOSHARE Errno = 2052 /* No such host or network path */
ECASECLASH Errno = 2053 /* Filename exists with different case */
EWOULDBLOCK Errno = EAGAIN /* Operation would block */
)
// TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.)
var errorstr = [...]string{
EPERM: "Operation not permitted",
ENOENT: "No such file or directory",
ESRCH: "No such process",
EINTR: "Interrupted system call",
EIO: "I/O error",
ENXIO: "No such device or address",
E2BIG: "Argument list too long",
ENOEXEC: "Exec format error",
EBADF: "Bad file number",
ECHILD: "No child processes",
EAGAIN: "Try again",
ENOMEM: "Out of memory",
EACCES: "Permission denied",
EFAULT: "Bad address",
EBUSY: "Device or resource busy",
EEXIST: "File exists",
EXDEV: "Cross-device link",
ENODEV: "No such device",
ENOTDIR: "Not a directory",
EISDIR: "Is a directory",
EINVAL: "Invalid argument",
ENFILE: "File table overflow",
EMFILE: "Too many open files",
ENOTTY: "Not a typewriter",
EFBIG: "File too large",
ENOSPC: "No space left on device",
ESPIPE: "Illegal seek",
EROFS: "Read-only file system",
EMLINK: "Too many links",
EPIPE: "Broken pipe",
ENAMETOOLONG: "File name too long",
ENOSYS: "not implemented on " + runtime.GOOS,
EDQUOT: "Quota exceeded",
EDOM: "Math arg out of domain of func",
ERANGE: "Math result not representable",
EDEADLK: "Deadlock condition",
ENOLCK: "No record locks available",
ENOTEMPTY: "Directory not empty",
ELOOP: "Too many symbolic links",
ENOMSG: "No message of desired type",
EIDRM: "Identifier removed",
ECHRNG: "Channel number out of range",
EL2NSYNC: "Level 2 not synchronized",
EL3HLT: "Level 3 halted",
EL3RST: "Level 3 reset",
ELNRNG: "Link number out of range",
EUNATCH: "Protocol driver not attached",
ENOCSI: "No CSI structure available",
EL2HLT: "Level 2 halted",
EBADE: "Invalid exchange",
EBADR: "Invalid request descriptor",
EXFULL: "Exchange full",
ENOANO: "No anode",
EBADRQC: "Invalid request code",
EBADSLT: "Invalid slot",
EBFONT: "Bad font file fmt",
ENOSTR: "Device not a stream",
ENODATA: "No data (for no delay io)",
ETIME: "Timer expired",
ENOSR: "Out of streams resources",
ENONET: "Machine is not on the network",
ENOPKG: "Package not installed",
EREMOTE: "The object is remote",
ENOLINK: "The link has been severed",
EADV: "Advertise error",
ESRMNT: "Srmount error",
ECOMM: "Communication error on send",
EPROTO: "Protocol error",
EMULTIHOP: "Multihop attempted",
EDOTDOT: "Cross mount point (not really error)",
EBADMSG: "Trying to read unreadable message",
EOVERFLOW: "Value too large for defined data type",
ENOTUNIQ: "Given log. name not unique",
EBADFD: "f.d. invalid for this operation",
EREMCHG: "Remote address changed",
ELIBACC: "Can't access a needed shared lib",
ELIBBAD: "Accessing a corrupted shared lib",
ELIBSCN: ".lib section in a.out corrupted",
ELIBMAX: "Attempting to link in too many libs",
ELIBEXEC: "Attempting to exec a shared library",
ENOTSOCK: "Socket operation on non-socket",
EDESTADDRREQ: "Destination address required",
EMSGSIZE: "Message too long",
EPROTOTYPE: "Protocol wrong type for socket",
ENOPROTOOPT: "Protocol not available",
EPROTONOSUPPORT: "Unknown protocol",
ESOCKTNOSUPPORT: "Socket type not supported",
EOPNOTSUPP: "Operation not supported on transport endpoint",
EPFNOSUPPORT: "Protocol family not supported",
EAFNOSUPPORT: "Address family not supported by protocol family",
EADDRINUSE: "Address already in use",
EADDRNOTAVAIL: "Address not available",
ENETDOWN: "Network interface is not configured",
ENETUNREACH: "Network is unreachable",
ECONNABORTED: "Connection aborted",
ECONNRESET: "Connection reset by peer",
ENOBUFS: "No buffer space available",
EISCONN: "Socket is already connected",
ENOTCONN: "Socket is not connected",
ESHUTDOWN: "Can't send after socket shutdown",
ETIMEDOUT: "Connection timed out",
ECONNREFUSED: "Connection refused",
EHOSTDOWN: "Host is down",
EHOSTUNREACH: "Host is unreachable",
EALREADY: "Socket already connected",
EINPROGRESS: "Connection already in progress",
ENOMEDIUM: "No medium (in tape drive)",
ECANCELED: "Operation canceled.",
ELBIN: "Inode is remote (not really error)",
EFTYPE: "Inappropriate file type or format",
ENMFILE: "No more files",
ENOSHARE: "No such host or network path",
ECASECLASH: "Filename exists with different case",
}
// 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.
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
}
var errnoByCode = map[string]Errno{
"EPERM": EPERM,
"ENOENT": ENOENT,
"ESRCH": ESRCH,
"EINTR": EINTR,
"EIO": EIO,
"ENXIO": ENXIO,
"E2BIG": E2BIG,
"ENOEXEC": ENOEXEC,
"EBADF": EBADF,
"ECHILD": ECHILD,
"EAGAIN": EAGAIN,
"ENOMEM": ENOMEM,
"EACCES": EACCES,
"EFAULT": EFAULT,
"EBUSY": EBUSY,
"EEXIST": EEXIST,
"EXDEV": EXDEV,
"ENODEV": ENODEV,
"ENOTDIR": ENOTDIR,
"EISDIR": EISDIR,
"EINVAL": EINVAL,
"ENFILE": ENFILE,
"EMFILE": EMFILE,
"ENOTTY": ENOTTY,
"EFBIG": EFBIG,
"ENOSPC": ENOSPC,
"ESPIPE": ESPIPE,
"EROFS": EROFS,
"EMLINK": EMLINK,
"EPIPE": EPIPE,
"ENAMETOOLONG": ENAMETOOLONG,
"ENOSYS": ENOSYS,
"EDQUOT": EDQUOT,
"EDOM": EDOM,
"ERANGE": ERANGE,
"EDEADLK": EDEADLK,
"ENOLCK": ENOLCK,
"ENOTEMPTY": ENOTEMPTY,
"ELOOP": ELOOP,
"ENOMSG": ENOMSG,
"EIDRM": EIDRM,
"ECHRNG": ECHRNG,
"EL2NSYNC": EL2NSYNC,
"EL3HLT": EL3HLT,
"EL3RST": EL3RST,
"ELNRNG": ELNRNG,
"EUNATCH": EUNATCH,
"ENOCSI": ENOCSI,
"EL2HLT": EL2HLT,
"EBADE": EBADE,
"EBADR": EBADR,
"EXFULL": EXFULL,
"ENOANO": ENOANO,
"EBADRQC": EBADRQC,
"EBADSLT": EBADSLT,
"EDEADLOCK": EDEADLOCK,
"EBFONT": EBFONT,
"ENOSTR": ENOSTR,
"ENODATA": ENODATA,
"ETIME": ETIME,
"ENOSR": ENOSR,
"ENONET": ENONET,
"ENOPKG": ENOPKG,
"EREMOTE": EREMOTE,
"ENOLINK": ENOLINK,
"EADV": EADV,
"ESRMNT": ESRMNT,
"ECOMM": ECOMM,
"EPROTO": EPROTO,
"EMULTIHOP": EMULTIHOP,
"EDOTDOT": EDOTDOT,
"EBADMSG": EBADMSG,
"EOVERFLOW": EOVERFLOW,
"ENOTUNIQ": ENOTUNIQ,
"EBADFD": EBADFD,
"EREMCHG": EREMCHG,
"ELIBACC": ELIBACC,
"ELIBBAD": ELIBBAD,
"ELIBSCN": ELIBSCN,
"ELIBMAX": ELIBMAX,
"ELIBEXEC": ELIBEXEC,
"EILSEQ": EILSEQ,
"EUSERS": EUSERS,
"ENOTSOCK": ENOTSOCK,
"EDESTADDRREQ": EDESTADDRREQ,
"EMSGSIZE": EMSGSIZE,
"EPROTOTYPE": EPROTOTYPE,
"ENOPROTOOPT": ENOPROTOOPT,
"EPROTONOSUPPORT": EPROTONOSUPPORT,
"ESOCKTNOSUPPORT": ESOCKTNOSUPPORT,
"EOPNOTSUPP": EOPNOTSUPP,
"EPFNOSUPPORT": EPFNOSUPPORT,
"EAFNOSUPPORT": EAFNOSUPPORT,
"EADDRINUSE": EADDRINUSE,
"EADDRNOTAVAIL": EADDRNOTAVAIL,
"ENETDOWN": ENETDOWN,
"ENETUNREACH": ENETUNREACH,
"ENETRESET": ENETRESET,
"ECONNABORTED": ECONNABORTED,
"ECONNRESET": ECONNRESET,
"ENOBUFS": ENOBUFS,
"EISCONN": EISCONN,
"ENOTCONN": ENOTCONN,
"ESHUTDOWN": ESHUTDOWN,
"ETOOMANYREFS": ETOOMANYREFS,
"ETIMEDOUT": ETIMEDOUT,
"ECONNREFUSED": ECONNREFUSED,
"EHOSTDOWN": EHOSTDOWN,
"EHOSTUNREACH": EHOSTUNREACH,
"EALREADY": EALREADY,
"EINPROGRESS": EINPROGRESS,
"ESTALE": ESTALE,
"ENOTSUP": ENOTSUP,
"ENOMEDIUM": ENOMEDIUM,
"ECANCELED": ECANCELED,
"ELBIN": ELBIN,
"EFTYPE": EFTYPE,
"ENMFILE": ENMFILE,
"EPROCLIM": EPROCLIM,
"ENOSHARE": ENOSHARE,
"ECASECLASH": ECASECLASH,
"EWOULDBLOCK": EWOULDBLOCK,
}