1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
|
// 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.
//go:build baremetal || nintendoswitch || wasm_unknown
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 */
)
// 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,
}
|