blob: 8d48229e2b42e35b833ee4516d7463ec9f39aa26 (
plain)
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
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
|
type size = int64 /* spans entire address space */
type usize = uint64 /* unsigned size */
type off = int64 /* file offsets */
type intptr = uint64/* can hold any pointer losslessly */
type time = int64 /* milliseconds since epoch */
type pid = int32 /* process id */
type scno = int64 /*syscall*/
type fdopt = int64 /* fd options */
type fd = int32 /* fd */
type whence = uint64 /* seek from whence */
type mprot = int64 /* memory protection */
type mopt = int64 /* memory mapping options */
type socktype = int64 /* socket type */
type sockproto = int64 /* socket protocol */
type sockopt = int32 /* socket option */
type sockfam = uint8 /* socket family */
type filemode = uint32
type filetype = uint8
type fcntlcmd = int64
type signo = int32
type sigflags = int32
type sigset = uint32
type msg = void
const Futexwait : int = 1
const Futexwake : int = 2
const Futexrequeue : int = 3
type clock = union
`Clockrealtime
`Clockmonotonic
`Clockproccputime
`Clockthreadcputime
`Clockuptime
;;
type waitstatus = union
`Waitfail int32
`Waitexit int32
`Waitsig int32
`Waitstop int32
;;
type rlimit = struct
cur : uint64 /* current (soft) limit */
max : uint64 /* maximum value for rlim_cur */
;;
type timespec = struct
sec : uint64
nsec : uint64
;;
type timeval = struct
sec : uint64
usec : uint64
;;
type timezone = struct
minwest : int32 /* minutes west of Greenwich */
dsttime : int32 /* type of dst correction */
;;
type pollfd = struct
fd : fd
events : uint16
revents : uint16
;;
type itimerval = struct
interval : timeval /* timer interval */
value : timeval /* current value */
;;
type sigaction = struct
handler : byte# /* code pointer */
mask : sigset
flags : sigflags
;;
/*
* Information pushed on stack when a signal is delivered.
* This is used by the kernel to restore state following
* execution of the signal handler. It is also made available
* to the handler to allow it to restore state properly if
* a non-standard exit is performed.
*/
type sigcontext = struct
/* plain match trapframe */
rdi : int64
rsi : int64
rdx : int64
rcx : int64
r8 : int64
r9 : int64
r10 : int64
r11 : int64
r12 : int64
r13 : int64
r14 : int64
r15 : int64
rbp : int64
rbx : int64
rax : int64
gs : int64
fs : int64
es : int64
ds : int64
trapno : int64
err : int64
rip : int64
cs : int64
rflags : int64
rsp : int64
ss : int64
fpstate : fxsave64#
__pad : int32
mask : int32
cookie : int64
;;
type sigaltstack = struct
sp : void#
size : size
flags : int32
;;
type fxsave64 = struct
fcw : int16
fsw : int16
ftw : int8
unused1 : int8
fop : int16
rip : int64
rdp : int64
mxcsr : int32
mxcsrmask : int32
st : int64[8][2] /* 8 normal FP regs */
xmm : int64[16][2] /* 16 SSE2 registers */
unused3 : int8[96]
;;
const Simaxsz = 128
const Sipad = (Simaxsz / 4) - 3
type siginfo = struct
signo : int
code : int
errno : int
pad : int[Sipad]
;;
type rusage = struct
utime : timeval /* user time */
stime : timeval /* system time */
maxrss : uint64 /* max resident set size*/
ixrss : uint64 /* shared text size */
idrss : uint64 /* unshared data size */
isrss : uint64 /* unshared stack size */
minflt : uint64 /* page reclaims */
majflt : uint64 /* page faults */
nswap : uint64 /* swaps */
inblock : uint64 /* block input ops */
oublock : uint64 /* block output ops */
msgsnd : uint64 /* messages sent */
msgrcv : uint64 /* messages received */
nsignals : uint64 /* signals received */
nvcsw : uint64 /* voluntary context switches */
nivcsw : uint64 /* involuntary context switches */
;;
type tforkparams = struct
tcb : void#
tid : pid#
stk : byte#
;;
type statbuf = struct
mode : filemode
dev : uint32
ino : uint64
nlink : uint32
uid : uint32
gid : uint32
rdev : uint32
atime : timespec
mtime : timespec
ctime : timespec
size : off
blocks : int64
blksize : uint32
flags : uint32
gen : uint32
birthtim : timespec
;;
type semun = struct
semarr : void#
;;
const Mfsnamelen = 16 /* length of fs type name, including nul */
const Mnamelen = 90 /* length of buffer for returned name */
type statfs = struct
flags : uint32 /* copy of mount flags */
bsize : uint32 /* file system block size */
iosize : uint32 /* optimal transfer block size */
/* unit is f_bsize */
blocks : uint64 /* total data blocks in file system */
bfree : uint64 /* free blocks in fs */
bavail : int64 /* free blocks avail to non-superuser */
files : int64 /* total file nodes in file system */
ffree : int64 /* free file nodes in fs */
favail : int64 /* free file nodes avail to non-root */
syncwr : int64 /* count of sync writes since mount */
syncrd : int64 /* count of sync reads since mount */
asyncwr : int64 /* count of async writes since mount */
asyncrd : int64 /* count of async reads since mount */
fsid : fsid /* file system id */
namemax : uint32 /* maximum filename length */
owner : uid /* user that mounted the file system */
ctime : uint64 /* last mount [-u] time */
fstypename : byte[Mfsnamelen]; /* fs type name */
mntonname : byte[Mnamelen]; /* directory on which mounted */
mntfromname : byte[Mnamelen]; /* mounted file system */
mntfromspec : byte[Mnamelen]; /* special for mount request */
///union mount_info mount_info; /* per-filesystem mount options */
__mountinfo : byte[160]; /* storage for 'union mount_info' */
;;
type utsname = struct
system : byte[32]
node : byte[32]
release : byte[32]
version : byte[32]
machine : byte[32]
;;
type sockaddr = struct
len : byte
fam : sockfam
data : byte[14] /* what is the *actual* length? */
;;
type sockaddr_in = struct
len : byte
fam : sockfam
port : uint16
addr : byte[4]
zero : byte[8]
;;
type sockaddr_in6 = struct
len : byte
fam : sockfam
port : uint16
flow : uint32
addr : byte[16]
scope : uint32
;;
type sockaddr_un = struct
len : uint8
fam : sockfam
path : byte[104]
;;
type sockaddr_storage = struct
len : byte
fam : sockfam
__pad1 : byte[6]
__align : int64
__pad2 : byte[240]
;;
type dirent = struct
fileno : uint64
off : uint64
reclen : uint16
ftype : uint8
namlen : uint8
__pad : byte[4]
name : byte[256]
;;
type iovec = struct
base : byte#
len : uint64
;;
/* open options */
const Ordonly : fdopt = 0x0
const Owronly : fdopt = 0x1
const Ordwr : fdopt = 0x2
const Oappend : fdopt = 0x8
const Ondelay : fdopt = 0x4
const Oshlock : fdopt = 0x10 /* open with shared file lock */
const Oexlock : fdopt = 0x20 /* open with exclusive file lock */
const Oasync : fdopt = 0x40 /* signal pgrp when data ready */
const Osync : fdopt = 0x80 /* backwards compatibility */
const Onofollow : fdopt = 0x100
const Ocreat : fdopt = 0x200
const Otrunc : fdopt = 0x400
const Oexcl : fdopt = 0x800
const Ocloexec : fdopt = 0x10000
const Odsync : fdopt = Osync /* synchronous data writes */
const Orsync : fdopt = Osync /* synchronous reads */
const Odir : fdopt = 0x20000
/* poll options */
const Pollin : uint16 = 0x0001
const Pollpri : uint16 = 0x0002
const Pollout : uint16 = 0x0004
const Pollerr : uint16 = 0x0008
const Pollhup : uint16 = 0x0010
const Pollnval : uint16 = 0x0020
const Pollnorm : uint16 = 0x0040
const Pollrdband: uint16 = 0x0080
const Pollwrband: uint16 = 0x0100
/* stat modes */
const Sifmt : filemode = 0xf000
const Sififo : filemode = 0x1000
const Sifchr : filemode = 0x2000
const Sifdir : filemode = 0x4000
const Sifblk : filemode = 0x6000
const Sifreg : filemode = 0x8000
const Siflnk : filemode = 0xa000
const Sifsock : filemode = 0xc000
const Sisvtx : filemode = 0x0200
/* mmap protection */
const Mprotnone : mprot = 0x0
const Mprotrd : mprot = 0x1
const Mprotwr : mprot = 0x2
const Mprotexec : mprot = 0x4
const Mprotrw : mprot = 0x3
/* mmap options */
const Mshared : mopt = 0x1
const Mpriv : mopt = 0x2
const Mfixed : mopt = 0x10
const Mfile : mopt = 0x0
const Manon : mopt = 0x1000
const Mnoreplace : mopt = 0x0800
/* file types */
const Dtunknown : filetype = 0
const Dtfifo : filetype = 1
const Dtchr : filetype = 2
const Dtdir : filetype = 4
const Dtblk : filetype = 6
const Dtreg : filetype = 8
const Dtlnk : filetype = 10
const Dtsock : filetype = 12
/* socket families. INCOMPLETE. */
const Afunspec : sockfam = 0
const Afunix : sockfam = 1
const Afinet : sockfam = 2
const Afinet6 : sockfam = 24
/* socket types. */
const Sockstream : socktype = 1
const Sockdgram : socktype = 2
const Sockraw : socktype = 3
const Sockrdm : socktype = 4
const Sockseqpacket : socktype = 5
/* socket options */
const Sodebug : sockopt = 0x0001 /* turn on debugging info recording */
const Soacceptconn : sockopt = 0x0002 /* socket has had listen() */
const Soreuseaddr : sockopt = 0x0004 /* allow local address reuse */
const Sokeepalive : sockopt = 0x0008 /* keep connections alive */
const Sodontroute : sockopt = 0x0010 /* just use interface addresses */
const Sobroadcast : sockopt = 0x0020 /* permit sending of broadcast msgs */
const Souseloopback : sockopt = 0x0040 /* bypass hardware when possible */
const Solinger : sockopt = 0x0080 /* linger on close if data present */
const Sooobinline : sockopt = 0x0100 /* leave received OOB data in line */
const Soreuseport : sockopt = 0x0200 /* allow local address & port reuse */
const Sotimestamp : sockopt = 0x0800 /* timestamp received dgram traffic */
const Sobindany : sockopt = 0x1000 /* allow bind to any address */
const Sosndbuf : sockopt = 0x1001 /* send buffer size */
const Sorcvbuf : sockopt = 0x1002 /* receive buffer size */
const Sosndlowat : sockopt = 0x1003 /* send low-water mark */
const Sorcvlowat : sockopt = 0x1004 /* receive low-water mark */
const Sosndtimeo : sockopt = 0x1005 /* send timeout */
const Sorcvtimeo : sockopt = 0x1006 /* receive timeout */
const Soerror : sockopt = 0x1007 /* get error status and clear */
const Sotype : sockopt = 0x1008 /* get socket type */
const Sonetproc : sockopt = 0x1020 /* multiplex; network processing */
const Sortable : sockopt = 0x1021 /* routing table to be used */
const Sopeercred : sockopt = 0x1022 /* get connect-time credentials */
const Sosplice : sockopt = 0x1023 /* splice data to other socket */
/* socket option levels */
const Solsocket : sockproto = 0xffff
/* network protocols */
const Ipproto_ip : sockproto = 0
const Ipproto_icmp : sockproto = 1
const Ipproto_tcp : sockproto = 6
const Ipproto_udp : sockproto = 17
const Ipproto_raw : sockproto = 255
const Seekset : whence = 0
const Seekcur : whence = 1
const Seekend : whence = 2
/* system specific constants */
const Maxpathlen : size = 1024
/* fcntl constants */
const Fdupfd : fcntlcmd = 0 /* duplicate file descriptor */
const Fgetfd : fcntlcmd = 1 /* get file descriptor flags */
const Fsetfd : fcntlcmd = 2 /* set file descriptor flags */
const Fgetfl : fcntlcmd = 3 /* get file status flags */
const Fsetfl : fcntlcmd = 4 /* set file status flags */
const Fgetown : fcntlcmd = 5 /* get SIGIO/SIGURG proc/pgrp */
const Fsetown : fcntlcmd = 6 /* set SIGIO/SIGURG proc/pgrp */
const Fogetlk : fcntlcmd = 7 /* get record locking information */
const Fosetlk : fcntlcmd = 8 /* set record locking information */
/* return value for a failed mapping */
const Mapbad : byte# = (-1 : byte#)
/* signal flags */
const Saonstack : sigflags = 0x0001 /* take signal on signal stack */
const Sarestart : sigflags = 0x0002 /* restart system on signal return */
const Saresethand : sigflags = 0x0004 /* reset to SIG_DFL when taking signal */
const Sanodefer : sigflags = 0x0010 /* don't mask the signal we're delivering */
const Sanocldwait : sigflags = 0x0020 /* don't create zombies (assign to pid 1) */
const Sanocldstop : sigflags = 0x0008 /* do not generate SIGCHLD on child stop */
const Sasiginfo : sigflags = 0x0040 /* generate siginfo_t */
/* signals */
const Sighup : signo = 1 /* hangup */
const Sigint : signo = 2 /* interrupt */
const Sigquit : signo = 3 /* quit */
const Sigill : signo = 4 /* illegal instruction (not reset when caught) */
const Sigtrap : signo = 5 /* trace trap (not reset when caught) */
const Sigabrt : signo = 6 /* abort() */
const Sigiot : signo = Sigabrt /* compatibility */
const Sigemt : signo = 7 /* EMT instruction */
const Sigfpe : signo = 8 /* floating point exception */
const Sigkill : signo = 9 /* kill (cannot be caught or ignored) */
const Sigbus : signo = 10 /* bus error */
const Sigsegv : signo = 11 /* segmentation violation */
const Sigsys : signo = 12 /* bad argument to system call */
const Sigpipe : signo = 13 /* write on a pipe with no one to read it */
const Sigalrm : signo = 14 /* alarm clock */
const Sigterm : signo = 15 /* software termination signal from kill */
const Sigurg : signo = 16 /* urgent condition on IO channel */
const Sigstop : signo = 17 /* sendable stop signal not from tty */
const Sigtstp : signo = 18 /* stop signal from tty */
const Sigcont : signo = 19 /* continue a stopped process */
const Sigchld : signo = 20 /* to parent on child stop or exit */
const Sigttin : signo = 21 /* to readers pgrp upon background tty read */
const Sigttou : signo = 22 /* like TTIN for output if (tp->t_local<OSTOP) */
const Sigio : signo = 23 /* input/output possible signal */
const Sigxcpu : signo = 24 /* exceeded CPU time limit */
const Sigxfsz : signo = 25 /* exceeded file size limit */
const Sigvtalrm : signo = 26 /* virtual time alarm */
const Sigprof : signo = 27 /* profiling time alarm */
const Sigwinch : signo = 28 /* window size changes */
const Siginfo : signo = 29 /* information request */
const Sigusr1 : signo = 30 /* user defined signal 1 */
const Sigusr2 : signo = 31 /* user defined signal 2 */
const Sigthr : signo = 32 /* thread library AST */
extern const syscall : (sc:scno, args:... -> int64)
extern var __cenvp : byte##
|