ref: d8d9e18a0b73ed54f41cbfa619a9250874b6b18b
parent: af7de567e568e79be41ec01425422579e8d2f5ce
author: Ori Bernstein <[email protected]>
date: Tue Oct 7 08:46:35 EDT 2014
Rename so that the sys files have the architecture. They are, after all, arch specific.
--- /dev/null
+++ b/libstd/sys+freebsd-x64.myr
@@ -1,0 +1,788 @@
+use "systypes.use"
+
+pkg sys =
+ type scno = int64 /*syscall*/
+ type fdopt = int64 /* fd options */
+ type fd = int64 /* fd */
+ type mprot = int64 /* memory protection */
+ type mopt = int64 /* memory mapping options */
+ type socktype = int64 /* socket type */
+ type sockproto = int64 /* socket protocol */
+ type sockfam = uint8 /* socket family */
+ type filemode = uint16
+ type filetype = uint8
+
+ type clock = union
+ `Clockrealtime
+ `Clockrealtime_precise
+ `Clockrealtime_fast
+ `Clockmonotonic
+ `Clockmonotonic_precise
+ `Clockmonotonic_fast
+ `Clockuptime
+ `Clockuptime_precise
+ `Clockuptime_fast
+ `Clockvirtual
+ `Clockprof
+ `Clocksecond
+ ;;
+
+ type timespec = struct
+ sec : uint64
+ nsec : uint64
+ ;;
+
+ type timeval = struct
+ sec : uint64
+ usec : uint64
+ ;;
+
+ 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 statbuf = struct
+ dev : uint32
+ ino : uint32
+ mode : filemode
+ nlink : uint16
+ uid : uint32
+ gid : uint32
+ rdev : uint32
+ atim : timespec
+ mtim : timespec
+ ctim : timespec
+ size : int64
+ blocks : int64
+ blksize : uint32
+ flags : uint32
+ gen : uint32
+ lspare : int32
+ birthtim : timespec
+ ;;
+
+ type utsname = struct
+ system : byte[256]
+ node : byte[256]
+ release : byte[256]
+ version : byte[256]
+ machine : byte[256]
+ ;;
+
+ 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_storage = struct
+ len : byte
+ fam : sockfam
+ __pad1 : byte[6]
+ __align : int64
+ __pad2 : byte[112]
+ ;;
+
+ type dirent = struct
+ fileno : uint32
+ reclen : uint16
+ ftype : filetype
+ namelen : uint8
+ name : byte[256]
+ ;;
+
+ /* open options */
+ const Ordonly : fdopt = 0x0
+ const Owronly : fdopt = 0x1
+ const Ordwr : fdopt = 0x2
+ const Oappend : fdopt = 0x8
+ const Ocreat : fdopt = 0x200
+ const Onofollow : fdopt = 0x100
+ const Ondelay : fdopt = 0x4
+ const Otrunc : fdopt = 0x400
+ const Odir : fdopt = 0x20000
+
+ /* 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
+
+ /* 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 M32bit : mopt = 0x80000
+
+ /* 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
+ const Dtwht : filetype = 14
+
+ /* socket families. INCOMPLETE. */
+ const Afunspec : sockfam = 0
+ const Afunix : sockfam = 1
+ const Afinet : sockfam = 2
+ const Afinet6 : sockfam = 28
+
+ /* socket types. */
+ const Sockstream : socktype = 1
+ const Sockdgram : socktype = 2
+ const Sockraw : socktype = 3
+ const Sockrdm : socktype = 4
+ const Sockseqpacket : socktype = 5
+
+ /* 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
+
+ /* return value for a failed mapping */
+ const Mapbad : byte# = -1 castto(byte#)
+
+ /* syscalls */
+ const Syssyscall : scno = 0
+ const Sysexit : scno = 1
+ const Sysfork : scno = 2
+ const Sysread : scno = 3
+ const Syswrite : scno = 4
+ const Sysopen : scno = 5
+ const Sysclose : scno = 6
+ const Syswait4 : scno = 7
+ const Syslink : scno = 9
+ const Sysunlink : scno = 10
+ const Syschdir : scno = 12
+ const Sysfchdir : scno = 13
+ const Sysmknod : scno = 14
+ const Syschmod : scno = 15
+ const Syschown : scno = 16
+ const Sysbreak : scno = 17
+ const Sysfreebsd4_getfsstat : scno = 18
+ const Sysgetpid : scno = 20
+ const Sysmount : scno = 21
+ const Sysunmount : scno = 22
+ const Syssetuid : scno = 23
+ const Sysgetuid : scno = 24
+ const Sysgeteuid : scno = 25
+ const Sysptrace : scno = 26
+ const Sysrecvmsg : scno = 27
+ const Syssendmsg : scno = 28
+ const Sysrecvfrom : scno = 29
+ const Sysaccept : scno = 30
+ const Sysgetpeername : scno = 31
+ const Sysgetsockname : scno = 32
+ const Sysaccess : scno = 33
+ const Syschflags : scno = 34
+ const Sysfchflags : scno = 35
+ const Syssync : scno = 36
+ const Syskill : scno = 37
+ const Sysgetppid : scno = 39
+ const Sysdup : scno = 41
+ const Syspipe : scno = 42
+ const Sysgetegid : scno = 43
+ const Sysprofil : scno = 44
+ const Sysktrace : scno = 45
+ const Sysgetgid : scno = 47
+ const Sysgetlogin : scno = 49
+ const Syssetlogin : scno = 50
+ const Sysacct : scno = 51
+ const Syssigaltstack : scno = 53
+ const Sysioctl : scno = 54
+ const Sysreboot : scno = 55
+ const Sysrevoke : scno = 56
+ const Syssymlink : scno = 57
+ const Sysreadlink : scno = 58
+ const Sysexecve : scno = 59
+ const Sysumask : scno = 60
+ const Syschroot : scno = 61
+ const Sysmsync : scno = 65
+ const Sysvfork : scno = 66
+ const Syssbrk : scno = 69
+ const Syssstk : scno = 70
+ const Sysvadvise : scno = 72
+ const Sysmunmap : scno = 73
+ const Sysmprotect : scno = 74
+ const Sysmadvise : scno = 75
+ const Sysmincore : scno = 78
+ const Sysgetgroups : scno = 79
+ const Syssetgroups : scno = 80
+ const Sysgetpgrp : scno = 81
+ const Syssetpgid : scno = 82
+ const Syssetitimer : scno = 83
+ const Sysswapon : scno = 85
+ const Sysgetitimer : scno = 86
+ const Sysgetdtablesize : scno = 89
+ const Sysdup2 : scno = 90
+ const Sysfcntl : scno = 92
+ const Sysselect : scno = 93
+ const Sysfsync : scno = 95
+ const Syssetpriority : scno = 96
+ const Syssocket : scno = 97
+ const Sysconnect : scno = 98
+ const Sysgetpriority : scno = 100
+ const Sysbind : scno = 104
+ const Syssetsockopt : scno = 105
+ const Syslisten : scno = 106
+ const Sysgettimeofday : scno = 116
+ const Sysgetrusage : scno = 117
+ const Sysgetsockopt : scno = 118
+ const Sysreadv : scno = 120
+ const Syswritev : scno = 121
+ const Syssettimeofday : scno = 122
+ const Sysfchown : scno = 123
+ const Sysfchmod : scno = 124
+ const Syssetreuid : scno = 126
+ const Syssetregid : scno = 127
+ const Sysrename : scno = 128
+ const Sysflock : scno = 131
+ const Sysmkfifo : scno = 132
+ const Syssendto : scno = 133
+ const Sysshutdown : scno = 134
+ const Syssocketpair : scno = 135
+ const Sysmkdir : scno = 136
+ const Sysrmdir : scno = 137
+ const Sysutimes : scno = 138
+ const Sysadjtime : scno = 140
+ const Syssetsid : scno = 147
+ const Sysquotactl : scno = 148
+ const Sysnlm_syscall : scno = 154
+ const Sysnfssvc : scno = 155
+ const Sysfreebsd4_statfs : scno = 157
+ const Sysfreebsd4_fstatfs : scno = 158
+ const Syslgetfh : scno = 160
+ const Sysgetfh : scno = 161
+ const Sysfreebsd4_getdomainname : scno = 162
+ const Sysfreebsd4_setdomainname : scno = 163
+ const Sysfreebsd4_uname : scno = 164
+ const Syssysarch : scno = 165
+ const Sysrtprio : scno = 166
+ const Syssemsys : scno = 169
+ const Sysmsgsys : scno = 170
+ const Sysshmsys : scno = 171
+ const Sysfreebsd6_pread : scno = 173
+ const Sysfreebsd6_pwrite : scno = 174
+ const Syssetfib : scno = 175
+ const Sysntp_adjtime : scno = 176
+ const Syssetgid : scno = 181
+ const Syssetegid : scno = 182
+ const Sysseteuid : scno = 183
+ const Sysstat : scno = 188
+ const Sysfstat : scno = 189
+ const Syslstat : scno = 190
+ const Syspathconf : scno = 191
+ const Sysfpathconf : scno = 192
+ const Sysgetrlimit : scno = 194
+ const Syssetrlimit : scno = 195
+ const Sysgetdirentries : scno = 196
+ const Sysfreebsd6_mmap : scno = 197
+ const Sys__syscall : scno = 198
+ const Sysfreebsd6_lseek : scno = 199
+ const Sysfreebsd6_truncate : scno = 200
+ const Sysfreebsd6_ftruncate : scno = 201
+ const Sys__sysctl : scno = 202
+ const Sysmlock : scno = 203
+ const Sysmunlock : scno = 204
+ const Sysundelete : scno = 205
+ const Sysfutimes : scno = 206
+ const Sysgetpgid : scno = 207
+ const Syspoll : scno = 209
+ const Sysfreebsd7___semctl : scno = 220
+ const Syssemget : scno = 221
+ const Syssemop : scno = 222
+ const Sysfreebsd7_msgctl : scno = 224
+ const Sysmsgget : scno = 225
+ const Sysmsgsnd : scno = 226
+ const Sysmsgrcv : scno = 227
+ const Sysshmat : scno = 228
+ const Sysfreebsd7_shmctl : scno = 229
+ const Sysshmdt : scno = 230
+ const Sysshmget : scno = 231
+ const Sysclock_gettime : scno = 232
+ const Sysclock_settime : scno = 233
+ const Sysclock_getres : scno = 234
+ const Sysktimer_create : scno = 235
+ const Sysktimer_delete : scno = 236
+ const Sysktimer_settime : scno = 237
+ const Sysktimer_gettime : scno = 238
+ const Sysktimer_getoverrun : scno = 239
+ const Sysnanosleep : scno = 240
+ const Sysffclock_getcounter : scno = 241
+ const Sysffclock_setestimate : scno = 242
+ const Sysffclock_getestimate : scno = 243
+ const Sysclock_getcpuclockid2 : scno = 247
+ const Sysntp_gettime : scno = 248
+ const Sysminherit : scno = 250
+ const Sysrfork : scno = 251
+ const Sysopenbsd_poll : scno = 252
+ const Sysissetugid : scno = 253
+ const Syslchown : scno = 254
+ const Sysaio_read : scno = 255
+ const Sysaio_write : scno = 256
+ const Syslio_listio : scno = 257
+ const Sysgetdents : scno = 272
+ const Syslchmod : scno = 274
+ const Sysnetbsd_lchown : scno = 275
+ const Syslutimes : scno = 276
+ const Sysnetbsd_msync : scno = 277
+ const Sysnstat : scno = 278
+ const Sysnfstat : scno = 279
+ const Sysnlstat : scno = 280
+ const Syspreadv : scno = 289
+ const Syspwritev : scno = 290
+ const Sysfreebsd4_fhstatfs : scno = 297
+ const Sysfhopen : scno = 298
+ const Sysfhstat : scno = 299
+ const Sysmodnext : scno = 300
+ const Sysmodstat : scno = 301
+ const Sysmodfnext : scno = 302
+ const Sysmodfind : scno = 303
+ const Syskldload : scno = 304
+ const Syskldunload : scno = 305
+ const Syskldfind : scno = 306
+ const Syskldnext : scno = 307
+ const Syskldstat : scno = 308
+ const Syskldfirstmod : scno = 309
+ const Sysgetsid : scno = 310
+ const Syssetresuid : scno = 311
+ const Syssetresgid : scno = 312
+ const Sysaio_return : scno = 314
+ const Sysaio_suspend : scno = 315
+ const Sysaio_cancel : scno = 316
+ const Sysaio_error : scno = 317
+ const Sysoaio_read : scno = 318
+ const Sysoaio_write : scno = 319
+ const Sysolio_listio : scno = 320
+ const Sysyield : scno = 321
+ const Sysmlockall : scno = 324
+ const Sysmunlockall : scno = 325
+ const Sys__getcwd : scno = 326
+ const Syssched_setparam : scno = 327
+ const Syssched_getparam : scno = 328
+ const Syssched_setscheduler : scno = 329
+ const Syssched_getscheduler : scno = 330
+ const Syssched_yield : scno = 331
+ const Syssched_get_priority_max : scno = 332
+ const Syssched_get_priority_min : scno = 333
+ const Syssched_rr_get_interval : scno = 334
+ const Sysutrace : scno = 335
+ const Sysfreebsd4_sendfile : scno = 336
+ const Syskldsym : scno = 337
+ const Sysjail : scno = 338
+ const Sysnnpfs_syscall : scno = 339
+ const Syssigprocmask : scno = 340
+ const Syssigsuspend : scno = 341
+ const Sysfreebsd4_sigaction : scno = 342
+ const Syssigpending : scno = 343
+ const Sysfreebsd4_sigreturn : scno = 344
+ const Syssigtimedwait : scno = 345
+ const Syssigwaitinfo : scno = 346
+ const Sys__acl_get_file : scno = 347
+ const Sys__acl_set_file : scno = 348
+ const Sys__acl_get_fd : scno = 349
+ const Sys__acl_set_fd : scno = 350
+ const Sys__acl_delete_file : scno = 351
+ const Sys__acl_delete_fd : scno = 352
+ const Sys__acl_aclcheck_file : scno = 353
+ const Sys__acl_aclcheck_fd : scno = 354
+ const Sysextattrctl : scno = 355
+ const Sysextattr_set_file : scno = 356
+ const Sysextattr_get_file : scno = 357
+ const Sysextattr_delete_file : scno = 358
+ const Sysaio_waitcomplete : scno = 359
+ const Sysgetresuid : scno = 360
+ const Sysgetresgid : scno = 361
+ const Syskqueue : scno = 362
+ const Syskevent : scno = 363
+ const Sysextattr_set_fd : scno = 371
+ const Sysextattr_get_fd : scno = 372
+ const Sysextattr_delete_fd : scno = 373
+ const Sys__setugid : scno = 374
+ const Syseaccess : scno = 376
+ const Sysafs3_syscall : scno = 377
+ const Sysnmount : scno = 378
+ const Sys__mac_get_proc : scno = 384
+ const Sys__mac_set_proc : scno = 385
+ const Sys__mac_get_fd : scno = 386
+ const Sys__mac_get_file : scno = 387
+ const Sys__mac_set_fd : scno = 388
+ const Sys__mac_set_file : scno = 389
+ const Syskenv : scno = 390
+ const Syslchflags : scno = 391
+ const Sysuuidgen : scno = 392
+ const Syssendfile : scno = 393
+ const Sysmac_syscall : scno = 394
+ const Sysgetfsstat : scno = 395
+ const Sysstatfs : scno = 396
+ const Sysfstatfs : scno = 397
+ const Sysfhstatfs : scno = 398
+ const Sysksem_close : scno = 400
+ const Sysksem_post : scno = 401
+ const Sysksem_wait : scno = 402
+ const Sysksem_trywait : scno = 403
+ const Sysksem_init : scno = 404
+ const Sysksem_open : scno = 405
+ const Sysksem_unlink : scno = 406
+ const Sysksem_getvalue : scno = 407
+ const Sysksem_destroy : scno = 408
+ const Sys__mac_get_pid : scno = 409
+ const Sys__mac_get_link : scno = 410
+ const Sys__mac_set_link : scno = 411
+ const Sysextattr_set_link : scno = 412
+ const Sysextattr_get_link : scno = 413
+ const Sysextattr_delete_link : scno = 414
+ const Sys__mac_execve : scno = 415
+ const Syssigaction : scno = 416
+ const Syssigreturn : scno = 417
+ const Sysgetcontext : scno = 421
+ const Syssetcontext : scno = 422
+ const Sysswapcontext : scno = 423
+ const Sysswapoff : scno = 424
+ const Sys__acl_get_link : scno = 425
+ const Sys__acl_set_link : scno = 426
+ const Sys__acl_delete_link : scno = 427
+ const Sys__acl_aclcheck_link : scno = 428
+ const Syssigwait : scno = 429
+ const Systhr_create : scno = 430
+ const Systhr_exit : scno = 431
+ const Systhr_self : scno = 432
+ const Systhr_kill : scno = 433
+ const Sys_umtx_lock : scno = 434
+ const Sys_umtx_unlock : scno = 435
+ const Sysjail_attach : scno = 436
+ const Sysextattr_list_fd : scno = 437
+ const Sysextattr_list_file : scno = 438
+ const Sysextattr_list_link : scno = 439
+ const Sysksem_timedwait : scno = 441
+ const Systhr_suspend : scno = 442
+ const Systhr_wake : scno = 443
+ const Syskldunloadf : scno = 444
+ const Sysaudit : scno = 445
+ const Sysauditon : scno = 446
+ const Sysgetauid : scno = 447
+ const Syssetauid : scno = 448
+ const Sysgetaudit : scno = 449
+ const Syssetaudit : scno = 450
+ const Sysgetaudit_addr : scno = 451
+ const Syssetaudit_addr : scno = 452
+ const Sysauditctl : scno = 453
+ const Sys_umtx_op : scno = 454
+ const Systhr_new : scno = 455
+ const Syssigqueue : scno = 456
+ const Syskmq_open : scno = 457
+ const Syskmq_setattr : scno = 458
+ const Syskmq_timedreceive : scno = 459
+ const Syskmq_timedsend : scno = 460
+ const Syskmq_notify : scno = 461
+ const Syskmq_unlink : scno = 462
+ const Sysabort2 : scno = 463
+ const Systhr_set_name : scno = 464
+ const Sysaio_fsync : scno = 465
+ const Sysrtprio_thread : scno = 466
+ const Syssctp_peeloff : scno = 471
+ const Syssctp_generic_sendmsg : scno = 472
+ const Syssctp_generic_sendmsg_iov : scno = 473
+ const Syssctp_generic_recvmsg : scno = 474
+ const Syspread : scno = 475
+ const Syspwrite : scno = 476
+ const Sysmmap : scno = 477
+ const Syslseek : scno = 478
+ const Systruncate : scno = 479
+ const Sysftruncate : scno = 480
+ const Systhr_kill2 : scno = 481
+ const Sysshm_open : scno = 482
+ const Sysshm_unlink : scno = 483
+ const Syscpuset : scno = 484
+ const Syscpuset_setid : scno = 485
+ const Syscpuset_getid : scno = 486
+ const Syscpuset_getaffinity : scno = 487
+ const Syscpuset_setaffinity : scno = 488
+ const Sysfaccessat : scno = 489
+ const Sysfchmodat : scno = 490
+ const Sysfchownat : scno = 491
+ const Sysfexecve : scno = 492
+ const Sysfstatat : scno = 493
+ const Sysfutimesat : scno = 494
+ const Syslinkat : scno = 495
+ const Sysmkdirat : scno = 496
+ const Sysmkfifoat : scno = 497
+ const Sysmknodat : scno = 498
+ const Sysopenat : scno = 499
+ const Sysreadlinkat : scno = 500
+ const Sysrenameat : scno = 501
+ const Syssymlinkat : scno = 502
+ const Sysunlinkat : scno = 503
+ const Sysposix_openpt : scno = 504
+ const Sysgssd_syscall : scno = 505
+ const Sysjail_get : scno = 506
+ const Sysjail_set : scno = 507
+ const Sysjail_remove : scno = 508
+ const Sysclosefrom : scno = 509
+ const Sys__semctl : scno = 510
+ const Sysmsgctl : scno = 511
+ const Sysshmctl : scno = 512
+ const Syslpathconf : scno = 513
+ const Sys__cap_rights_get : scno = 515
+ const Syscap_enter : scno = 516
+ const Syscap_getmode : scno = 517
+ const Syspdfork : scno = 518
+ const Syspdkill : scno = 519
+ const Syspdgetpid : scno = 520
+ const Syspselect : scno = 522
+ const Sysgetloginclass : scno = 523
+ const Syssetloginclass : scno = 524
+ const Sysrctl_get_racct : scno = 525
+ const Sysrctl_get_rules : scno = 526
+ const Sysrctl_get_limits : scno = 527
+ const Sysrctl_add_rule : scno = 528
+ const Sysrctl_remove_rule : scno = 529
+ const Sysposix_fallocate : scno = 530
+ const Sysposix_fadvise : scno = 531
+ const Syswait6 : scno = 532
+ const Syscap_rights_limit : scno = 533
+ const Syscap_ioctls_limit : scno = 534
+ const Syscap_ioctls_get : scno = 535
+ const Syscap_fcntls_limit : scno = 536
+ const Syscap_fcntls_get : scno = 537
+ const Sysbindat : scno = 538
+ const Sysconnectat : scno = 539
+ const Syschflagsat : scno = 540
+ const Sysaccept4 : scno = 541
+ const Syspipe2 : scno = 542
+ const Sysaio_mlock : scno = 543
+ const Sysprocctl : scno = 544
+
+ extern const syscall : (sc:scno, args:... -> int64)
+
+ /* process control */
+ const exit : (status:int -> void)
+ const getpid : ( -> int64)
+ const kill : (pid:int64, sig:int64 -> int64)
+ const fork : (-> int64)
+ const wait4 : (pid:int64, loc:int32#, opt : int64, usage:rusage# -> int64)
+ const waitpid : (pid:int64, loc:int32#, opt : int64 -> int64)
+ const execv : (cmd : byte[:], args : byte[:][:] -> int64)
+ const execve : (cmd : byte[:], args : byte[:][:], env : byte[:][:] -> int64)
+
+ /* fd manipulation */
+ const open : (path:byte[:], opts:fdopt -> fd)
+ const openmode : (path:byte[:], opts:fdopt, mode:int64 -> fd)
+ const close : (fd:fd -> int64)
+ const creat : (path:byte[:], mode:int64 -> fd)
+ const read : (fd:fd, buf:byte[:] -> size)
+ const write : (fd:fd, buf:byte[:] -> size)
+ const lseek : (fd:fd, off:uint64, whence:int64 -> int64)
+ const stat : (path:byte[:], sb:statbuf# -> int64)
+ const lstat : (path:byte[:], sb:statbuf# -> int64)
+ const fstat : (fd:fd, sb:statbuf# -> int64)
+ const mkdir : (path : byte[:], mode : int64 -> int64)
+ generic ioctl : (fd:fd, req : int64, arg:@a# -> int64)
+ const getdirentries64 : (fd : fd, buf : byte[:], basep : uint64# -> int64)
+
+ /* networking */
+ const socket : (dom : sockfam, stype : socktype, proto : sockproto -> fd)
+ const connect : (sock : fd, addr : sockaddr#, len : size -> int)
+ const accept : (sock : fd, addr : sockaddr#, len : size# -> fd)
+ const listen : (sock : fd, backlog : int -> int)
+ const bind : (sock : fd, addr : sockaddr#, len : size -> int)
+
+ /* memory mapping */
+ const munmap : (addr:byte#, len:size -> int64)
+ const mmap : (addr:byte#, len:size, prot:mprot, flags:mopt, fd:fd, off:off -> byte#)
+
+ /* time - doublecheck if this is right */
+ const clock_getres : (clk : clock, ts : timespec# -> int32)
+ const clock_gettime : (clk : clock, ts : timespec# -> int32)
+ const clock_settime : (clk : clock, ts : timespec# -> int32)
+ const sleep : (time : uint64 -> int32)
+ const nanosleep : (req : timespec#, rem : timespec# -> int32)
+
+ /* system information */
+ const uname : (buf : utsname# -> int)
+ const sysctl : (mib : int[:], old : byte[:]#, new : byte[:] -> int)
+;;
+
+/*
+wraps a syscall argument, converting it to 64 bits for the syscall function. This is
+the same as casting, but more concise than writing castto(int64)
+*/
+generic a = {x : @t
+ -> a(x)
+}
+
+extern const cstring : (str : byte[:] -> byte#)
+extern const alloca : (sz : size -> byte#)
+extern const __cenvp : byte##
+
+/* process management */
+const exit = {status; syscall(Sysexit, a(status))}
+const getpid = {; -> syscall(Sysgetpid, 1)}
+const kill = {pid, sig; -> syscall(Syskill, pid, sig)}
+const fork = {; -> syscall(Sysfork)}
+const wait4 = {pid, loc, opt, usage; -> syscall(Syswait4, pid, loc, opt, usage)}
+const waitpid = {pid, loc, opt;
+ -> wait4(pid, loc, opt, 0 castto(rusage#))
+}
+
+const execv = {cmd, args
+ var p, cargs, i
+
+ /* of course we fucking have to duplicate this code everywhere,
+ * since we want to stack allocate... */
+ p = alloca((args.len + 1)*sizeof(byte#))
+ cargs = (p castto(byte##))[:args.len]
+ for i = 0; i < args.len; i++
+ cargs[i] = cstring(args[i])
+ ;;
+ cargs[args.len] = 0 castto(byte#)
+ -> syscall(Sysexecve, cstring(cmd), a(p), a(__cenvp))
+}
+
+const execve = {cmd, args, env
+ var cargs, cenv, i
+ var p
+
+ /* copy the args */
+ p = alloca((args.len + 1)*sizeof(byte#))
+ cargs = (p castto(byte##))[:args.len]
+ for i = 0; i < args.len; i++
+ cargs[i] = cstring(args[i])
+ ;;
+ cargs[args.len] = 0 castto(byte#)
+
+ /*
+ copy the env.
+ of course we fucking have to duplicate this code everywhere,
+ since we want to stack allocate...
+ */
+ p = alloca((env.len + 1)*sizeof(byte#))
+ cenv = (p castto(byte##))[:env.len]
+ for i = 0; i < env.len; i++
+ cenv[i] = cstring(env[i])
+ ;;
+ cenv[env.len] = 0 castto(byte#)
+
+ -> syscall(Sysexecve, cstring(cmd), a(p), a(cenv))
+}
+
+/* fd manipulation */
+const open = {path, opts; -> syscall(Sysopen, cstring(path), a(opts), a(0o777)) castto(fd)}
+const openmode = {path, opts, mode; -> syscall(Sysopen, cstring(path), a(opts), a(mode)) castto(fd)}
+const close = {fd; -> syscall(Sysclose, a(fd))}
+const creat = {path, mode; -> openmode(path, Ocreat | Otrunc | Owronly, mode) castto(fd)}
+const read = {fd, buf; -> syscall(Sysread, a(fd), buf castto(byte#), a(buf.len)) castto(size)}
+const write = {fd, buf; -> syscall(Syswrite, a(fd), buf castto(byte#), a(buf.len)) castto(size)}
+const lseek = {fd, off, whence; -> syscall(Syslseek, a(fd), a(off), a(whence))}
+const stat = {path, sb; -> syscall(Sysstat, cstring(path), a(sb))}
+const lstat = {path, sb; -> syscall(Syslstat, cstring(path), a(sb))}
+const fstat = {fd, sb; -> syscall(Sysfstat, a(fd), a(sb))}
+const mkdir = {path, mode; -> syscall(Sysmkdir, cstring(path), a(mode)) castto(int64)}
+generic ioctl = {fd, req, arg; -> syscall(Sysioctl, a(fd), a(req), a(arg)) castto(int64)
+}
+const getdirentries64 = {fd, buf, basep; -> syscall(Sysgetdirentries, a(fd), buf castto(byte#), a(buf.len), a(basep))}
+
+/* networking */
+const socket = {dom, stype, proto; -> syscall(Syssocket, a(dom), a(stype), a(proto)) castto(fd) }
+const connect = {sock, addr, len; -> syscall(Sysconnect, a(sock), a(addr), a(len)) castto(int)}
+const accept = {sock, addr, len; -> syscall(Sysaccept, a(sock), a(addr), a(len)) castto(fd)}
+const listen = {sock, backlog; -> syscall(Syslisten, a(sock), a(backlog)) castto(int)}
+const bind = {sock, addr, len; -> syscall(Sysbind, a(sock), a(addr), a(len)) castto(int)}
+
+/* memory management */
+const munmap = {addr, len; -> syscall(Sysmunmap, a(addr), a(len))}
+const mmap = {addr, len, prot, flags, fd, off;
+ -> syscall(Sysmmap, a(addr), a(len), a(prot), a(flags), a(fd), a(off)) castto(byte#)}
+
+/* time */
+const clock_getres = {clk, ts; -> syscall(Sysclock_getres, clockid(clk), a(ts)) castto(int32)}
+const clock_gettime = {clk, ts; -> syscall(Sysclock_gettime, clockid(clk), a(ts)) castto(int32)}
+const clock_settime = {clk, ts; -> syscall(Sysclock_settime, clockid(clk), a(ts)) castto(int32)}
+
+/* system information */
+const uname = {buf; -> syscall(Sysfreebsd4_uname, a(buf)) castto(int)}
+
+const sysctl = {mib, old, new
+ var mibp
+ var mibsz
+ var o
+ var oldp
+ var oldsz
+ var newp
+ var newsz
+ var ret
+
+ mibp = mib castto(byte#)
+ mibsz = a(mib.len)
+ o = old#
+ oldp = o castto(byte#)
+ oldsz = a(o.len)
+ newp = new castto(byte#)
+ newsz = a(new.len)
+
+ /* all args already passed through a() or ar ptrs */
+ ret = syscall(Sys__sysctl, mibp, mibsz, oldp, oldsz, newp, newsz) castto(int)
+
+ old# = o[:oldsz]
+ -> ret
+}
+
+const clockid = {clk
+ match clk
+ | `Clockrealtime: -> 0
+ | `Clockvirtual: -> 1
+ | `Clockprof: -> 2
+ | `Clockmonotonic: -> 4
+ | `Clockuptime: -> 5
+ | `Clockuptime_precise: -> 7
+ | `Clockuptime_fast: -> 8
+ | `Clockrealtime_precise: -> 9
+ | `Clockrealtime_fast: -> 10
+ | `Clockmonotonic_precise: -> 11
+ | `Clockmonotonic_fast: -> 12
+ | `Clocksecond: -> 13
+ ;;
+ -> a(-1)
+}
--- a/libstd/sys+freebsd.myr
+++ /dev/null
@@ -1,788 +1,0 @@
-use "systypes.use"
-
-pkg sys =
- type scno = int64 /*syscall*/
- type fdopt = int64 /* fd options */
- type fd = int64 /* fd */
- type mprot = int64 /* memory protection */
- type mopt = int64 /* memory mapping options */
- type socktype = int64 /* socket type */
- type sockproto = int64 /* socket protocol */
- type sockfam = uint8 /* socket family */
- type filemode = uint16
- type filetype = uint8
-
- type clock = union
- `Clockrealtime
- `Clockrealtime_precise
- `Clockrealtime_fast
- `Clockmonotonic
- `Clockmonotonic_precise
- `Clockmonotonic_fast
- `Clockuptime
- `Clockuptime_precise
- `Clockuptime_fast
- `Clockvirtual
- `Clockprof
- `Clocksecond
- ;;
-
- type timespec = struct
- sec : uint64
- nsec : uint64
- ;;
-
- type timeval = struct
- sec : uint64
- usec : uint64
- ;;
-
- 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 statbuf = struct
- dev : uint32
- ino : uint32
- mode : filemode
- nlink : uint16
- uid : uint32
- gid : uint32
- rdev : uint32
- atim : timespec
- mtim : timespec
- ctim : timespec
- size : int64
- blocks : int64
- blksize : uint32
- flags : uint32
- gen : uint32
- lspare : int32
- birthtim : timespec
- ;;
-
- type utsname = struct
- system : byte[256]
- node : byte[256]
- release : byte[256]
- version : byte[256]
- machine : byte[256]
- ;;
-
- 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_storage = struct
- len : byte
- fam : sockfam
- __pad1 : byte[6]
- __align : int64
- __pad2 : byte[112]
- ;;
-
- type dirent = struct
- fileno : uint32
- reclen : uint16
- ftype : filetype
- namelen : uint8
- name : byte[256]
- ;;
-
- /* open options */
- const Ordonly : fdopt = 0x0
- const Owronly : fdopt = 0x1
- const Ordwr : fdopt = 0x2
- const Oappend : fdopt = 0x8
- const Ocreat : fdopt = 0x200
- const Onofollow : fdopt = 0x100
- const Ondelay : fdopt = 0x4
- const Otrunc : fdopt = 0x400
- const Odir : fdopt = 0x20000
-
- /* 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
-
- /* 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 M32bit : mopt = 0x80000
-
- /* 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
- const Dtwht : filetype = 14
-
- /* socket families. INCOMPLETE. */
- const Afunspec : sockfam = 0
- const Afunix : sockfam = 1
- const Afinet : sockfam = 2
- const Afinet6 : sockfam = 28
-
- /* socket types. */
- const Sockstream : socktype = 1
- const Sockdgram : socktype = 2
- const Sockraw : socktype = 3
- const Sockrdm : socktype = 4
- const Sockseqpacket : socktype = 5
-
- /* 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
-
- /* return value for a failed mapping */
- const Mapbad : byte# = -1 castto(byte#)
-
- /* syscalls */
- const Syssyscall : scno = 0
- const Sysexit : scno = 1
- const Sysfork : scno = 2
- const Sysread : scno = 3
- const Syswrite : scno = 4
- const Sysopen : scno = 5
- const Sysclose : scno = 6
- const Syswait4 : scno = 7
- const Syslink : scno = 9
- const Sysunlink : scno = 10
- const Syschdir : scno = 12
- const Sysfchdir : scno = 13
- const Sysmknod : scno = 14
- const Syschmod : scno = 15
- const Syschown : scno = 16
- const Sysbreak : scno = 17
- const Sysfreebsd4_getfsstat : scno = 18
- const Sysgetpid : scno = 20
- const Sysmount : scno = 21
- const Sysunmount : scno = 22
- const Syssetuid : scno = 23
- const Sysgetuid : scno = 24
- const Sysgeteuid : scno = 25
- const Sysptrace : scno = 26
- const Sysrecvmsg : scno = 27
- const Syssendmsg : scno = 28
- const Sysrecvfrom : scno = 29
- const Sysaccept : scno = 30
- const Sysgetpeername : scno = 31
- const Sysgetsockname : scno = 32
- const Sysaccess : scno = 33
- const Syschflags : scno = 34
- const Sysfchflags : scno = 35
- const Syssync : scno = 36
- const Syskill : scno = 37
- const Sysgetppid : scno = 39
- const Sysdup : scno = 41
- const Syspipe : scno = 42
- const Sysgetegid : scno = 43
- const Sysprofil : scno = 44
- const Sysktrace : scno = 45
- const Sysgetgid : scno = 47
- const Sysgetlogin : scno = 49
- const Syssetlogin : scno = 50
- const Sysacct : scno = 51
- const Syssigaltstack : scno = 53
- const Sysioctl : scno = 54
- const Sysreboot : scno = 55
- const Sysrevoke : scno = 56
- const Syssymlink : scno = 57
- const Sysreadlink : scno = 58
- const Sysexecve : scno = 59
- const Sysumask : scno = 60
- const Syschroot : scno = 61
- const Sysmsync : scno = 65
- const Sysvfork : scno = 66
- const Syssbrk : scno = 69
- const Syssstk : scno = 70
- const Sysvadvise : scno = 72
- const Sysmunmap : scno = 73
- const Sysmprotect : scno = 74
- const Sysmadvise : scno = 75
- const Sysmincore : scno = 78
- const Sysgetgroups : scno = 79
- const Syssetgroups : scno = 80
- const Sysgetpgrp : scno = 81
- const Syssetpgid : scno = 82
- const Syssetitimer : scno = 83
- const Sysswapon : scno = 85
- const Sysgetitimer : scno = 86
- const Sysgetdtablesize : scno = 89
- const Sysdup2 : scno = 90
- const Sysfcntl : scno = 92
- const Sysselect : scno = 93
- const Sysfsync : scno = 95
- const Syssetpriority : scno = 96
- const Syssocket : scno = 97
- const Sysconnect : scno = 98
- const Sysgetpriority : scno = 100
- const Sysbind : scno = 104
- const Syssetsockopt : scno = 105
- const Syslisten : scno = 106
- const Sysgettimeofday : scno = 116
- const Sysgetrusage : scno = 117
- const Sysgetsockopt : scno = 118
- const Sysreadv : scno = 120
- const Syswritev : scno = 121
- const Syssettimeofday : scno = 122
- const Sysfchown : scno = 123
- const Sysfchmod : scno = 124
- const Syssetreuid : scno = 126
- const Syssetregid : scno = 127
- const Sysrename : scno = 128
- const Sysflock : scno = 131
- const Sysmkfifo : scno = 132
- const Syssendto : scno = 133
- const Sysshutdown : scno = 134
- const Syssocketpair : scno = 135
- const Sysmkdir : scno = 136
- const Sysrmdir : scno = 137
- const Sysutimes : scno = 138
- const Sysadjtime : scno = 140
- const Syssetsid : scno = 147
- const Sysquotactl : scno = 148
- const Sysnlm_syscall : scno = 154
- const Sysnfssvc : scno = 155
- const Sysfreebsd4_statfs : scno = 157
- const Sysfreebsd4_fstatfs : scno = 158
- const Syslgetfh : scno = 160
- const Sysgetfh : scno = 161
- const Sysfreebsd4_getdomainname : scno = 162
- const Sysfreebsd4_setdomainname : scno = 163
- const Sysfreebsd4_uname : scno = 164
- const Syssysarch : scno = 165
- const Sysrtprio : scno = 166
- const Syssemsys : scno = 169
- const Sysmsgsys : scno = 170
- const Sysshmsys : scno = 171
- const Sysfreebsd6_pread : scno = 173
- const Sysfreebsd6_pwrite : scno = 174
- const Syssetfib : scno = 175
- const Sysntp_adjtime : scno = 176
- const Syssetgid : scno = 181
- const Syssetegid : scno = 182
- const Sysseteuid : scno = 183
- const Sysstat : scno = 188
- const Sysfstat : scno = 189
- const Syslstat : scno = 190
- const Syspathconf : scno = 191
- const Sysfpathconf : scno = 192
- const Sysgetrlimit : scno = 194
- const Syssetrlimit : scno = 195
- const Sysgetdirentries : scno = 196
- const Sysfreebsd6_mmap : scno = 197
- const Sys__syscall : scno = 198
- const Sysfreebsd6_lseek : scno = 199
- const Sysfreebsd6_truncate : scno = 200
- const Sysfreebsd6_ftruncate : scno = 201
- const Sys__sysctl : scno = 202
- const Sysmlock : scno = 203
- const Sysmunlock : scno = 204
- const Sysundelete : scno = 205
- const Sysfutimes : scno = 206
- const Sysgetpgid : scno = 207
- const Syspoll : scno = 209
- const Sysfreebsd7___semctl : scno = 220
- const Syssemget : scno = 221
- const Syssemop : scno = 222
- const Sysfreebsd7_msgctl : scno = 224
- const Sysmsgget : scno = 225
- const Sysmsgsnd : scno = 226
- const Sysmsgrcv : scno = 227
- const Sysshmat : scno = 228
- const Sysfreebsd7_shmctl : scno = 229
- const Sysshmdt : scno = 230
- const Sysshmget : scno = 231
- const Sysclock_gettime : scno = 232
- const Sysclock_settime : scno = 233
- const Sysclock_getres : scno = 234
- const Sysktimer_create : scno = 235
- const Sysktimer_delete : scno = 236
- const Sysktimer_settime : scno = 237
- const Sysktimer_gettime : scno = 238
- const Sysktimer_getoverrun : scno = 239
- const Sysnanosleep : scno = 240
- const Sysffclock_getcounter : scno = 241
- const Sysffclock_setestimate : scno = 242
- const Sysffclock_getestimate : scno = 243
- const Sysclock_getcpuclockid2 : scno = 247
- const Sysntp_gettime : scno = 248
- const Sysminherit : scno = 250
- const Sysrfork : scno = 251
- const Sysopenbsd_poll : scno = 252
- const Sysissetugid : scno = 253
- const Syslchown : scno = 254
- const Sysaio_read : scno = 255
- const Sysaio_write : scno = 256
- const Syslio_listio : scno = 257
- const Sysgetdents : scno = 272
- const Syslchmod : scno = 274
- const Sysnetbsd_lchown : scno = 275
- const Syslutimes : scno = 276
- const Sysnetbsd_msync : scno = 277
- const Sysnstat : scno = 278
- const Sysnfstat : scno = 279
- const Sysnlstat : scno = 280
- const Syspreadv : scno = 289
- const Syspwritev : scno = 290
- const Sysfreebsd4_fhstatfs : scno = 297
- const Sysfhopen : scno = 298
- const Sysfhstat : scno = 299
- const Sysmodnext : scno = 300
- const Sysmodstat : scno = 301
- const Sysmodfnext : scno = 302
- const Sysmodfind : scno = 303
- const Syskldload : scno = 304
- const Syskldunload : scno = 305
- const Syskldfind : scno = 306
- const Syskldnext : scno = 307
- const Syskldstat : scno = 308
- const Syskldfirstmod : scno = 309
- const Sysgetsid : scno = 310
- const Syssetresuid : scno = 311
- const Syssetresgid : scno = 312
- const Sysaio_return : scno = 314
- const Sysaio_suspend : scno = 315
- const Sysaio_cancel : scno = 316
- const Sysaio_error : scno = 317
- const Sysoaio_read : scno = 318
- const Sysoaio_write : scno = 319
- const Sysolio_listio : scno = 320
- const Sysyield : scno = 321
- const Sysmlockall : scno = 324
- const Sysmunlockall : scno = 325
- const Sys__getcwd : scno = 326
- const Syssched_setparam : scno = 327
- const Syssched_getparam : scno = 328
- const Syssched_setscheduler : scno = 329
- const Syssched_getscheduler : scno = 330
- const Syssched_yield : scno = 331
- const Syssched_get_priority_max : scno = 332
- const Syssched_get_priority_min : scno = 333
- const Syssched_rr_get_interval : scno = 334
- const Sysutrace : scno = 335
- const Sysfreebsd4_sendfile : scno = 336
- const Syskldsym : scno = 337
- const Sysjail : scno = 338
- const Sysnnpfs_syscall : scno = 339
- const Syssigprocmask : scno = 340
- const Syssigsuspend : scno = 341
- const Sysfreebsd4_sigaction : scno = 342
- const Syssigpending : scno = 343
- const Sysfreebsd4_sigreturn : scno = 344
- const Syssigtimedwait : scno = 345
- const Syssigwaitinfo : scno = 346
- const Sys__acl_get_file : scno = 347
- const Sys__acl_set_file : scno = 348
- const Sys__acl_get_fd : scno = 349
- const Sys__acl_set_fd : scno = 350
- const Sys__acl_delete_file : scno = 351
- const Sys__acl_delete_fd : scno = 352
- const Sys__acl_aclcheck_file : scno = 353
- const Sys__acl_aclcheck_fd : scno = 354
- const Sysextattrctl : scno = 355
- const Sysextattr_set_file : scno = 356
- const Sysextattr_get_file : scno = 357
- const Sysextattr_delete_file : scno = 358
- const Sysaio_waitcomplete : scno = 359
- const Sysgetresuid : scno = 360
- const Sysgetresgid : scno = 361
- const Syskqueue : scno = 362
- const Syskevent : scno = 363
- const Sysextattr_set_fd : scno = 371
- const Sysextattr_get_fd : scno = 372
- const Sysextattr_delete_fd : scno = 373
- const Sys__setugid : scno = 374
- const Syseaccess : scno = 376
- const Sysafs3_syscall : scno = 377
- const Sysnmount : scno = 378
- const Sys__mac_get_proc : scno = 384
- const Sys__mac_set_proc : scno = 385
- const Sys__mac_get_fd : scno = 386
- const Sys__mac_get_file : scno = 387
- const Sys__mac_set_fd : scno = 388
- const Sys__mac_set_file : scno = 389
- const Syskenv : scno = 390
- const Syslchflags : scno = 391
- const Sysuuidgen : scno = 392
- const Syssendfile : scno = 393
- const Sysmac_syscall : scno = 394
- const Sysgetfsstat : scno = 395
- const Sysstatfs : scno = 396
- const Sysfstatfs : scno = 397
- const Sysfhstatfs : scno = 398
- const Sysksem_close : scno = 400
- const Sysksem_post : scno = 401
- const Sysksem_wait : scno = 402
- const Sysksem_trywait : scno = 403
- const Sysksem_init : scno = 404
- const Sysksem_open : scno = 405
- const Sysksem_unlink : scno = 406
- const Sysksem_getvalue : scno = 407
- const Sysksem_destroy : scno = 408
- const Sys__mac_get_pid : scno = 409
- const Sys__mac_get_link : scno = 410
- const Sys__mac_set_link : scno = 411
- const Sysextattr_set_link : scno = 412
- const Sysextattr_get_link : scno = 413
- const Sysextattr_delete_link : scno = 414
- const Sys__mac_execve : scno = 415
- const Syssigaction : scno = 416
- const Syssigreturn : scno = 417
- const Sysgetcontext : scno = 421
- const Syssetcontext : scno = 422
- const Sysswapcontext : scno = 423
- const Sysswapoff : scno = 424
- const Sys__acl_get_link : scno = 425
- const Sys__acl_set_link : scno = 426
- const Sys__acl_delete_link : scno = 427
- const Sys__acl_aclcheck_link : scno = 428
- const Syssigwait : scno = 429
- const Systhr_create : scno = 430
- const Systhr_exit : scno = 431
- const Systhr_self : scno = 432
- const Systhr_kill : scno = 433
- const Sys_umtx_lock : scno = 434
- const Sys_umtx_unlock : scno = 435
- const Sysjail_attach : scno = 436
- const Sysextattr_list_fd : scno = 437
- const Sysextattr_list_file : scno = 438
- const Sysextattr_list_link : scno = 439
- const Sysksem_timedwait : scno = 441
- const Systhr_suspend : scno = 442
- const Systhr_wake : scno = 443
- const Syskldunloadf : scno = 444
- const Sysaudit : scno = 445
- const Sysauditon : scno = 446
- const Sysgetauid : scno = 447
- const Syssetauid : scno = 448
- const Sysgetaudit : scno = 449
- const Syssetaudit : scno = 450
- const Sysgetaudit_addr : scno = 451
- const Syssetaudit_addr : scno = 452
- const Sysauditctl : scno = 453
- const Sys_umtx_op : scno = 454
- const Systhr_new : scno = 455
- const Syssigqueue : scno = 456
- const Syskmq_open : scno = 457
- const Syskmq_setattr : scno = 458
- const Syskmq_timedreceive : scno = 459
- const Syskmq_timedsend : scno = 460
- const Syskmq_notify : scno = 461
- const Syskmq_unlink : scno = 462
- const Sysabort2 : scno = 463
- const Systhr_set_name : scno = 464
- const Sysaio_fsync : scno = 465
- const Sysrtprio_thread : scno = 466
- const Syssctp_peeloff : scno = 471
- const Syssctp_generic_sendmsg : scno = 472
- const Syssctp_generic_sendmsg_iov : scno = 473
- const Syssctp_generic_recvmsg : scno = 474
- const Syspread : scno = 475
- const Syspwrite : scno = 476
- const Sysmmap : scno = 477
- const Syslseek : scno = 478
- const Systruncate : scno = 479
- const Sysftruncate : scno = 480
- const Systhr_kill2 : scno = 481
- const Sysshm_open : scno = 482
- const Sysshm_unlink : scno = 483
- const Syscpuset : scno = 484
- const Syscpuset_setid : scno = 485
- const Syscpuset_getid : scno = 486
- const Syscpuset_getaffinity : scno = 487
- const Syscpuset_setaffinity : scno = 488
- const Sysfaccessat : scno = 489
- const Sysfchmodat : scno = 490
- const Sysfchownat : scno = 491
- const Sysfexecve : scno = 492
- const Sysfstatat : scno = 493
- const Sysfutimesat : scno = 494
- const Syslinkat : scno = 495
- const Sysmkdirat : scno = 496
- const Sysmkfifoat : scno = 497
- const Sysmknodat : scno = 498
- const Sysopenat : scno = 499
- const Sysreadlinkat : scno = 500
- const Sysrenameat : scno = 501
- const Syssymlinkat : scno = 502
- const Sysunlinkat : scno = 503
- const Sysposix_openpt : scno = 504
- const Sysgssd_syscall : scno = 505
- const Sysjail_get : scno = 506
- const Sysjail_set : scno = 507
- const Sysjail_remove : scno = 508
- const Sysclosefrom : scno = 509
- const Sys__semctl : scno = 510
- const Sysmsgctl : scno = 511
- const Sysshmctl : scno = 512
- const Syslpathconf : scno = 513
- const Sys__cap_rights_get : scno = 515
- const Syscap_enter : scno = 516
- const Syscap_getmode : scno = 517
- const Syspdfork : scno = 518
- const Syspdkill : scno = 519
- const Syspdgetpid : scno = 520
- const Syspselect : scno = 522
- const Sysgetloginclass : scno = 523
- const Syssetloginclass : scno = 524
- const Sysrctl_get_racct : scno = 525
- const Sysrctl_get_rules : scno = 526
- const Sysrctl_get_limits : scno = 527
- const Sysrctl_add_rule : scno = 528
- const Sysrctl_remove_rule : scno = 529
- const Sysposix_fallocate : scno = 530
- const Sysposix_fadvise : scno = 531
- const Syswait6 : scno = 532
- const Syscap_rights_limit : scno = 533
- const Syscap_ioctls_limit : scno = 534
- const Syscap_ioctls_get : scno = 535
- const Syscap_fcntls_limit : scno = 536
- const Syscap_fcntls_get : scno = 537
- const Sysbindat : scno = 538
- const Sysconnectat : scno = 539
- const Syschflagsat : scno = 540
- const Sysaccept4 : scno = 541
- const Syspipe2 : scno = 542
- const Sysaio_mlock : scno = 543
- const Sysprocctl : scno = 544
-
- extern const syscall : (sc:scno, args:... -> int64)
-
- /* process control */
- const exit : (status:int -> void)
- const getpid : ( -> int64)
- const kill : (pid:int64, sig:int64 -> int64)
- const fork : (-> int64)
- const wait4 : (pid:int64, loc:int32#, opt : int64, usage:rusage# -> int64)
- const waitpid : (pid:int64, loc:int32#, opt : int64 -> int64)
- const execv : (cmd : byte[:], args : byte[:][:] -> int64)
- const execve : (cmd : byte[:], args : byte[:][:], env : byte[:][:] -> int64)
-
- /* fd manipulation */
- const open : (path:byte[:], opts:fdopt -> fd)
- const openmode : (path:byte[:], opts:fdopt, mode:int64 -> fd)
- const close : (fd:fd -> int64)
- const creat : (path:byte[:], mode:int64 -> fd)
- const read : (fd:fd, buf:byte[:] -> size)
- const write : (fd:fd, buf:byte[:] -> size)
- const lseek : (fd:fd, off:uint64, whence:int64 -> int64)
- const stat : (path:byte[:], sb:statbuf# -> int64)
- const lstat : (path:byte[:], sb:statbuf# -> int64)
- const fstat : (fd:fd, sb:statbuf# -> int64)
- const mkdir : (path : byte[:], mode : int64 -> int64)
- generic ioctl : (fd:fd, req : int64, arg:@a# -> int64)
- const getdirentries64 : (fd : fd, buf : byte[:], basep : uint64# -> int64)
-
- /* networking */
- const socket : (dom : sockfam, stype : socktype, proto : sockproto -> fd)
- const connect : (sock : fd, addr : sockaddr#, len : size -> int)
- const accept : (sock : fd, addr : sockaddr#, len : size# -> fd)
- const listen : (sock : fd, backlog : int -> int)
- const bind : (sock : fd, addr : sockaddr#, len : size -> int)
-
- /* memory mapping */
- const munmap : (addr:byte#, len:size -> int64)
- const mmap : (addr:byte#, len:size, prot:mprot, flags:mopt, fd:fd, off:off -> byte#)
-
- /* time - doublecheck if this is right */
- const clock_getres : (clk : clock, ts : timespec# -> int32)
- const clock_gettime : (clk : clock, ts : timespec# -> int32)
- const clock_settime : (clk : clock, ts : timespec# -> int32)
- const sleep : (time : uint64 -> int32)
- const nanosleep : (req : timespec#, rem : timespec# -> int32)
-
- /* system information */
- const uname : (buf : utsname# -> int)
- const sysctl : (mib : int[:], old : byte[:]#, new : byte[:] -> int)
-;;
-
-/*
-wraps a syscall argument, converting it to 64 bits for the syscall function. This is
-the same as casting, but more concise than writing castto(int64)
-*/
-generic a = {x : @t
- -> a(x)
-}
-
-extern const cstring : (str : byte[:] -> byte#)
-extern const alloca : (sz : size -> byte#)
-extern const __cenvp : byte##
-
-/* process management */
-const exit = {status; syscall(Sysexit, a(status))}
-const getpid = {; -> syscall(Sysgetpid, 1)}
-const kill = {pid, sig; -> syscall(Syskill, pid, sig)}
-const fork = {; -> syscall(Sysfork)}
-const wait4 = {pid, loc, opt, usage; -> syscall(Syswait4, pid, loc, opt, usage)}
-const waitpid = {pid, loc, opt;
- -> wait4(pid, loc, opt, 0 castto(rusage#))
-}
-
-const execv = {cmd, args
- var p, cargs, i
-
- /* of course we fucking have to duplicate this code everywhere,
- * since we want to stack allocate... */
- p = alloca((args.len + 1)*sizeof(byte#))
- cargs = (p castto(byte##))[:args.len]
- for i = 0; i < args.len; i++
- cargs[i] = cstring(args[i])
- ;;
- cargs[args.len] = 0 castto(byte#)
- -> syscall(Sysexecve, cstring(cmd), a(p), a(__cenvp))
-}
-
-const execve = {cmd, args, env
- var cargs, cenv, i
- var p
-
- /* copy the args */
- p = alloca((args.len + 1)*sizeof(byte#))
- cargs = (p castto(byte##))[:args.len]
- for i = 0; i < args.len; i++
- cargs[i] = cstring(args[i])
- ;;
- cargs[args.len] = 0 castto(byte#)
-
- /*
- copy the env.
- of course we fucking have to duplicate this code everywhere,
- since we want to stack allocate...
- */
- p = alloca((env.len + 1)*sizeof(byte#))
- cenv = (p castto(byte##))[:env.len]
- for i = 0; i < env.len; i++
- cenv[i] = cstring(env[i])
- ;;
- cenv[env.len] = 0 castto(byte#)
-
- -> syscall(Sysexecve, cstring(cmd), a(p), a(cenv))
-}
-
-/* fd manipulation */
-const open = {path, opts; -> syscall(Sysopen, cstring(path), a(opts), a(0o777)) castto(fd)}
-const openmode = {path, opts, mode; -> syscall(Sysopen, cstring(path), a(opts), a(mode)) castto(fd)}
-const close = {fd; -> syscall(Sysclose, a(fd))}
-const creat = {path, mode; -> openmode(path, Ocreat | Otrunc | Owronly, mode) castto(fd)}
-const read = {fd, buf; -> syscall(Sysread, a(fd), buf castto(byte#), a(buf.len)) castto(size)}
-const write = {fd, buf; -> syscall(Syswrite, a(fd), buf castto(byte#), a(buf.len)) castto(size)}
-const lseek = {fd, off, whence; -> syscall(Syslseek, a(fd), a(off), a(whence))}
-const stat = {path, sb; -> syscall(Sysstat, cstring(path), a(sb))}
-const lstat = {path, sb; -> syscall(Syslstat, cstring(path), a(sb))}
-const fstat = {fd, sb; -> syscall(Sysfstat, a(fd), a(sb))}
-const mkdir = {path, mode; -> syscall(Sysmkdir, cstring(path), a(mode)) castto(int64)}
-generic ioctl = {fd, req, arg; -> syscall(Sysioctl, a(fd), a(req), a(arg)) castto(int64)
-}
-const getdirentries64 = {fd, buf, basep; -> syscall(Sysgetdirentries, a(fd), buf castto(byte#), a(buf.len), a(basep))}
-
-/* networking */
-const socket = {dom, stype, proto; -> syscall(Syssocket, a(dom), a(stype), a(proto)) castto(fd) }
-const connect = {sock, addr, len; -> syscall(Sysconnect, a(sock), a(addr), a(len)) castto(int)}
-const accept = {sock, addr, len; -> syscall(Sysaccept, a(sock), a(addr), a(len)) castto(fd)}
-const listen = {sock, backlog; -> syscall(Syslisten, a(sock), a(backlog)) castto(int)}
-const bind = {sock, addr, len; -> syscall(Sysbind, a(sock), a(addr), a(len)) castto(int)}
-
-/* memory management */
-const munmap = {addr, len; -> syscall(Sysmunmap, a(addr), a(len))}
-const mmap = {addr, len, prot, flags, fd, off;
- -> syscall(Sysmmap, a(addr), a(len), a(prot), a(flags), a(fd), a(off)) castto(byte#)}
-
-/* time */
-const clock_getres = {clk, ts; -> syscall(Sysclock_getres, clockid(clk), a(ts)) castto(int32)}
-const clock_gettime = {clk, ts; -> syscall(Sysclock_gettime, clockid(clk), a(ts)) castto(int32)}
-const clock_settime = {clk, ts; -> syscall(Sysclock_settime, clockid(clk), a(ts)) castto(int32)}
-
-/* system information */
-const uname = {buf; -> syscall(Sysfreebsd4_uname, a(buf)) castto(int)}
-
-const sysctl = {mib, old, new
- var mibp
- var mibsz
- var o
- var oldp
- var oldsz
- var newp
- var newsz
- var ret
-
- mibp = mib castto(byte#)
- mibsz = a(mib.len)
- o = old#
- oldp = o castto(byte#)
- oldsz = a(o.len)
- newp = new castto(byte#)
- newsz = a(new.len)
-
- /* all args already passed through a() or ar ptrs */
- ret = syscall(Sys__sysctl, mibp, mibsz, oldp, oldsz, newp, newsz) castto(int)
-
- old# = o[:oldsz]
- -> ret
-}
-
-const clockid = {clk
- match clk
- | `Clockrealtime: -> 0
- | `Clockvirtual: -> 1
- | `Clockprof: -> 2
- | `Clockmonotonic: -> 4
- | `Clockuptime: -> 5
- | `Clockuptime_precise: -> 7
- | `Clockuptime_fast: -> 8
- | `Clockrealtime_precise: -> 9
- | `Clockrealtime_fast: -> 10
- | `Clockmonotonic_precise: -> 11
- | `Clockmonotonic_fast: -> 12
- | `Clocksecond: -> 13
- ;;
- -> a(-1)
-}
--- /dev/null
+++ b/libstd/sys+linux-x64.myr
@@ -1,0 +1,747 @@
+use "systypes.use"
+
+pkg sys =
+ type pid = int64 /* process id */
+ type scno = int64 /* syscall */
+ type fdopt = int64 /* fd options */
+ type fd = int32 /* fd */
+ type mprot = int64 /* memory protection */
+ type mopt = int64 /* memory mapping options */
+
+ type socktype = int64 /* socket type */
+ type sockproto = int64 /* socket protocol */
+ type sockfam = uint16 /* socket family */
+
+ type whence = uint64
+ type filemode = uint32
+
+ type epollflags = uint32
+ type epollop = uint32
+ type epollevttype = uint32
+
+ type pollevt = uint16
+
+ type clock = union
+ `Clockrealtime
+ `Clockmonotonic
+ `Clockproccpu
+ `Clockthreadcpu
+ `Clockmonotonicraw
+ `Clockrealtimecoarse
+ `Clockmonotoniccoarse
+ `Clockboottime
+ `Clockrealtimealarm
+ `Clockboottimealarm
+ ;;
+
+ type timespec = struct
+ sec : uint64
+ nsec : uint64
+ ;;
+
+ type timeval = struct
+ sec : uint64
+ usec : uint64
+ ;;
+
+ type rusage = struct
+ utime : timeval /* user time */
+ stime : timeval /* system time */
+ _opaque : uint64[14] /* padding (darwin-specific data) */
+ ;;
+
+ type statbuf = struct
+ dev : uint64
+ ino : uint64
+ nlink : uint64
+ mode : filemode
+ uid : uint32
+ gid : uint32
+ __pad0 : uint32
+ rdev : uint64
+ size : uint64
+ blksz : uint32
+ blocks : uint64
+ atime : timespec
+ mtime : timespec
+ ctime : timespec
+ __pad1 : uint64[3]
+ ;;
+
+ type dirent64 = struct
+ ino : uint64
+ off : uint64
+ reclen : uint16
+ etype : byte
+ name : byte[0]
+ ;;
+
+ type utsname = struct
+ system : byte[65]
+ node : byte[65]
+ release : byte[65]
+ version : byte[65]
+ machine : byte[65]
+ domain : byte[65]
+ ;;
+
+ type sockaddr = struct
+ fam : sockfam
+ data : byte[14]
+ ;;
+
+ type sockaddr_in = struct
+ fam : sockfam
+ port : uint16
+ addr : byte[4]
+ zero : byte[8]
+ ;;
+
+ type sockaddr_storage = struct
+ fam : sockfam
+ __align : uint32
+ __pad : byte[112]
+ ;;
+
+ type epollevt = struct
+ events : epollevttype
+ data : byte[8]
+ ;;
+
+ type pollfd = struct
+ fd : fd
+ events : pollevt
+ revents : pollevt
+ ;;
+
+
+ /* open options */
+ const Ordonly : fdopt = 0x0
+ const Owronly : fdopt = 0x1
+ const Ordwr : fdopt = 0x2
+ const Ocreat : fdopt = 0x40
+ const Oexcl : fdopt = 0x80
+ const Otrunc : fdopt = 0x200
+ const Oappend : fdopt = 0x400
+ const Ondelay : fdopt = 0x800
+ const Odirect : fdopt = 0x4000
+ const Odir : fdopt = 0x10000
+ const Onofollow : fdopt = 0x20000
+
+ /* 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
+
+ /* mmap protection */
+ const Mprotnone : mprot = 0x0
+ const Mprotrd : mprot = 0x1
+ const Mprotwr : mprot = 0x2
+ const Mprotexec : mprot = 0x4
+ const Mprotrw : mprot = 0x3 /* convenience */
+
+ /* mmap options */
+ const Mshared : mopt = 0x1
+ const Mpriv : mopt = 0x2
+ const Mfixed : mopt = 0x10
+ const Mfile : mopt = 0x0
+ const Manon : mopt = 0x20
+ const M32bit : mopt = 0x40
+
+ /* socket families. INCOMPLETE. */
+ const Afunspec : sockfam = 0
+ const Afunix : sockfam = 1
+ const Afinet : sockfam = 2
+ const Afinet6 : sockfam = 10
+
+ /* socket types. */
+ const Sockstream : socktype = 1 /* sequenced, reliable byte stream */
+ const Sockdgram : socktype = 2 /* datagrams */
+ const Sockraw : socktype = 3 /* raw proto */
+ const Sockrdm : socktype = 4 /* reliably delivered messages */
+ const Sockseqpacket : socktype = 5 /* sequenced, reliable packets */
+ const Sockdccp : socktype = 6 /* data congestion control protocol */
+ const Sockpack : socktype = 10 /* linux specific packet */
+
+ /* 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
+
+ /* epoll flags */
+ const Epollcloexec : epollflags = 0o2000000
+
+ /* epoll ops */
+ const Epollctladd : epollop = 0
+ const Epollctlmod : epollop = 1
+ const Epollctldel : epollop = 1
+
+ /* epoll events */
+ const Epollin : epollevttype = 0x001
+ const Epollpri : epollevttype = 0x002
+ const Epollout : epollevttype = 0x004
+ const Epollerr : epollevttype = 0x008
+ const Epollhup : epollevttype = 0x010
+ const Epollrdnorm : epollevttype = 0x040
+ const Epollrdband : epollevttype = 0x080
+ const Epollwrnorm : epollevttype = 0x100
+ const Epollwrband : epollevttype = 0x200
+ const Epollmsg : epollevttype = 0x400
+ const Epollrdhup : epollevttype = 0x2000
+ const Epollwakeup : epollevttype = 1 << 29
+ const Epolloneshot : epollevttype = 1 << 30
+ const Epolledge : epollevttype = 1 << 31
+
+ /* poll events : posix */
+ const Pollin : pollevt = 0x001 /* There is data to read. */
+ const Pollpri : pollevt = 0x002 /* There is urgent data to read. */
+ const Pollout : pollevt = 0x004 /* Writing now will not block. */
+
+ /* poll events: xopen */
+ const Pollrdnorm : pollevt = 0x040 /* Normal data may be read. */
+ const Pollrdband : pollevt = 0x080 /* Priority data may be read. */
+ const Pollwrnorm : pollevt = 0x100 /* Writing now will not block. */
+ const Pollwrband : pollevt = 0x200 /* Priority data may be written. */
+
+ /* poll events: linux */
+ const Pollmsg : pollevt = 0x400
+ const Pollremove : pollevt = 0x1000
+ const Pollrdhup : pollevt = 0x2000
+
+ const Seekset : whence = 0
+ const Seekcur : whence = 1
+ const Seekend : whence = 2
+
+ /* return value for a failed mapping */
+ const Mapbad : byte# = -1 castto(byte#)
+
+ /* syscalls */
+ const Sysread : scno = 0
+ const Syswrite : scno = 1
+ const Sysopen : scno = 2
+ const Sysclose : scno = 3
+ const Sysstat : scno = 4
+ const Sysfstat : scno = 5
+ const Syslstat : scno = 6
+ const Syspoll : scno = 7
+ const Syslseek : scno = 8
+ const Sysmmap : scno = 9
+ const Sysmprotect : scno = 10
+ const Sysmunmap : scno = 11
+ const Sysbrk : scno = 12
+ const Sysrt_sigaction : scno = 13
+ const Sysrt_sigprocmask : scno = 14
+ const Sysrt_sigreturn : scno = 15
+ const Sysioctl : scno = 16
+ const Syspread64 : scno = 17
+ const Syspwrite64 : scno = 18
+ const Sysreadv : scno = 19
+ const Syswritev : scno = 20
+ const Sysaccess : scno = 21
+ const Syspipe : scno = 22
+ const Sysselect : scno = 23
+ const Syssched_yield : scno = 24
+ const Sysmremap : scno = 25
+ const Sysmsync : scno = 26
+ const Sysmincore : scno = 27
+ const Sysmadvise : scno = 28
+ const Sysshmget : scno = 29
+ const Sysshmat : scno = 30
+ const Sysshmctl : scno = 31
+ const Sysdup : scno = 32
+ const Sysdup2 : scno = 33
+ const Syspause : scno = 34
+ const Sysnanosleep : scno = 35
+ const Sysgetitimer : scno = 36
+ const Sysalarm : scno = 37
+ const Syssetitimer : scno = 38
+ const Sysgetpid : scno = 39
+ const Syssendfile : scno = 40
+ const Syssocket : scno = 41
+ const Sysconnect : scno = 42
+ const Sysaccept : scno = 43
+ const Syssendto : scno = 44
+ const Sysrecvfrom : scno = 45
+ const Syssendmsg : scno = 46
+ const Sysrecvmsg : scno = 47
+ const Sysshutdown : scno = 48
+ const Sysbind : scno = 49
+ const Syslisten : scno = 50
+ const Sysgetsockname : scno = 51
+ const Sysgetpeername : scno = 52
+ const Syssocketpair : scno = 53
+ const Syssetsockopt : scno = 54
+ const Sysgetsockopt : scno = 55
+ const Sysclone : scno = 56
+ const Sysfork : scno = 57
+ const Sysvfork : scno = 58
+ const Sysexecve : scno = 59
+ const Sysexit : scno = 60
+ const Syswait4 : scno = 61
+ const Syskill : scno = 62
+ const Sysuname : scno = 63
+ const Syssemget : scno = 64
+ const Syssemop : scno = 65
+ const Syssemctl : scno = 66
+ const Sysshmdt : scno = 67
+ const Sysmsgget : scno = 68
+ const Sysmsgsnd : scno = 69
+ const Sysmsgrcv : scno = 70
+ const Sysmsgctl : scno = 71
+ const Sysfcntl : scno = 72
+ const Sysflock : scno = 73
+ const Sysfsync : scno = 74
+ const Sysfdatasync : scno = 75
+ const Systruncate : scno = 76
+ const Sysftruncate : scno = 77
+ const Sysgetdents : scno = 78
+ const Sysgetcwd : scno = 79
+ const Syschdir : scno = 80
+ const Sysfchdir : scno = 81
+ const Sysrename : scno = 82
+ const Sysmkdir : scno = 83
+ const Sysrmdir : scno = 84
+ const Syscreat : scno = 85
+ const Syslink : scno = 86
+ const Sysunlink : scno = 87
+ const Syssymlink : scno = 88
+ const Sysreadlink : scno = 89
+ const Syschmod : scno = 90
+ const Sysfchmod : scno = 91
+ const Syschown : scno = 92
+ const Sysfchown : scno = 93
+ const Syslchown : scno = 94
+ const Sysumask : scno = 95
+ const Sysgettimeofday : scno = 96
+ const Sysgetrlimit : scno = 97
+ const Sysgetrusage : scno = 98
+ const Syssysinfo : scno = 99
+ const Systimes : scno = 100
+ const Sysptrace : scno = 101
+ const Sysgetuid : scno = 102
+ const Syssyslog : scno = 103
+ const Sysgetgid : scno = 104
+ const Syssetuid : scno = 105
+ const Syssetgid : scno = 106
+ const Sysgeteuid : scno = 107
+ const Sysgetegid : scno = 108
+ const Syssetpgid : scno = 109
+ const Sysgetppid : scno = 110
+ const Sysgetpgrp : scno = 111
+ const Syssetsid : scno = 112
+ const Syssetreuid : scno = 113
+ const Syssetregid : scno = 114
+ const Sysgetgroups : scno = 115
+ const Syssetgroups : scno = 116
+ const Syssetresuid : scno = 117
+ const Sysgetresuid : scno = 118
+ const Syssetresgid : scno = 119
+ const Sysgetresgid : scno = 120
+ const Sysgetpgid : scno = 121
+ const Syssetfsuid : scno = 122
+ const Syssetfsgid : scno = 123
+ const Sysgetsid : scno = 124
+ const Syscapget : scno = 125
+ const Syscapset : scno = 126
+ const Sysrt_sigpending : scno = 127
+ const Sysrt_sigtimedwait : scno = 128
+ const Sysrt_sigqueueinfo : scno = 129
+ const Sysrt_sigsuspend : scno = 130
+ const Syssigaltstack : scno = 131
+ const Sysutime : scno = 132
+ const Sysmknod : scno = 133
+ const Sysuselib : scno = 134
+ const Syspersonality : scno = 135
+ const Sysustat : scno = 136
+ const Sysstatfs : scno = 137
+ const Sysfstatfs : scno = 138
+ const Syssysfs : scno = 139
+ const Sysgetpriority : scno = 140
+ const Syssetpriority : scno = 141
+ const Syssched_setparam : scno = 142
+ const Syssched_getparam : scno = 143
+ const Syssched_setscheduler : scno = 144
+ const Syssched_getscheduler : scno = 145
+ const Syssched_get_priority_max : scno = 146
+ const Syssched_get_priority_min : scno = 147
+ const Syssched_rr_get_interval : scno = 148
+ const Sysmlock : scno = 149
+ const Sysmunlock : scno = 150
+ const Sysmlockall : scno = 151
+ const Sysmunlockall : scno = 152
+ const Sysvhangup : scno = 153
+ const Sysmodify_ldt : scno = 154
+ const Syspivot_root : scno = 155
+ const Sys_sysctl : scno = 156
+ const Sysprctl : scno = 157
+ const Sysarch_prctl : scno = 158
+ const Sysadjtimex : scno = 159
+ const Syssetrlimit : scno = 160
+ const Syschroot : scno = 161
+ const Syssync : scno = 162
+ const Sysacct : scno = 163
+ const Syssettimeofday : scno = 164
+ const Sysmount : scno = 165
+ const Sysumount2 : scno = 166
+ const Sysswapon : scno = 167
+ const Sysswapoff : scno = 168
+ const Sysreboot : scno = 169
+ const Syssethostname : scno = 170
+ const Syssetdomainname : scno = 171
+ const Sysiopl : scno = 172
+ const Sysioperm : scno = 173
+ const Syscreate_module : scno = 174
+ const Sysinit_module : scno = 175
+ const Sysdelete_module : scno = 176
+ const Sysget_kernel_syms : scno = 177
+ const Sysquery_module : scno = 178
+ const Sysquotactl : scno = 179
+ const Sysnfsservctl : scno = 180
+ const Sysgetpmsg : scno = 181
+ const Sysputpmsg : scno = 182
+ const Sysafs_syscall : scno = 183
+ const Systuxcall : scno = 184
+ const Syssecurity : scno = 185
+ const Sysgettid : scno = 186
+ const Sysreadahead : scno = 187
+ const Syssetxattr : scno = 188
+ const Syslsetxattr : scno = 189
+ const Sysfsetxattr : scno = 190
+ const Sysgetxattr : scno = 191
+ const Syslgetxattr : scno = 192
+ const Sysfgetxattr : scno = 193
+ const Syslistxattr : scno = 194
+ const Sysllistxattr : scno = 195
+ const Sysflistxattr : scno = 196
+ const Sysremovexattr : scno = 197
+ const Syslremovexattr : scno = 198
+ const Sysfremovexattr : scno = 199
+ const Systkill : scno = 200
+ const Systime : scno = 201
+ const Sysfutex : scno = 202
+ const Syssched_setaffinity : scno = 203
+ const Syssched_getaffinity : scno = 204
+ const Sysset_thread_area : scno = 205
+ const Sysio_setup : scno = 206
+ const Sysio_destroy : scno = 207
+ const Sysio_getevents : scno = 208
+ const Sysio_submit : scno = 209
+ const Sysio_cancel : scno = 210
+ const Sysget_thread_area : scno = 211
+ const Syslookup_dcookie : scno = 212
+ const Sysepoll_create : scno = 213
+ const Sysepoll_ctl_old : scno = 214
+ const Sysepoll_wait_old : scno = 215
+ const Sysremap_file_pages : scno = 216
+ const Sysgetdents64 : scno = 217
+ const Sysset_tid_address : scno = 218
+ const Sysrestart_syscall : scno = 219
+ const Syssemtimedop : scno = 220
+ const Sysfadvise64 : scno = 221
+ const Systimer_create : scno = 222
+ const Systimer_settime : scno = 223
+ const Systimer_gettime : scno = 224
+ const Systimer_getoverrun : scno = 225
+ const Systimer_delete : scno = 226
+ const Sysclock_settime : scno = 227
+ const Sysclock_gettime : scno = 228
+ const Sysclock_getres : scno = 229
+ const Sysclock_nanosleep : scno = 230
+ const Sysexit_group : scno = 231
+ const Sysepoll_wait : scno = 232
+ const Sysepoll_ctl : scno = 233
+ const Systgkill : scno = 234
+ const Sysutimes : scno = 235
+ const Sysvserver : scno = 236
+ const Sysmbind : scno = 237
+ const Sysset_mempolicy : scno = 238
+ const Sysget_mempolicy : scno = 239
+ const Sysmq_open : scno = 240
+ const Sysmq_unlink : scno = 241
+ const Sysmq_timedsend : scno = 242
+ const Sysmq_timedreceive : scno = 243
+ const Sysmq_notify : scno = 244
+ const Sysmq_getsetattr : scno = 245
+ const Syskexec_load : scno = 246
+ const Syswaitid : scno = 247
+ const Sysadd_key : scno = 248
+ const Sysrequest_key : scno = 249
+ const Syskeyctl : scno = 250
+ const Sysioprio_set : scno = 251
+ const Sysioprio_get : scno = 252
+ const Sysinotify_init : scno = 253
+ const Sysinotify_add_watch : scno = 254
+ const Sysinotify_rm_watch : scno = 255
+ const Sysmigrate_pages : scno = 256
+ const Sysopenat : scno = 257
+ const Sysmkdirat : scno = 258
+ const Sysmknodat : scno = 259
+ const Sysfchownat : scno = 260
+ const Sysfutimesat : scno = 261
+ const Sysnewfstatat : scno = 262
+ const Sysunlinkat : scno = 263
+ const Sysrenameat : scno = 264
+ const Syslinkat : scno = 265
+ const Syssymlinkat : scno = 266
+ const Sysreadlinkat : scno = 267
+ const Sysfchmodat : scno = 268
+ const Sysfaccessat : scno = 269
+ const Syspselect6 : scno = 270
+ const Sysppoll : scno = 271
+ const Sysunshare : scno = 272
+ const Sysset_robust_list : scno = 273
+ const Sysget_robust_list : scno = 274
+ const Syssplice : scno = 275
+ const Systee : scno = 276
+ const Syssync_file_range : scno = 277
+ const Sysvmsplice : scno = 278
+ const Sysmove_pages : scno = 279
+ const Sysutimensat : scno = 280
+ const Sysepoll_pwait : scno = 281
+ const Syssignalfd : scno = 282
+ const Systimerfd_create : scno = 283
+ const Syseventfd : scno = 284
+ const Sysfallocate : scno = 285
+ const Systimerfd_settime : scno = 286
+ const Systimerfd_gettime : scno = 287
+ const Sysaccept4 : scno = 288
+ const Syssignalfd4 : scno = 289
+ const Syseventfd2 : scno = 290
+ const Sysepoll_create1 : scno = 291
+ const Sysdup3 : scno = 292
+ const Syspipe2 : scno = 293
+ const Sysinotify_init1 : scno = 294
+ const Syspreadv : scno = 295
+ const Syspwritev : scno = 296
+ const Sysrt_tgsigqueueinfo : scno = 297
+ const Sysperf_event_open : scno = 298
+ const Sysrecvmmsg : scno = 299
+ const Sysfanotify_init : scno = 300
+ const Sysfanotify_mark : scno = 301
+ const Sysprlimit64 : scno = 302
+ const Sysname_to_handle_at : scno = 303
+ const Sysopen_by_handle_at : scno = 304
+ const Sysclock_adjtime : scno = 305
+ const Syssyncfs : scno = 306
+ const Syssendmmsg : scno = 307
+ const Syssetns : scno = 308
+ const Sysgetcpu : scno = 309
+ const Sysprocess_vm_readv : scno = 310
+ const Sysprocess_vm_writev : scno = 311
+
+ /* getting to the os */
+ extern const syscall : (sc:scno, args:... -> int64)
+
+ /* process management */
+ const exit : (status:int -> void)
+ const getpid : ( -> pid)
+ const kill : (pid:pid, sig:int64 -> int64)
+ const fork : (-> pid)
+ const clone : (flags : uint64, stk : void#, ptid : void#, ctid : void#, ptreg : void# -> pid)
+ const wait4 : (pid:pid, loc:int32#, opt : int64, usage:rusage# -> int64)
+ const waitpid : (pid:pid, loc:int32#, opt : int64 -> int64)
+ const execv : (cmd : byte[:], args : byte[:][:] -> int64)
+ const execve : (cmd : byte[:], args : byte[:][:], env : byte[:][:] -> int64)
+
+
+ /* file manipulation */
+ const open : (path:byte[:], opts:fdopt -> fd)
+ const openmode : (path:byte[:], opts:fdopt, mode:int64 -> fd)
+ const close : (fd:fd -> int64)
+ const creat : (path:byte[:], mode:int64 -> fd)
+ const unlink : (path:byte[:] -> int)
+ const read : (fd:fd, buf:byte[:] -> size)
+ const write : (fd:fd, buf:byte[:] -> size)
+ const lseek : (fd:fd, off:uint64, whence:int64 -> int64)
+ const stat : (path:byte[:], sb:statbuf# -> int64)
+ const lstat : (path:byte[:], sb:statbuf# -> int64)
+ const fstat : (fd:fd, sb:statbuf# -> int64)
+ const mkdir : (path : byte[:], mode : int64 -> int64)
+ generic ioctl : (fd:fd, req : int64, arg:@a# -> int64)
+ const getdents64 : (fd:fd, buf : byte[:] -> int64)
+ const chdir : (p : byte[:] -> int64)
+
+ /* fd stuff */
+ const pipe : (fds : fd[2]# -> int64)
+ const dup : (fd : fd -> fd)
+ const dup2 : (src : fd, dst : fd -> fd)
+
+ /* polling */
+ const epollcreate : (flg : epollflags -> fd) /* actually epoll_create1 */
+ const epollctl : (epfd : fd, op : int, fd : fd, evt : epollevt# -> int)
+ const epollwait : (epfd : fd, evts : epollevt[:], timeout : int -> int)
+ const poll : (pfd : pollfd[:], timeout : int -> int)
+
+ /* networking */
+ const socket : (dom : sockfam, stype : socktype, proto : sockproto -> fd)
+ const connect : (sock : fd, addr : sockaddr#, len : size -> int)
+ const accept : (sock : fd, addr : sockaddr#, len : size# -> fd)
+ const listen : (sock : fd, backlog : int -> int)
+ const bind : (sock : fd, addr : sockaddr#, len : size -> int)
+
+ /* memory mapping */
+ const munmap : (addr:byte#, len:size -> int64)
+ const mmap : (addr:byte#, len:size, prot:mprot, flags:mopt, fd:fd, off:off -> byte#)
+
+ /* time */
+ const clock_getres : (clk : clock, ts : timespec# -> int32)
+ const clock_gettime : (clk : clock, ts : timespec# -> int32)
+ const clock_settime : (clk : clock, ts : timespec# -> int32)
+ const sleep : (time : uint64 -> int32)
+ const nanosleep : (req : timespec#, rem : timespec# -> int32)
+
+ /* system information */
+ const uname : (buf : utsname# -> int)
+
+ /* exported values: initialized by start code */
+ extern const __environment : byte[:][:]
+ extern const __cenvp : byte##
+;;
+
+/*
+wraps a syscall argument, converting it to 64 bits for the syscall function. This is
+the same as casting, but more concise than writing castto(int64)
+*/
+generic a = {x : @t
+ -> x castto(uint64)
+}
+
+/* asm stubs from util.s */
+extern const cstring : (str : byte[:] -> byte#)
+extern const alloca : (sz : size -> byte#)
+
+/* process management */
+const exit = {status; syscall(Sysexit, a(status))}
+const getpid = {; -> syscall(Sysgetpid) castto(pid)}
+const kill = {pid, sig; -> syscall(Syskill, a(pid), a(sig))}
+const fork = {; -> syscall(Sysfork) castto(pid)}
+const clone = {flags, stk, ptid, ctid, ptreg; -> syscall(Sysclone, a(flags), a(stk), a(ptid), a(ctid), a(ptreg)) castto(pid)}
+const wait4 = {pid, loc, opt, usage; -> syscall(Syswait4, a(pid), a(loc), a(opt), a(usage))}
+const waitpid = {pid, loc, opt;
+ var rusage
+ -> wait4(pid, loc, opt, &rusage)
+}
+
+const execv = {cmd, args
+ var p, cargs, i
+
+ /* of course we fucking have to duplicate this code everywhere,
+ * since we want to stack allocate... */
+ p = alloca((args.len + 1)*sizeof(byte#))
+ cargs = (p castto(byte##))[:args.len + 1]
+ for i = 0; i < args.len; i++
+ cargs[i] = cstring(args[i])
+ ;;
+ cargs[args.len] = 0 castto(byte#)
+ -> syscall(Sysexecve, cstring(cmd), a(p), a(__cenvp))
+}
+
+const execve = {cmd, args, env
+ var cargs, cenv, i
+ var p
+
+ /* copy the args */
+ p = alloca((args.len + 1)*sizeof(byte#))
+ cargs = (p castto(byte##))[:args.len + 1]
+ for i = 0; i < args.len; i++
+ cargs[i] = cstring(args[i])
+ ;;
+ cargs[args.len] = 0 castto(byte#)
+
+ /*
+ copy the env.
+ of course we fucking have to duplicate this code everywhere,
+ since we want to stack allocate...
+ */
+ p = alloca((env.len + 1)*sizeof(byte#))
+ cenv = (p castto(byte##))[:env.len]
+ for i = 0; i < env.len; i++
+ cenv[i] = cstring(env[i])
+ ;;
+ cenv[env.len] = 0 castto(byte#)
+
+ -> syscall(Sysexecve, cstring(cmd), a(p), a(cenv))
+}
+
+/* file manipulation */
+const open = {path, opts; -> syscall(Sysopen, cstring(path), a(opts), a(0o777)) castto(fd)}
+const openmode = {path, opts, mode; -> syscall(Sysopen, cstring(path), a(opts), a(mode)) castto(fd)}
+const close = {fd; -> syscall(Sysclose, a(fd))}
+const creat = {path, mode; -> syscall(Syscreat, cstring(path), a(mode)) castto(fd)}
+const unlink = {path; -> syscall(Sysunlink, cstring(path)) castto(int)}
+const read = {fd, buf; -> syscall(Sysread, a(fd), buf castto(byte#), a(buf.len)) castto(size)}
+const write = {fd, buf; -> syscall(Syswrite, a(fd), buf castto(byte#), a(buf.len)) castto(size)}
+const lseek = {fd, off, whence; -> syscall(Syslseek, a(fd), a(off), a(whence))}
+const stat = {path, sb; -> syscall(Sysstat, cstring(path), a(sb))}
+const lstat = {path, sb; -> syscall(Syslstat, cstring(path), a(sb))}
+const fstat = {fd, sb; -> syscall(Sysfstat, a(fd), a(sb))}
+const mkdir = {path, mode; -> syscall(Sysmkdir, cstring(path), a(mode)) castto(int64)}
+generic ioctl = {fd, req, arg; -> syscall(Sysioctl, a(fd), a(req), a(arg)) castto(int64)}
+const getdents64 = {fd, buf; -> syscall(Sysgetdents64, a(fd), buf castto(byte#), a(buf.len))}
+const chdir = {dir; -> syscall(Syschdir, dir)}
+
+/* file stuff */
+const pipe = {fds; -> syscall(Syspipe, a(fds))}
+const dup = {fd; -> syscall(Sysdup, a(fd)) castto(fd)}
+const dup2 = {src, dst; -> syscall(Sysdup2, a(src), a(dst)) castto(fd)}
+
+/* epoll */
+const poll = {pfd, timeout; -> syscall(Syspoll, pfd castto(pollfd#), a(pfd.len), a(timeout)) castto(int)}
+const epollctl = {epfd, op, fd, evt;
+ -> syscall(Sysepoll_ctl, a(epfd), a(op), a(fd), a(evt)) castto(int)}
+const epollwait = {epfd, evts, timeout;
+ -> syscall(Sysepoll_wait, a(epfd), evts castto(epollevt#), a(evts.len), a(timeout)) castto(int)}
+const epollcreate = {flg; -> syscall(Sysepoll_create1, a(flg)) castto(fd)}
+
+/* networking */
+const socket = {dom, stype, proto; -> syscall(Syssocket, a(dom), a(stype), a(proto)) castto(fd)}
+const connect = {sock, addr, len; -> syscall(Sysconnect, a(sock), a(addr), a(len)) castto(int)}
+const bind = {sock, addr, len; -> syscall(Sysbind, a(sock), a(addr), a(len)) castto(int)}
+const listen = {sock, backlog; -> syscall(Syslisten, a(sock), a(backlog)) castto(int)}
+const accept = {sock, addr, lenp; -> syscall(Sysaccept, a(sock), a(addr), a(lenp)) castto(fd)}
+
+/* memory mapping */
+const munmap = {addr, len; -> syscall(Sysmunmap, a(addr), a(len))}
+const mmap = {addr, len, prot, flags, fd, off;
+ -> syscall(Sysmmap, a(addr), a(len), a(prot), a(flags), a(fd), a(off)) castto(byte#)
+}
+
+/* time */
+const clock_getres = {clk, ts; -> syscall(Sysclock_getres, clockid(clk), a(ts)) castto(int32)}
+const clock_gettime = {clk, ts; -> syscall(Sysclock_gettime, clockid(clk), a(ts)) castto(int32)}
+const clock_settime = {clk, ts; -> syscall(Sysclock_settime, clockid(clk), a(ts)) castto(int32)}
+
+const sleep = {time
+ var req, rem
+ req = [.sec = time, .nsec = 0]
+ -> nanosleep(&req, &rem)
+}
+
+const nanosleep = {req, rem; -> syscall(Sysnanosleep, a(req), a(rem)) castto(int32)}
+
+/* system information */
+const uname = {buf; -> syscall(Sysuname, buf) castto(int)}
+
+const clockid = {clk
+ match clk
+ | `Clockrealtime: -> 0
+ | `Clockmonotonic: -> 1
+ | `Clockproccpu: -> 2
+ | `Clockthreadcpu: -> 3
+ | `Clockmonotonicraw: -> 4
+ | `Clockrealtimecoarse: -> 5
+ | `Clockmonotoniccoarse:-> 6
+ | `Clockboottime: -> 7
+ | `Clockrealtimealarm: -> 8
+ | `Clockboottimealarm: -> 9
+ ;;
+ -> -1
+}
+
--- a/libstd/sys+linux.myr
+++ /dev/null
@@ -1,747 +1,0 @@
-use "systypes.use"
-
-pkg sys =
- type pid = int64 /* process id */
- type scno = int64 /* syscall */
- type fdopt = int64 /* fd options */
- type fd = int32 /* fd */
- type mprot = int64 /* memory protection */
- type mopt = int64 /* memory mapping options */
-
- type socktype = int64 /* socket type */
- type sockproto = int64 /* socket protocol */
- type sockfam = uint16 /* socket family */
-
- type whence = uint64
- type filemode = uint32
-
- type epollflags = uint32
- type epollop = uint32
- type epollevttype = uint32
-
- type pollevt = uint16
-
- type clock = union
- `Clockrealtime
- `Clockmonotonic
- `Clockproccpu
- `Clockthreadcpu
- `Clockmonotonicraw
- `Clockrealtimecoarse
- `Clockmonotoniccoarse
- `Clockboottime
- `Clockrealtimealarm
- `Clockboottimealarm
- ;;
-
- type timespec = struct
- sec : uint64
- nsec : uint64
- ;;
-
- type timeval = struct
- sec : uint64
- usec : uint64
- ;;
-
- type rusage = struct
- utime : timeval /* user time */
- stime : timeval /* system time */
- _opaque : uint64[14] /* padding (darwin-specific data) */
- ;;
-
- type statbuf = struct
- dev : uint64
- ino : uint64
- nlink : uint64
- mode : filemode
- uid : uint32
- gid : uint32
- __pad0 : uint32
- rdev : uint64
- size : uint64
- blksz : uint32
- blocks : uint64
- atime : timespec
- mtime : timespec
- ctime : timespec
- __pad1 : uint64[3]
- ;;
-
- type dirent64 = struct
- ino : uint64
- off : uint64
- reclen : uint16
- etype : byte
- name : byte[0]
- ;;
-
- type utsname = struct
- system : byte[65]
- node : byte[65]
- release : byte[65]
- version : byte[65]
- machine : byte[65]
- domain : byte[65]
- ;;
-
- type sockaddr = struct
- fam : sockfam
- data : byte[14]
- ;;
-
- type sockaddr_in = struct
- fam : sockfam
- port : uint16
- addr : byte[4]
- zero : byte[8]
- ;;
-
- type sockaddr_storage = struct
- fam : sockfam
- __align : uint32
- __pad : byte[112]
- ;;
-
- type epollevt = struct
- events : epollevttype
- data : byte[8]
- ;;
-
- type pollfd = struct
- fd : fd
- events : pollevt
- revents : pollevt
- ;;
-
-
- /* open options */
- const Ordonly : fdopt = 0x0
- const Owronly : fdopt = 0x1
- const Ordwr : fdopt = 0x2
- const Ocreat : fdopt = 0x40
- const Oexcl : fdopt = 0x80
- const Otrunc : fdopt = 0x200
- const Oappend : fdopt = 0x400
- const Ondelay : fdopt = 0x800
- const Odirect : fdopt = 0x4000
- const Odir : fdopt = 0x10000
- const Onofollow : fdopt = 0x20000
-
- /* 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
-
- /* mmap protection */
- const Mprotnone : mprot = 0x0
- const Mprotrd : mprot = 0x1
- const Mprotwr : mprot = 0x2
- const Mprotexec : mprot = 0x4
- const Mprotrw : mprot = 0x3 /* convenience */
-
- /* mmap options */
- const Mshared : mopt = 0x1
- const Mpriv : mopt = 0x2
- const Mfixed : mopt = 0x10
- const Mfile : mopt = 0x0
- const Manon : mopt = 0x20
- const M32bit : mopt = 0x40
-
- /* socket families. INCOMPLETE. */
- const Afunspec : sockfam = 0
- const Afunix : sockfam = 1
- const Afinet : sockfam = 2
- const Afinet6 : sockfam = 10
-
- /* socket types. */
- const Sockstream : socktype = 1 /* sequenced, reliable byte stream */
- const Sockdgram : socktype = 2 /* datagrams */
- const Sockraw : socktype = 3 /* raw proto */
- const Sockrdm : socktype = 4 /* reliably delivered messages */
- const Sockseqpacket : socktype = 5 /* sequenced, reliable packets */
- const Sockdccp : socktype = 6 /* data congestion control protocol */
- const Sockpack : socktype = 10 /* linux specific packet */
-
- /* 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
-
- /* epoll flags */
- const Epollcloexec : epollflags = 0o2000000
-
- /* epoll ops */
- const Epollctladd : epollop = 0
- const Epollctlmod : epollop = 1
- const Epollctldel : epollop = 1
-
- /* epoll events */
- const Epollin : epollevttype = 0x001
- const Epollpri : epollevttype = 0x002
- const Epollout : epollevttype = 0x004
- const Epollerr : epollevttype = 0x008
- const Epollhup : epollevttype = 0x010
- const Epollrdnorm : epollevttype = 0x040
- const Epollrdband : epollevttype = 0x080
- const Epollwrnorm : epollevttype = 0x100
- const Epollwrband : epollevttype = 0x200
- const Epollmsg : epollevttype = 0x400
- const Epollrdhup : epollevttype = 0x2000
- const Epollwakeup : epollevttype = 1 << 29
- const Epolloneshot : epollevttype = 1 << 30
- const Epolledge : epollevttype = 1 << 31
-
- /* poll events : posix */
- const Pollin : pollevt = 0x001 /* There is data to read. */
- const Pollpri : pollevt = 0x002 /* There is urgent data to read. */
- const Pollout : pollevt = 0x004 /* Writing now will not block. */
-
- /* poll events: xopen */
- const Pollrdnorm : pollevt = 0x040 /* Normal data may be read. */
- const Pollrdband : pollevt = 0x080 /* Priority data may be read. */
- const Pollwrnorm : pollevt = 0x100 /* Writing now will not block. */
- const Pollwrband : pollevt = 0x200 /* Priority data may be written. */
-
- /* poll events: linux */
- const Pollmsg : pollevt = 0x400
- const Pollremove : pollevt = 0x1000
- const Pollrdhup : pollevt = 0x2000
-
- const Seekset : whence = 0
- const Seekcur : whence = 1
- const Seekend : whence = 2
-
- /* return value for a failed mapping */
- const Mapbad : byte# = -1 castto(byte#)
-
- /* syscalls */
- const Sysread : scno = 0
- const Syswrite : scno = 1
- const Sysopen : scno = 2
- const Sysclose : scno = 3
- const Sysstat : scno = 4
- const Sysfstat : scno = 5
- const Syslstat : scno = 6
- const Syspoll : scno = 7
- const Syslseek : scno = 8
- const Sysmmap : scno = 9
- const Sysmprotect : scno = 10
- const Sysmunmap : scno = 11
- const Sysbrk : scno = 12
- const Sysrt_sigaction : scno = 13
- const Sysrt_sigprocmask : scno = 14
- const Sysrt_sigreturn : scno = 15
- const Sysioctl : scno = 16
- const Syspread64 : scno = 17
- const Syspwrite64 : scno = 18
- const Sysreadv : scno = 19
- const Syswritev : scno = 20
- const Sysaccess : scno = 21
- const Syspipe : scno = 22
- const Sysselect : scno = 23
- const Syssched_yield : scno = 24
- const Sysmremap : scno = 25
- const Sysmsync : scno = 26
- const Sysmincore : scno = 27
- const Sysmadvise : scno = 28
- const Sysshmget : scno = 29
- const Sysshmat : scno = 30
- const Sysshmctl : scno = 31
- const Sysdup : scno = 32
- const Sysdup2 : scno = 33
- const Syspause : scno = 34
- const Sysnanosleep : scno = 35
- const Sysgetitimer : scno = 36
- const Sysalarm : scno = 37
- const Syssetitimer : scno = 38
- const Sysgetpid : scno = 39
- const Syssendfile : scno = 40
- const Syssocket : scno = 41
- const Sysconnect : scno = 42
- const Sysaccept : scno = 43
- const Syssendto : scno = 44
- const Sysrecvfrom : scno = 45
- const Syssendmsg : scno = 46
- const Sysrecvmsg : scno = 47
- const Sysshutdown : scno = 48
- const Sysbind : scno = 49
- const Syslisten : scno = 50
- const Sysgetsockname : scno = 51
- const Sysgetpeername : scno = 52
- const Syssocketpair : scno = 53
- const Syssetsockopt : scno = 54
- const Sysgetsockopt : scno = 55
- const Sysclone : scno = 56
- const Sysfork : scno = 57
- const Sysvfork : scno = 58
- const Sysexecve : scno = 59
- const Sysexit : scno = 60
- const Syswait4 : scno = 61
- const Syskill : scno = 62
- const Sysuname : scno = 63
- const Syssemget : scno = 64
- const Syssemop : scno = 65
- const Syssemctl : scno = 66
- const Sysshmdt : scno = 67
- const Sysmsgget : scno = 68
- const Sysmsgsnd : scno = 69
- const Sysmsgrcv : scno = 70
- const Sysmsgctl : scno = 71
- const Sysfcntl : scno = 72
- const Sysflock : scno = 73
- const Sysfsync : scno = 74
- const Sysfdatasync : scno = 75
- const Systruncate : scno = 76
- const Sysftruncate : scno = 77
- const Sysgetdents : scno = 78
- const Sysgetcwd : scno = 79
- const Syschdir : scno = 80
- const Sysfchdir : scno = 81
- const Sysrename : scno = 82
- const Sysmkdir : scno = 83
- const Sysrmdir : scno = 84
- const Syscreat : scno = 85
- const Syslink : scno = 86
- const Sysunlink : scno = 87
- const Syssymlink : scno = 88
- const Sysreadlink : scno = 89
- const Syschmod : scno = 90
- const Sysfchmod : scno = 91
- const Syschown : scno = 92
- const Sysfchown : scno = 93
- const Syslchown : scno = 94
- const Sysumask : scno = 95
- const Sysgettimeofday : scno = 96
- const Sysgetrlimit : scno = 97
- const Sysgetrusage : scno = 98
- const Syssysinfo : scno = 99
- const Systimes : scno = 100
- const Sysptrace : scno = 101
- const Sysgetuid : scno = 102
- const Syssyslog : scno = 103
- const Sysgetgid : scno = 104
- const Syssetuid : scno = 105
- const Syssetgid : scno = 106
- const Sysgeteuid : scno = 107
- const Sysgetegid : scno = 108
- const Syssetpgid : scno = 109
- const Sysgetppid : scno = 110
- const Sysgetpgrp : scno = 111
- const Syssetsid : scno = 112
- const Syssetreuid : scno = 113
- const Syssetregid : scno = 114
- const Sysgetgroups : scno = 115
- const Syssetgroups : scno = 116
- const Syssetresuid : scno = 117
- const Sysgetresuid : scno = 118
- const Syssetresgid : scno = 119
- const Sysgetresgid : scno = 120
- const Sysgetpgid : scno = 121
- const Syssetfsuid : scno = 122
- const Syssetfsgid : scno = 123
- const Sysgetsid : scno = 124
- const Syscapget : scno = 125
- const Syscapset : scno = 126
- const Sysrt_sigpending : scno = 127
- const Sysrt_sigtimedwait : scno = 128
- const Sysrt_sigqueueinfo : scno = 129
- const Sysrt_sigsuspend : scno = 130
- const Syssigaltstack : scno = 131
- const Sysutime : scno = 132
- const Sysmknod : scno = 133
- const Sysuselib : scno = 134
- const Syspersonality : scno = 135
- const Sysustat : scno = 136
- const Sysstatfs : scno = 137
- const Sysfstatfs : scno = 138
- const Syssysfs : scno = 139
- const Sysgetpriority : scno = 140
- const Syssetpriority : scno = 141
- const Syssched_setparam : scno = 142
- const Syssched_getparam : scno = 143
- const Syssched_setscheduler : scno = 144
- const Syssched_getscheduler : scno = 145
- const Syssched_get_priority_max : scno = 146
- const Syssched_get_priority_min : scno = 147
- const Syssched_rr_get_interval : scno = 148
- const Sysmlock : scno = 149
- const Sysmunlock : scno = 150
- const Sysmlockall : scno = 151
- const Sysmunlockall : scno = 152
- const Sysvhangup : scno = 153
- const Sysmodify_ldt : scno = 154
- const Syspivot_root : scno = 155
- const Sys_sysctl : scno = 156
- const Sysprctl : scno = 157
- const Sysarch_prctl : scno = 158
- const Sysadjtimex : scno = 159
- const Syssetrlimit : scno = 160
- const Syschroot : scno = 161
- const Syssync : scno = 162
- const Sysacct : scno = 163
- const Syssettimeofday : scno = 164
- const Sysmount : scno = 165
- const Sysumount2 : scno = 166
- const Sysswapon : scno = 167
- const Sysswapoff : scno = 168
- const Sysreboot : scno = 169
- const Syssethostname : scno = 170
- const Syssetdomainname : scno = 171
- const Sysiopl : scno = 172
- const Sysioperm : scno = 173
- const Syscreate_module : scno = 174
- const Sysinit_module : scno = 175
- const Sysdelete_module : scno = 176
- const Sysget_kernel_syms : scno = 177
- const Sysquery_module : scno = 178
- const Sysquotactl : scno = 179
- const Sysnfsservctl : scno = 180
- const Sysgetpmsg : scno = 181
- const Sysputpmsg : scno = 182
- const Sysafs_syscall : scno = 183
- const Systuxcall : scno = 184
- const Syssecurity : scno = 185
- const Sysgettid : scno = 186
- const Sysreadahead : scno = 187
- const Syssetxattr : scno = 188
- const Syslsetxattr : scno = 189
- const Sysfsetxattr : scno = 190
- const Sysgetxattr : scno = 191
- const Syslgetxattr : scno = 192
- const Sysfgetxattr : scno = 193
- const Syslistxattr : scno = 194
- const Sysllistxattr : scno = 195
- const Sysflistxattr : scno = 196
- const Sysremovexattr : scno = 197
- const Syslremovexattr : scno = 198
- const Sysfremovexattr : scno = 199
- const Systkill : scno = 200
- const Systime : scno = 201
- const Sysfutex : scno = 202
- const Syssched_setaffinity : scno = 203
- const Syssched_getaffinity : scno = 204
- const Sysset_thread_area : scno = 205
- const Sysio_setup : scno = 206
- const Sysio_destroy : scno = 207
- const Sysio_getevents : scno = 208
- const Sysio_submit : scno = 209
- const Sysio_cancel : scno = 210
- const Sysget_thread_area : scno = 211
- const Syslookup_dcookie : scno = 212
- const Sysepoll_create : scno = 213
- const Sysepoll_ctl_old : scno = 214
- const Sysepoll_wait_old : scno = 215
- const Sysremap_file_pages : scno = 216
- const Sysgetdents64 : scno = 217
- const Sysset_tid_address : scno = 218
- const Sysrestart_syscall : scno = 219
- const Syssemtimedop : scno = 220
- const Sysfadvise64 : scno = 221
- const Systimer_create : scno = 222
- const Systimer_settime : scno = 223
- const Systimer_gettime : scno = 224
- const Systimer_getoverrun : scno = 225
- const Systimer_delete : scno = 226
- const Sysclock_settime : scno = 227
- const Sysclock_gettime : scno = 228
- const Sysclock_getres : scno = 229
- const Sysclock_nanosleep : scno = 230
- const Sysexit_group : scno = 231
- const Sysepoll_wait : scno = 232
- const Sysepoll_ctl : scno = 233
- const Systgkill : scno = 234
- const Sysutimes : scno = 235
- const Sysvserver : scno = 236
- const Sysmbind : scno = 237
- const Sysset_mempolicy : scno = 238
- const Sysget_mempolicy : scno = 239
- const Sysmq_open : scno = 240
- const Sysmq_unlink : scno = 241
- const Sysmq_timedsend : scno = 242
- const Sysmq_timedreceive : scno = 243
- const Sysmq_notify : scno = 244
- const Sysmq_getsetattr : scno = 245
- const Syskexec_load : scno = 246
- const Syswaitid : scno = 247
- const Sysadd_key : scno = 248
- const Sysrequest_key : scno = 249
- const Syskeyctl : scno = 250
- const Sysioprio_set : scno = 251
- const Sysioprio_get : scno = 252
- const Sysinotify_init : scno = 253
- const Sysinotify_add_watch : scno = 254
- const Sysinotify_rm_watch : scno = 255
- const Sysmigrate_pages : scno = 256
- const Sysopenat : scno = 257
- const Sysmkdirat : scno = 258
- const Sysmknodat : scno = 259
- const Sysfchownat : scno = 260
- const Sysfutimesat : scno = 261
- const Sysnewfstatat : scno = 262
- const Sysunlinkat : scno = 263
- const Sysrenameat : scno = 264
- const Syslinkat : scno = 265
- const Syssymlinkat : scno = 266
- const Sysreadlinkat : scno = 267
- const Sysfchmodat : scno = 268
- const Sysfaccessat : scno = 269
- const Syspselect6 : scno = 270
- const Sysppoll : scno = 271
- const Sysunshare : scno = 272
- const Sysset_robust_list : scno = 273
- const Sysget_robust_list : scno = 274
- const Syssplice : scno = 275
- const Systee : scno = 276
- const Syssync_file_range : scno = 277
- const Sysvmsplice : scno = 278
- const Sysmove_pages : scno = 279
- const Sysutimensat : scno = 280
- const Sysepoll_pwait : scno = 281
- const Syssignalfd : scno = 282
- const Systimerfd_create : scno = 283
- const Syseventfd : scno = 284
- const Sysfallocate : scno = 285
- const Systimerfd_settime : scno = 286
- const Systimerfd_gettime : scno = 287
- const Sysaccept4 : scno = 288
- const Syssignalfd4 : scno = 289
- const Syseventfd2 : scno = 290
- const Sysepoll_create1 : scno = 291
- const Sysdup3 : scno = 292
- const Syspipe2 : scno = 293
- const Sysinotify_init1 : scno = 294
- const Syspreadv : scno = 295
- const Syspwritev : scno = 296
- const Sysrt_tgsigqueueinfo : scno = 297
- const Sysperf_event_open : scno = 298
- const Sysrecvmmsg : scno = 299
- const Sysfanotify_init : scno = 300
- const Sysfanotify_mark : scno = 301
- const Sysprlimit64 : scno = 302
- const Sysname_to_handle_at : scno = 303
- const Sysopen_by_handle_at : scno = 304
- const Sysclock_adjtime : scno = 305
- const Syssyncfs : scno = 306
- const Syssendmmsg : scno = 307
- const Syssetns : scno = 308
- const Sysgetcpu : scno = 309
- const Sysprocess_vm_readv : scno = 310
- const Sysprocess_vm_writev : scno = 311
-
- /* getting to the os */
- extern const syscall : (sc:scno, args:... -> int64)
-
- /* process management */
- const exit : (status:int -> void)
- const getpid : ( -> pid)
- const kill : (pid:pid, sig:int64 -> int64)
- const fork : (-> pid)
- const clone : (flags : uint64, stk : void#, ptid : void#, ctid : void#, ptreg : void# -> pid)
- const wait4 : (pid:pid, loc:int32#, opt : int64, usage:rusage# -> int64)
- const waitpid : (pid:pid, loc:int32#, opt : int64 -> int64)
- const execv : (cmd : byte[:], args : byte[:][:] -> int64)
- const execve : (cmd : byte[:], args : byte[:][:], env : byte[:][:] -> int64)
-
-
- /* file manipulation */
- const open : (path:byte[:], opts:fdopt -> fd)
- const openmode : (path:byte[:], opts:fdopt, mode:int64 -> fd)
- const close : (fd:fd -> int64)
- const creat : (path:byte[:], mode:int64 -> fd)
- const unlink : (path:byte[:] -> int)
- const read : (fd:fd, buf:byte[:] -> size)
- const write : (fd:fd, buf:byte[:] -> size)
- const lseek : (fd:fd, off:uint64, whence:int64 -> int64)
- const stat : (path:byte[:], sb:statbuf# -> int64)
- const lstat : (path:byte[:], sb:statbuf# -> int64)
- const fstat : (fd:fd, sb:statbuf# -> int64)
- const mkdir : (path : byte[:], mode : int64 -> int64)
- generic ioctl : (fd:fd, req : int64, arg:@a# -> int64)
- const getdents64 : (fd:fd, buf : byte[:] -> int64)
- const chdir : (p : byte[:] -> int64)
-
- /* fd stuff */
- const pipe : (fds : fd[2]# -> int64)
- const dup : (fd : fd -> fd)
- const dup2 : (src : fd, dst : fd -> fd)
-
- /* polling */
- const epollcreate : (flg : epollflags -> fd) /* actually epoll_create1 */
- const epollctl : (epfd : fd, op : int, fd : fd, evt : epollevt# -> int)
- const epollwait : (epfd : fd, evts : epollevt[:], timeout : int -> int)
- const poll : (pfd : pollfd[:], timeout : int -> int)
-
- /* networking */
- const socket : (dom : sockfam, stype : socktype, proto : sockproto -> fd)
- const connect : (sock : fd, addr : sockaddr#, len : size -> int)
- const accept : (sock : fd, addr : sockaddr#, len : size# -> fd)
- const listen : (sock : fd, backlog : int -> int)
- const bind : (sock : fd, addr : sockaddr#, len : size -> int)
-
- /* memory mapping */
- const munmap : (addr:byte#, len:size -> int64)
- const mmap : (addr:byte#, len:size, prot:mprot, flags:mopt, fd:fd, off:off -> byte#)
-
- /* time */
- const clock_getres : (clk : clock, ts : timespec# -> int32)
- const clock_gettime : (clk : clock, ts : timespec# -> int32)
- const clock_settime : (clk : clock, ts : timespec# -> int32)
- const sleep : (time : uint64 -> int32)
- const nanosleep : (req : timespec#, rem : timespec# -> int32)
-
- /* system information */
- const uname : (buf : utsname# -> int)
-
- /* exported values: initialized by start code */
- extern const __environment : byte[:][:]
- extern const __cenvp : byte##
-;;
-
-/*
-wraps a syscall argument, converting it to 64 bits for the syscall function. This is
-the same as casting, but more concise than writing castto(int64)
-*/
-generic a = {x : @t
- -> x castto(uint64)
-}
-
-/* asm stubs from util.s */
-extern const cstring : (str : byte[:] -> byte#)
-extern const alloca : (sz : size -> byte#)
-
-/* process management */
-const exit = {status; syscall(Sysexit, a(status))}
-const getpid = {; -> syscall(Sysgetpid) castto(pid)}
-const kill = {pid, sig; -> syscall(Syskill, a(pid), a(sig))}
-const fork = {; -> syscall(Sysfork) castto(pid)}
-const clone = {flags, stk, ptid, ctid, ptreg; -> syscall(Sysclone, a(flags), a(stk), a(ptid), a(ctid), a(ptreg)) castto(pid)}
-const wait4 = {pid, loc, opt, usage; -> syscall(Syswait4, a(pid), a(loc), a(opt), a(usage))}
-const waitpid = {pid, loc, opt;
- var rusage
- -> wait4(pid, loc, opt, &rusage)
-}
-
-const execv = {cmd, args
- var p, cargs, i
-
- /* of course we fucking have to duplicate this code everywhere,
- * since we want to stack allocate... */
- p = alloca((args.len + 1)*sizeof(byte#))
- cargs = (p castto(byte##))[:args.len + 1]
- for i = 0; i < args.len; i++
- cargs[i] = cstring(args[i])
- ;;
- cargs[args.len] = 0 castto(byte#)
- -> syscall(Sysexecve, cstring(cmd), a(p), a(__cenvp))
-}
-
-const execve = {cmd, args, env
- var cargs, cenv, i
- var p
-
- /* copy the args */
- p = alloca((args.len + 1)*sizeof(byte#))
- cargs = (p castto(byte##))[:args.len + 1]
- for i = 0; i < args.len; i++
- cargs[i] = cstring(args[i])
- ;;
- cargs[args.len] = 0 castto(byte#)
-
- /*
- copy the env.
- of course we fucking have to duplicate this code everywhere,
- since we want to stack allocate...
- */
- p = alloca((env.len + 1)*sizeof(byte#))
- cenv = (p castto(byte##))[:env.len]
- for i = 0; i < env.len; i++
- cenv[i] = cstring(env[i])
- ;;
- cenv[env.len] = 0 castto(byte#)
-
- -> syscall(Sysexecve, cstring(cmd), a(p), a(cenv))
-}
-
-/* file manipulation */
-const open = {path, opts; -> syscall(Sysopen, cstring(path), a(opts), a(0o777)) castto(fd)}
-const openmode = {path, opts, mode; -> syscall(Sysopen, cstring(path), a(opts), a(mode)) castto(fd)}
-const close = {fd; -> syscall(Sysclose, a(fd))}
-const creat = {path, mode; -> syscall(Syscreat, cstring(path), a(mode)) castto(fd)}
-const unlink = {path; -> syscall(Sysunlink, cstring(path)) castto(int)}
-const read = {fd, buf; -> syscall(Sysread, a(fd), buf castto(byte#), a(buf.len)) castto(size)}
-const write = {fd, buf; -> syscall(Syswrite, a(fd), buf castto(byte#), a(buf.len)) castto(size)}
-const lseek = {fd, off, whence; -> syscall(Syslseek, a(fd), a(off), a(whence))}
-const stat = {path, sb; -> syscall(Sysstat, cstring(path), a(sb))}
-const lstat = {path, sb; -> syscall(Syslstat, cstring(path), a(sb))}
-const fstat = {fd, sb; -> syscall(Sysfstat, a(fd), a(sb))}
-const mkdir = {path, mode; -> syscall(Sysmkdir, cstring(path), a(mode)) castto(int64)}
-generic ioctl = {fd, req, arg; -> syscall(Sysioctl, a(fd), a(req), a(arg)) castto(int64)}
-const getdents64 = {fd, buf; -> syscall(Sysgetdents64, a(fd), buf castto(byte#), a(buf.len))}
-const chdir = {dir; -> syscall(Syschdir, dir)}
-
-/* file stuff */
-const pipe = {fds; -> syscall(Syspipe, a(fds))}
-const dup = {fd; -> syscall(Sysdup, a(fd)) castto(fd)}
-const dup2 = {src, dst; -> syscall(Sysdup2, a(src), a(dst)) castto(fd)}
-
-/* epoll */
-const poll = {pfd, timeout; -> syscall(Syspoll, pfd castto(pollfd#), a(pfd.len), a(timeout)) castto(int)}
-const epollctl = {epfd, op, fd, evt;
- -> syscall(Sysepoll_ctl, a(epfd), a(op), a(fd), a(evt)) castto(int)}
-const epollwait = {epfd, evts, timeout;
- -> syscall(Sysepoll_wait, a(epfd), evts castto(epollevt#), a(evts.len), a(timeout)) castto(int)}
-const epollcreate = {flg; -> syscall(Sysepoll_create1, a(flg)) castto(fd)}
-
-/* networking */
-const socket = {dom, stype, proto; -> syscall(Syssocket, a(dom), a(stype), a(proto)) castto(fd)}
-const connect = {sock, addr, len; -> syscall(Sysconnect, a(sock), a(addr), a(len)) castto(int)}
-const bind = {sock, addr, len; -> syscall(Sysbind, a(sock), a(addr), a(len)) castto(int)}
-const listen = {sock, backlog; -> syscall(Syslisten, a(sock), a(backlog)) castto(int)}
-const accept = {sock, addr, lenp; -> syscall(Sysaccept, a(sock), a(addr), a(lenp)) castto(fd)}
-
-/* memory mapping */
-const munmap = {addr, len; -> syscall(Sysmunmap, a(addr), a(len))}
-const mmap = {addr, len, prot, flags, fd, off;
- -> syscall(Sysmmap, a(addr), a(len), a(prot), a(flags), a(fd), a(off)) castto(byte#)
-}
-
-/* time */
-const clock_getres = {clk, ts; -> syscall(Sysclock_getres, clockid(clk), a(ts)) castto(int32)}
-const clock_gettime = {clk, ts; -> syscall(Sysclock_gettime, clockid(clk), a(ts)) castto(int32)}
-const clock_settime = {clk, ts; -> syscall(Sysclock_settime, clockid(clk), a(ts)) castto(int32)}
-
-const sleep = {time
- var req, rem
- req = [.sec = time, .nsec = 0]
- -> nanosleep(&req, &rem)
-}
-
-const nanosleep = {req, rem; -> syscall(Sysnanosleep, a(req), a(rem)) castto(int32)}
-
-/* system information */
-const uname = {buf; -> syscall(Sysuname, buf) castto(int)}
-
-const clockid = {clk
- match clk
- | `Clockrealtime: -> 0
- | `Clockmonotonic: -> 1
- | `Clockproccpu: -> 2
- | `Clockthreadcpu: -> 3
- | `Clockmonotonicraw: -> 4
- | `Clockrealtimecoarse: -> 5
- | `Clockmonotoniccoarse:-> 6
- | `Clockboottime: -> 7
- | `Clockrealtimealarm: -> 8
- | `Clockboottimealarm: -> 9
- ;;
- -> -1
-}
-