| // 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. | |
| package syscall | |
| // TODO: generate with runtime/mknacl.sh, allow override with IRT. | |
| 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 Native Client", | |
| 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 | |
| } |