1// Copyright 2013 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5//go:build js && wasm 6 7package syscall 8 9import "runtime" 10 11// These were originally used by Nacl, then later also used by 12// js/wasm. Now that they're only used by js/wasm, these numbers are 13// just arbitrary. 14// 15// TODO: delete? replace with something meaningful? 16const ( 17 sys_null = 1 18 sys_nameservice = 2 19 sys_dup = 8 20 sys_dup2 = 9 21 sys_open = 10 22 sys_close = 11 23 sys_read = 12 24 sys_write = 13 25 sys_lseek = 14 26 sys_stat = 16 27 sys_fstat = 17 28 sys_chmod = 18 29 sys_isatty = 19 30 sys_brk = 20 31 sys_mmap = 21 32 sys_munmap = 22 33 sys_getdents = 23 34 sys_mprotect = 24 35 sys_list_mappings = 25 36 sys_exit = 30 37 sys_getpid = 31 38 sys_sched_yield = 32 39 sys_sysconf = 33 40 sys_gettimeofday = 40 41 sys_clock = 41 42 sys_nanosleep = 42 43 sys_clock_getres = 43 44 sys_clock_gettime = 44 45 sys_mkdir = 45 46 sys_rmdir = 46 47 sys_chdir = 47 48 sys_getcwd = 48 49 sys_unlink = 49 50 sys_imc_makeboundsock = 60 51 sys_imc_accept = 61 52 sys_imc_connect = 62 53 sys_imc_sendmsg = 63 54 sys_imc_recvmsg = 64 55 sys_imc_mem_obj_create = 65 56 sys_imc_socketpair = 66 57 sys_mutex_create = 70 58 sys_mutex_lock = 71 59 sys_mutex_trylock = 72 60 sys_mutex_unlock = 73 61 sys_cond_create = 74 62 sys_cond_wait = 75 63 sys_cond_signal = 76 64 sys_cond_broadcast = 77 65 sys_cond_timed_wait_abs = 79 66 sys_thread_create = 80 67 sys_thread_exit = 81 68 sys_tls_init = 82 69 sys_thread_nice = 83 70 sys_tls_get = 84 71 sys_second_tls_set = 85 72 sys_second_tls_get = 86 73 sys_exception_handler = 87 74 sys_exception_stack = 88 75 sys_exception_clear_flag = 89 76 sys_sem_create = 100 77 sys_sem_wait = 101 78 sys_sem_post = 102 79 sys_sem_get_value = 103 80 sys_dyncode_create = 104 81 sys_dyncode_modify = 105 82 sys_dyncode_delete = 106 83 sys_test_infoleak = 109 84 sys_test_crash = 110 85 sys_test_syscall_1 = 111 86 sys_test_syscall_2 = 112 87 sys_futex_wait_abs = 120 88 sys_futex_wake = 121 89 sys_pread = 130 90 sys_pwrite = 131 91 sys_truncate = 140 92 sys_lstat = 141 93 sys_link = 142 94 sys_rename = 143 95 sys_symlink = 144 96 sys_access = 145 97 sys_readlink = 146 98 sys_utimes = 147 99 sys_get_random_bytes = 150 100) 101 102// TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.) 103const ( 104 // native_client/src/trusted/service_runtime/include/sys/errno.h 105 // The errors are mainly copied from Linux. 106 EPERM Errno = 1 /* Operation not permitted */ 107 ENOENT Errno = 2 /* No such file or directory */ 108 ESRCH Errno = 3 /* No such process */ 109 EINTR Errno = 4 /* Interrupted system call */ 110 EIO Errno = 5 /* I/O error */ 111 ENXIO Errno = 6 /* No such device or address */ 112 E2BIG Errno = 7 /* Argument list too long */ 113 ENOEXEC Errno = 8 /* Exec format error */ 114 EBADF Errno = 9 /* Bad file number */ 115 ECHILD Errno = 10 /* No child processes */ 116 EAGAIN Errno = 11 /* Try again */ 117 ENOMEM Errno = 12 /* Out of memory */ 118 EACCES Errno = 13 /* Permission denied */ 119 EFAULT Errno = 14 /* Bad address */ 120 EBUSY Errno = 16 /* Device or resource busy */ 121 EEXIST Errno = 17 /* File exists */ 122 EXDEV Errno = 18 /* Cross-device link */ 123 ENODEV Errno = 19 /* No such device */ 124 ENOTDIR Errno = 20 /* Not a directory */ 125 EISDIR Errno = 21 /* Is a directory */ 126 EINVAL Errno = 22 /* Invalid argument */ 127 ENFILE Errno = 23 /* File table overflow */ 128 EMFILE Errno = 24 /* Too many open files */ 129 ENOTTY Errno = 25 /* Not a typewriter */ 130 EFBIG Errno = 27 /* File too large */ 131 ENOSPC Errno = 28 /* No space left on device */ 132 ESPIPE Errno = 29 /* Illegal seek */ 133 EROFS Errno = 30 /* Read-only file system */ 134 EMLINK Errno = 31 /* Too many links */ 135 EPIPE Errno = 32 /* Broken pipe */ 136 ENAMETOOLONG Errno = 36 /* File name too long */ 137 ENOSYS Errno = 38 /* Function not implemented */ 138 EDQUOT Errno = 122 /* Quota exceeded */ 139 EDOM Errno = 33 /* Math arg out of domain of func */ 140 ERANGE Errno = 34 /* Math result not representable */ 141 EDEADLK Errno = 35 /* Deadlock condition */ 142 ENOLCK Errno = 37 /* No record locks available */ 143 ENOTEMPTY Errno = 39 /* Directory not empty */ 144 ELOOP Errno = 40 /* Too many symbolic links */ 145 ENOMSG Errno = 42 /* No message of desired type */ 146 EIDRM Errno = 43 /* Identifier removed */ 147 ECHRNG Errno = 44 /* Channel number out of range */ 148 EL2NSYNC Errno = 45 /* Level 2 not synchronized */ 149 EL3HLT Errno = 46 /* Level 3 halted */ 150 EL3RST Errno = 47 /* Level 3 reset */ 151 ELNRNG Errno = 48 /* Link number out of range */ 152 EUNATCH Errno = 49 /* Protocol driver not attached */ 153 ENOCSI Errno = 50 /* No CSI structure available */ 154 EL2HLT Errno = 51 /* Level 2 halted */ 155 EBADE Errno = 52 /* Invalid exchange */ 156 EBADR Errno = 53 /* Invalid request descriptor */ 157 EXFULL Errno = 54 /* Exchange full */ 158 ENOANO Errno = 55 /* No anode */ 159 EBADRQC Errno = 56 /* Invalid request code */ 160 EBADSLT Errno = 57 /* Invalid slot */ 161 EDEADLOCK Errno = EDEADLK /* File locking deadlock error */ 162 EBFONT Errno = 59 /* Bad font file fmt */ 163 ENOSTR Errno = 60 /* Device not a stream */ 164 ENODATA Errno = 61 /* No data (for no delay io) */ 165 ETIME Errno = 62 /* Timer expired */ 166 ENOSR Errno = 63 /* Out of streams resources */ 167 ENONET Errno = 64 /* Machine is not on the network */ 168 ENOPKG Errno = 65 /* Package not installed */ 169 EREMOTE Errno = 66 /* The object is remote */ 170 ENOLINK Errno = 67 /* The link has been severed */ 171 EADV Errno = 68 /* Advertise error */ 172 ESRMNT Errno = 69 /* Srmount error */ 173 ECOMM Errno = 70 /* Communication error on send */ 174 EPROTO Errno = 71 /* Protocol error */ 175 EMULTIHOP Errno = 72 /* Multihop attempted */ 176 EDOTDOT Errno = 73 /* Cross mount point (not really error) */ 177 EBADMSG Errno = 74 /* Trying to read unreadable message */ 178 EOVERFLOW Errno = 75 /* Value too large for defined data type */ 179 ENOTUNIQ Errno = 76 /* Given log. name not unique */ 180 EBADFD Errno = 77 /* f.d. invalid for this operation */ 181 EREMCHG Errno = 78 /* Remote address changed */ 182 ELIBACC Errno = 79 /* Can't access a needed shared lib */ 183 ELIBBAD Errno = 80 /* Accessing a corrupted shared lib */ 184 ELIBSCN Errno = 81 /* .lib section in a.out corrupted */ 185 ELIBMAX Errno = 82 /* Attempting to link in too many libs */ 186 ELIBEXEC Errno = 83 /* Attempting to exec a shared library */ 187 EILSEQ Errno = 84 188 EUSERS Errno = 87 189 ENOTSOCK Errno = 88 /* Socket operation on non-socket */ 190 EDESTADDRREQ Errno = 89 /* Destination address required */ 191 EMSGSIZE Errno = 90 /* Message too long */ 192 EPROTOTYPE Errno = 91 /* Protocol wrong type for socket */ 193 ENOPROTOOPT Errno = 92 /* Protocol not available */ 194 EPROTONOSUPPORT Errno = 93 /* Unknown protocol */ 195 ESOCKTNOSUPPORT Errno = 94 /* Socket type not supported */ 196 EOPNOTSUPP Errno = 95 /* Operation not supported on transport endpoint */ 197 EPFNOSUPPORT Errno = 96 /* Protocol family not supported */ 198 EAFNOSUPPORT Errno = 97 /* Address family not supported by protocol family */ 199 EADDRINUSE Errno = 98 /* Address already in use */ 200 EADDRNOTAVAIL Errno = 99 /* Address not available */ 201 ENETDOWN Errno = 100 /* Network interface is not configured */ 202 ENETUNREACH Errno = 101 /* Network is unreachable */ 203 ENETRESET Errno = 102 204 ECONNABORTED Errno = 103 /* Connection aborted */ 205 ECONNRESET Errno = 104 /* Connection reset by peer */ 206 ENOBUFS Errno = 105 /* No buffer space available */ 207 EISCONN Errno = 106 /* Socket is already connected */ 208 ENOTCONN Errno = 107 /* Socket is not connected */ 209 ESHUTDOWN Errno = 108 /* Can't send after socket shutdown */ 210 ETOOMANYREFS Errno = 109 211 ETIMEDOUT Errno = 110 /* Connection timed out */ 212 ECONNREFUSED Errno = 111 /* Connection refused */ 213 EHOSTDOWN Errno = 112 /* Host is down */ 214 EHOSTUNREACH Errno = 113 /* Host is unreachable */ 215 EALREADY Errno = 114 /* Socket already connected */ 216 EINPROGRESS Errno = 115 /* Connection already in progress */ 217 ESTALE Errno = 116 218 ENOTSUP Errno = EOPNOTSUPP /* Not supported */ 219 ENOMEDIUM Errno = 123 /* No medium (in tape drive) */ 220 ECANCELED Errno = 125 /* Operation canceled. */ 221 ELBIN Errno = 2048 /* Inode is remote (not really error) */ 222 EFTYPE Errno = 2049 /* Inappropriate file type or format */ 223 ENMFILE Errno = 2050 /* No more files */ 224 EPROCLIM Errno = 2051 225 ENOSHARE Errno = 2052 /* No such host or network path */ 226 ECASECLASH Errno = 2053 /* Filename exists with different case */ 227 EWOULDBLOCK Errno = EAGAIN /* Operation would block */ 228) 229 230// TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.) 231var errorstr = [...]string{ 232 EPERM: "Operation not permitted", 233 ENOENT: "No such file or directory", 234 ESRCH: "No such process", 235 EINTR: "Interrupted system call", 236 EIO: "I/O error", 237 ENXIO: "No such device or address", 238 E2BIG: "Argument list too long", 239 ENOEXEC: "Exec format error", 240 EBADF: "Bad file number", 241 ECHILD: "No child processes", 242 EAGAIN: "Try again", 243 ENOMEM: "Out of memory", 244 EACCES: "Permission denied", 245 EFAULT: "Bad address", 246 EBUSY: "Device or resource busy", 247 EEXIST: "File exists", 248 EXDEV: "Cross-device link", 249 ENODEV: "No such device", 250 ENOTDIR: "Not a directory", 251 EISDIR: "Is a directory", 252 EINVAL: "Invalid argument", 253 ENFILE: "File table overflow", 254 EMFILE: "Too many open files", 255 ENOTTY: "Not a typewriter", 256 EFBIG: "File too large", 257 ENOSPC: "No space left on device", 258 ESPIPE: "Illegal seek", 259 EROFS: "Read-only file system", 260 EMLINK: "Too many links", 261 EPIPE: "Broken pipe", 262 ENAMETOOLONG: "File name too long", 263 ENOSYS: "not implemented on " + runtime.GOOS, 264 EDQUOT: "Quota exceeded", 265 EDOM: "Math arg out of domain of func", 266 ERANGE: "Math result not representable", 267 EDEADLK: "Deadlock condition", 268 ENOLCK: "No record locks available", 269 ENOTEMPTY: "Directory not empty", 270 ELOOP: "Too many symbolic links", 271 ENOMSG: "No message of desired type", 272 EIDRM: "Identifier removed", 273 ECHRNG: "Channel number out of range", 274 EL2NSYNC: "Level 2 not synchronized", 275 EL3HLT: "Level 3 halted", 276 EL3RST: "Level 3 reset", 277 ELNRNG: "Link number out of range", 278 EUNATCH: "Protocol driver not attached", 279 ENOCSI: "No CSI structure available", 280 EL2HLT: "Level 2 halted", 281 EBADE: "Invalid exchange", 282 EBADR: "Invalid request descriptor", 283 EXFULL: "Exchange full", 284 ENOANO: "No anode", 285 EBADRQC: "Invalid request code", 286 EBADSLT: "Invalid slot", 287 EBFONT: "Bad font file fmt", 288 ENOSTR: "Device not a stream", 289 ENODATA: "No data (for no delay io)", 290 ETIME: "Timer expired", 291 ENOSR: "Out of streams resources", 292 ENONET: "Machine is not on the network", 293 ENOPKG: "Package not installed", 294 EREMOTE: "The object is remote", 295 ENOLINK: "The link has been severed", 296 EADV: "Advertise error", 297 ESRMNT: "Srmount error", 298 ECOMM: "Communication error on send", 299 EPROTO: "Protocol error", 300 EMULTIHOP: "Multihop attempted", 301 EDOTDOT: "Cross mount point (not really error)", 302 EBADMSG: "Trying to read unreadable message", 303 EOVERFLOW: "Value too large for defined data type", 304 ENOTUNIQ: "Given log. name not unique", 305 EBADFD: "f.d. invalid for this operation", 306 EREMCHG: "Remote address changed", 307 ELIBACC: "Can't access a needed shared lib", 308 ELIBBAD: "Accessing a corrupted shared lib", 309 ELIBSCN: ".lib section in a.out corrupted", 310 ELIBMAX: "Attempting to link in too many libs", 311 ELIBEXEC: "Attempting to exec a shared library", 312 ENOTSOCK: "Socket operation on non-socket", 313 EDESTADDRREQ: "Destination address required", 314 EMSGSIZE: "Message too long", 315 EPROTOTYPE: "Protocol wrong type for socket", 316 ENOPROTOOPT: "Protocol not available", 317 EPROTONOSUPPORT: "Unknown protocol", 318 ESOCKTNOSUPPORT: "Socket type not supported", 319 EOPNOTSUPP: "Operation not supported on transport endpoint", 320 EPFNOSUPPORT: "Protocol family not supported", 321 EAFNOSUPPORT: "Address family not supported by protocol family", 322 EADDRINUSE: "Address already in use", 323 EADDRNOTAVAIL: "Address not available", 324 ENETDOWN: "Network interface is not configured", 325 ENETUNREACH: "Network is unreachable", 326 ECONNABORTED: "Connection aborted", 327 ECONNRESET: "Connection reset by peer", 328 ENOBUFS: "No buffer space available", 329 EISCONN: "Socket is already connected", 330 ENOTCONN: "Socket is not connected", 331 ESHUTDOWN: "Can't send after socket shutdown", 332 ETIMEDOUT: "Connection timed out", 333 ECONNREFUSED: "Connection refused", 334 EHOSTDOWN: "Host is down", 335 EHOSTUNREACH: "Host is unreachable", 336 EALREADY: "Socket already connected", 337 EINPROGRESS: "Connection already in progress", 338 ENOMEDIUM: "No medium (in tape drive)", 339 ECANCELED: "Operation canceled.", 340 ELBIN: "Inode is remote (not really error)", 341 EFTYPE: "Inappropriate file type or format", 342 ENMFILE: "No more files", 343 ENOSHARE: "No such host or network path", 344 ECASECLASH: "Filename exists with different case", 345} 346 347// Do the interface allocations only once for common 348// Errno values. 349var ( 350 errEAGAIN error = EAGAIN 351 errEINVAL error = EINVAL 352 errENOENT error = ENOENT 353) 354 355// errnoErr returns common boxed Errno values, to prevent 356// allocations at runtime. 357func errnoErr(e Errno) error { 358 switch e { 359 case 0: 360 return nil 361 case EAGAIN: 362 return errEAGAIN 363 case EINVAL: 364 return errEINVAL 365 case ENOENT: 366 return errENOENT 367 } 368 return e 369} 370 371var errnoByCode = map[string]Errno{ 372 "EPERM": EPERM, 373 "ENOENT": ENOENT, 374 "ESRCH": ESRCH, 375 "EINTR": EINTR, 376 "EIO": EIO, 377 "ENXIO": ENXIO, 378 "E2BIG": E2BIG, 379 "ENOEXEC": ENOEXEC, 380 "EBADF": EBADF, 381 "ECHILD": ECHILD, 382 "EAGAIN": EAGAIN, 383 "ENOMEM": ENOMEM, 384 "EACCES": EACCES, 385 "EFAULT": EFAULT, 386 "EBUSY": EBUSY, 387 "EEXIST": EEXIST, 388 "EXDEV": EXDEV, 389 "ENODEV": ENODEV, 390 "ENOTDIR": ENOTDIR, 391 "EISDIR": EISDIR, 392 "EINVAL": EINVAL, 393 "ENFILE": ENFILE, 394 "EMFILE": EMFILE, 395 "ENOTTY": ENOTTY, 396 "EFBIG": EFBIG, 397 "ENOSPC": ENOSPC, 398 "ESPIPE": ESPIPE, 399 "EROFS": EROFS, 400 "EMLINK": EMLINK, 401 "EPIPE": EPIPE, 402 "ENAMETOOLONG": ENAMETOOLONG, 403 "ENOSYS": ENOSYS, 404 "EDQUOT": EDQUOT, 405 "EDOM": EDOM, 406 "ERANGE": ERANGE, 407 "EDEADLK": EDEADLK, 408 "ENOLCK": ENOLCK, 409 "ENOTEMPTY": ENOTEMPTY, 410 "ELOOP": ELOOP, 411 "ENOMSG": ENOMSG, 412 "EIDRM": EIDRM, 413 "ECHRNG": ECHRNG, 414 "EL2NSYNC": EL2NSYNC, 415 "EL3HLT": EL3HLT, 416 "EL3RST": EL3RST, 417 "ELNRNG": ELNRNG, 418 "EUNATCH": EUNATCH, 419 "ENOCSI": ENOCSI, 420 "EL2HLT": EL2HLT, 421 "EBADE": EBADE, 422 "EBADR": EBADR, 423 "EXFULL": EXFULL, 424 "ENOANO": ENOANO, 425 "EBADRQC": EBADRQC, 426 "EBADSLT": EBADSLT, 427 "EDEADLOCK": EDEADLOCK, 428 "EBFONT": EBFONT, 429 "ENOSTR": ENOSTR, 430 "ENODATA": ENODATA, 431 "ETIME": ETIME, 432 "ENOSR": ENOSR, 433 "ENONET": ENONET, 434 "ENOPKG": ENOPKG, 435 "EREMOTE": EREMOTE, 436 "ENOLINK": ENOLINK, 437 "EADV": EADV, 438 "ESRMNT": ESRMNT, 439 "ECOMM": ECOMM, 440 "EPROTO": EPROTO, 441 "EMULTIHOP": EMULTIHOP, 442 "EDOTDOT": EDOTDOT, 443 "EBADMSG": EBADMSG, 444 "EOVERFLOW": EOVERFLOW, 445 "ENOTUNIQ": ENOTUNIQ, 446 "EBADFD": EBADFD, 447 "EREMCHG": EREMCHG, 448 "ELIBACC": ELIBACC, 449 "ELIBBAD": ELIBBAD, 450 "ELIBSCN": ELIBSCN, 451 "ELIBMAX": ELIBMAX, 452 "ELIBEXEC": ELIBEXEC, 453 "EILSEQ": EILSEQ, 454 "EUSERS": EUSERS, 455 "ENOTSOCK": ENOTSOCK, 456 "EDESTADDRREQ": EDESTADDRREQ, 457 "EMSGSIZE": EMSGSIZE, 458 "EPROTOTYPE": EPROTOTYPE, 459 "ENOPROTOOPT": ENOPROTOOPT, 460 "EPROTONOSUPPORT": EPROTONOSUPPORT, 461 "ESOCKTNOSUPPORT": ESOCKTNOSUPPORT, 462 "EOPNOTSUPP": EOPNOTSUPP, 463 "EPFNOSUPPORT": EPFNOSUPPORT, 464 "EAFNOSUPPORT": EAFNOSUPPORT, 465 "EADDRINUSE": EADDRINUSE, 466 "EADDRNOTAVAIL": EADDRNOTAVAIL, 467 "ENETDOWN": ENETDOWN, 468 "ENETUNREACH": ENETUNREACH, 469 "ENETRESET": ENETRESET, 470 "ECONNABORTED": ECONNABORTED, 471 "ECONNRESET": ECONNRESET, 472 "ENOBUFS": ENOBUFS, 473 "EISCONN": EISCONN, 474 "ENOTCONN": ENOTCONN, 475 "ESHUTDOWN": ESHUTDOWN, 476 "ETOOMANYREFS": ETOOMANYREFS, 477 "ETIMEDOUT": ETIMEDOUT, 478 "ECONNREFUSED": ECONNREFUSED, 479 "EHOSTDOWN": EHOSTDOWN, 480 "EHOSTUNREACH": EHOSTUNREACH, 481 "EALREADY": EALREADY, 482 "EINPROGRESS": EINPROGRESS, 483 "ESTALE": ESTALE, 484 "ENOTSUP": ENOTSUP, 485 "ENOMEDIUM": ENOMEDIUM, 486 "ECANCELED": ECANCELED, 487 "ELBIN": ELBIN, 488 "EFTYPE": EFTYPE, 489 "ENMFILE": ENMFILE, 490 "EPROCLIM": EPROCLIM, 491 "ENOSHARE": ENOSHARE, 492 "ECASECLASH": ECASECLASH, 493 "EWOULDBLOCK": EWOULDBLOCK, 494} 495