ref: 2d56dad75bc470d3f261d02276fac35c252b2767
parent: 26530a35920cce98ac79b413b61e2529f0cb95ec
author: Ori Bernstein <[email protected]>
date: Mon Oct 6 16:32:07 EDT 2014
Partly fix bldfile. Still missing support for local deps.
--- a/libstd/bldfile
+++ b/libstd/bldfile
@@ -1,7 +1,7 @@
lib sys =
- sys+freebsd.myr
- sys+linux.myr
- sys+osx.myr
+ sys+freebsd-x64.myr
+ sys+linux-x64.myr
+ sys+osx-x64.myr
syscall+freebsd-x64.s
syscall+linux-x64.s
syscall+osx-x64.s
@@ -58,6 +58,7 @@
strjoin.myr
strsplit.myr
strstrip.myr
+ syswrap.myr
swap.myr
try.myr
types.myr
--- a/libstd/sys+osx.myr
+++ /dev/null
@@ -1,858 +1,0 @@
-use "systypes.use"
-
-pkg sys =
- type scno = int64 /* syscall */
- type fdopt = int64 /* fd options */
- type fd = int32 /* fd */
- type pid = int64 /* pid */
- 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 /* file permission bits */
- type kflags = uint16 /* kqueue flags */
-
- type timespec = struct
- sec : uint64
- nsec : uint32
- ;;
-
- type timeval = struct
- sec : uint64
- usec : uint32
- ;;
-
- type timezone = struct
- minwest : int32 /* of greenwich */
- dsttime : int32 /* nonzero if DST applies */
- ;;
-
- type clock = union
- `Clockrealtime
- `Clockmonotonic
- ;;
-
- type statbuf = struct
- dev : int32
- mode : filemode
- nlink : uint16
- ino : uint64
- uid : uint32
- gid : uint32
- rdev : uint32
- atime : timespec
- mtime : timespec
- ctime : timespec
- birthtimespec : timespec
- size : off
- blocks : int64
- blksize : int32
- flags : uint32
- gen : uint32
- _spare : uint32
- _qspare : uint64[2]
- ;;
-
- type rusage = struct
- utime : timeval /* user time */
- stime : timeval /* system time */
- _opaque : uint64[14] /* padding (darwin-specific data) */
- ;;
-
- 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 : uint64
- __pad2 : byte[112]
- ;;
-
- type dirent64 = struct
- ino : uint64
- seekoff : uint64 /* seek offset (optional, used by servers) */
- reclen : uint16 /* length of this record */
- namlen : uint16 /* length of string in d_name */
- typeid : uint8 /* file type, see below */
- name : byte[0]
- ;;
-
- type kevent = struct
- ident : intptr /* identifier for this event */
- filter : int16 /* filter for event */
- flags : uint16 /* general flags */
- fflags : uint32 /* filter-specific flags */
- data : intptr /* filter-specific data */
- udata : byte# /* opaque user data identifier */
- ;;
-
- type kevent64 = struct
- ident : uint64 /* identifier for this event */
- filter : int16 /* filter for event */
- flags : kflags /* general flags */
- fflags : uint32 /* filter-specific flags */
- data : int64 /* filter-specific data */
- udata : uint64 /* opaque user data identifier */
- ext : uint64[2] /* filter-specific extensions */
- ;;
-
- /* kqueue events */
- const Kevadd : kflags = 0x0001 /* add event to kq (implies enable) */
- const Kevdelete : kflags = 0x0002 /* delete event from kq */
- const Kevenable : kflags = 0x0004 /* enable event */
- const Kevdisable : kflags = 0x0008 /* disable event (not reported) */
- const Kevreceipt : kflags = 0x0040 /* force EV_ERROR on success, data == 0 */
-
- /* kqueue flags */
- const Kevoneshot : kflags = 0x0010 /* only report one occurrence */
- const Kevclear : kflags = 0x0020 /* clear event state after reporting */
- const Kevdispatch : kflags = 0x0080 /* disable event after reporting */
-
- const Kevsysflags : kflags = 0xf000 /* reserved by system */
- const Kevflag0 : kflags = 0x1000 /* filter-specific flag */
- const Kevflag1 : kflags = 0x2000 /* filter-specific flag */
-
- /* kqueue returned values */
- const Keveof : kflags = 0x8000 /* eof detected */
- const Keverror : kflags = 0x4000 /* error, data contains errno */
-
- /* open options */
- const Ordonly : fdopt = 0x0
- const Owronly : fdopt = 0x1
- const Ordwr : fdopt = 0x2
- const Ondelay : fdopt = 0x4
- const Oappend : fdopt = 0x8
- const Ocreat : fdopt = 0x200
- const Onofollow : fdopt = 0x100
- const Otrunc : fdopt = 0x400
- const Odir : fdopt = 0x100000
-
- /* 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
- /* Only on Linux
- const M32bit : mopt = 0x40
- */
-
- /* socket families. INCOMPLETE. */
- const Afunspec : sockfam = 0
- const Afunix : sockfam = 1
- const Afinet : sockfam = 2
- const Afinet6 : sockfam = 30
-
- /* 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.
- note, creat() implemented as open(path, Creat|Trunc|Wronly) */
- const Syssyscall : scno = 0x2000000
- const Sysexit : scno = 0x2000001
- const Sysfork : scno = 0x2000002
- const Sysread : scno = 0x2000003
- const Syswrite : scno = 0x2000004
- const Sysopen : scno = 0x2000005
- const Sysclose : scno = 0x2000006
- const Syswait4 : scno = 0x2000007
- const Syslink : scno = 0x2000009
- const Sysunlink : scno = 0x200000a
- const Syschdir : scno = 0x200000c
- const Sysfchdir : scno = 0x200000d
- const Sysmknod : scno = 0x200000e
- const Syschmod : scno = 0x200000f
- const Syschown : scno = 0x2000010
- const Sysgetfsstat : scno = 0x2000012
- const Sysgetpid : scno = 0x2000014
- const Syssetuid : scno = 0x2000017
- const Sysgetuid : scno = 0x2000018
- const Sysgeteuid : scno = 0x2000019
- const Sysptrace : scno = 0x200001a
- const Sysrecvmsg : scno = 0x200001b
- const Syssendmsg : scno = 0x200001c
- const Sysrecvfrom : scno = 0x200001d
- const Sysaccept : scno = 0x200001e
- const Sysgetpeername : scno = 0x200001f
- const Sysgetsockname : scno = 0x2000020
- const Sysaccess : scno = 0x2000021
- const Syschflags : scno = 0x2000022
- const Sysfchflags : scno = 0x2000023
- const Syssync : scno = 0x2000024
- const Syskill : scno = 0x2000025
- const Sysgetppid : scno = 0x2000027
- const Sysdup : scno = 0x2000029
- const Syspipe : scno = 0x200002a
- const Sysgetegid : scno = 0x200002b
- const Sysprofil : scno = 0x200002c
- const Syssigaction : scno = 0x200002e
- const Sysgetgid : scno = 0x200002f
- const Syssigprocmask : scno = 0x2000030
- const Sysgetlogin : scno = 0x2000031
- const Syssetlogin : scno = 0x2000032
- const Sysacct : scno = 0x2000033
- const Syssigpending : scno = 0x2000034
- const Syssigaltstack : scno = 0x2000035
- const Sysioctl : scno = 0x2000036
- const Sysreboot : scno = 0x2000037
- const Sysrevoke : scno = 0x2000038
- const Syssymlink : scno = 0x2000039
- const Sysreadlink : scno = 0x200003a
- const Sysexecve : scno = 0x200003b
- const Sysumask : scno = 0x200003c
- const Syschroot : scno = 0x200003d
- const Sysmsync : scno = 0x2000041
- const Sysvfork : scno = 0x2000042
- const Sysmunmap : scno = 0x2000049
- const Sysmprotect : scno = 0x200004a
- const Sysmadvise : scno = 0x200004b
- const Sysmincore : scno = 0x200004e
- const Sysgetgroups : scno = 0x200004f
- const Syssetgroups : scno = 0x2000050
- const Sysgetpgrp : scno = 0x2000051
- const Syssetpgid : scno = 0x2000052
- const Syssetitimer : scno = 0x2000053
- const Sysswapon : scno = 0x2000055
- const Sysgetitimer : scno = 0x2000056
- const Sysgetdtablesize : scno = 0x2000059
- const Sysdup2 : scno = 0x200005a
- const Sysfcntl : scno = 0x200005c
- const Sysselect : scno = 0x200005d
- const Sysfsync : scno = 0x200005f
- const Syssetpriority : scno = 0x2000060
- const Syssocket : scno = 0x2000061
- const Sysconnect : scno = 0x2000062
- const Sysgetpriority : scno = 0x2000064
- const Sysbind : scno = 0x2000068
- const Syssetsockopt : scno = 0x2000069
- const Syslisten : scno = 0x200006a
- const Syssigsuspend : scno = 0x200006f
- const Sysgettimeofday : scno = 0x2000074
- const Sysgetrusage : scno = 0x2000075
- const Sysgetsockopt : scno = 0x2000076
- const Sysreadv : scno = 0x2000078
- const Syswritev : scno = 0x2000079
- const Syssettimeofday : scno = 0x200007a
- const Sysfchown : scno = 0x200007b
- const Sysfchmod : scno = 0x200007c
- const Syssetreuid : scno = 0x200007e
- const Syssetregid : scno = 0x200007f
- const Sysrename : scno = 0x2000080
- const Sysflock : scno = 0x2000083
- const Sysmkfifo : scno = 0x2000084
- const Syssendto : scno = 0x2000085
- const Sysshutdown : scno = 0x2000086
- const Syssocketpair : scno = 0x2000087
- const Sysmkdir : scno = 0x2000088
- const Sysrmdir : scno = 0x2000089
- const Sysutimes : scno = 0x200008a
- const Sysfutimes : scno = 0x200008b
- const Sysadjtime : scno = 0x200008c
- const Sysgethostuuid : scno = 0x200008e
- const Syssetsid : scno = 0x2000093
- const Sysgetpgid : scno = 0x2000097
- const Syssetprivexec : scno = 0x2000098
- const Syspread : scno = 0x2000099
- const Syspwrite : scno = 0x200009a
- const Sysnfssvc : scno = 0x200009b
- const Sysstatfs : scno = 0x200009d
- const Sysfstatfs : scno = 0x200009e
- const Sysunmount : scno = 0x200009f
- const Sysgetfh : scno = 0x20000a1
- const Sysquotactl : scno = 0x20000a5
- const Sysmount : scno = 0x20000a7
- const Syscsops : scno = 0x20000a9
- const Syswaitid : scno = 0x20000ad
- const Sysadd_profil : scno = 0x20000b0
- const Syskdebug_trace : scno = 0x20000b4
- const Syssetgid : scno = 0x20000b5
- const Syssetegid : scno = 0x20000b6
- const Sysseteuid : scno = 0x20000b7
- const Syssigreturn : scno = 0x20000b8
- const Syschud : scno = 0x20000b9
- const Sysfdatasync : scno = 0x20000bb
- const Sysstat : scno = 0x20000bc
- const Sysfstat : scno = 0x20000bd
- const Syslstat : scno = 0x20000be
- const Syspathconf : scno = 0x20000bf
- const Sysfpathconf : scno = 0x20000c0
- const Sysgetrlimit : scno = 0x20000c2
- const Syssetrlimit : scno = 0x20000c3
- const Sysgetdirentries : scno = 0x20000c4
- const Sysmmap : scno = 0x20000c5
- const Syslseek : scno = 0x20000c7
- const Systruncate : scno = 0x20000c8
- const Sysftruncate : scno = 0x20000c9
- const Sys__sysctl : scno = 0x20000ca
- const Sysmlock : scno = 0x20000cb
- const Sysmunlock : scno = 0x20000cc
- const Sysundelete : scno = 0x20000cd
- const SysATsocket : scno = 0x20000ce
- const SysATgetmsg : scno = 0x20000cf
- const SysATputmsg : scno = 0x20000d0
- const SysATPsndreq : scno = 0x20000d1
- const SysATPsndrsp : scno = 0x20000d2
- const SysATPgetreq : scno = 0x20000d3
- const SysATPgetrsp : scno = 0x20000d4
- const Sysmkcomplex : scno = 0x20000d8
- const Sysstatv : scno = 0x20000d9
- const Syslstatv : scno = 0x20000da
- const Sysfstatv : scno = 0x20000db
- const Sysgetattrlist : scno = 0x20000dc
- const Syssetattrlist : scno = 0x20000dd
- const Sysgetdirentriesattr : scno = 0x20000de
- const Sysexchangedata : scno = 0x20000df
- const Syssearchfs : scno = 0x20000e1
- const Sysdelete : scno = 0x20000e2
- const Syscopyfile : scno = 0x20000e3
- const Sysfgetattrlist : scno = 0x20000e4
- const Sysfsetattrlist : scno = 0x20000e5
- const Syspoll : scno = 0x20000e6
- const Syswatchevent : scno = 0x20000e7
- const Syswaitevent : scno = 0x20000e8
- const Sysmodwatch : scno = 0x20000e9
- const Sysgetxattr : scno = 0x20000ea
- const Sysfgetxattr : scno = 0x20000eb
- const Syssetxattr : scno = 0x20000ec
- const Sysfsetxattr : scno = 0x20000ed
- const Sysremovexattr : scno = 0x20000ee
- const Sysfremovexattr : scno = 0x20000ef
- const Syslistxattr : scno = 0x20000f0
- const Sysflistxattr : scno = 0x20000f1
- const Sysfsctl : scno = 0x20000f2
- const Sysinitgroups : scno = 0x20000f3
- const Sysposix_spawn : scno = 0x20000f4
- const Sysffsctl : scno = 0x20000f5
- const Sysnfsclnt : scno = 0x20000f7
- const Sysfhopen : scno = 0x20000f8
- const Sysminherit : scno = 0x20000fa
- const Syssemsys : scno = 0x20000fb
- const Sysmsgsys : scno = 0x20000fc
- const Sysshmsys : scno = 0x20000fd
- const Syssemctl : scno = 0x20000fe
- const Syssemget : scno = 0x20000ff
- const Syssemop : scno = 0x2000100
- const Sysmsgctl : scno = 0x2000102
- const Sysmsgget : scno = 0x2000103
- const Sysmsgsnd : scno = 0x2000104
- const Sysmsgrcv : scno = 0x2000105
- const Sysshmat : scno = 0x2000106
- const Sysshmctl : scno = 0x2000107
- const Sysshmdt : scno = 0x2000108
- const Sysshmget : scno = 0x2000109
- const Sysshm_open : scno = 0x200010a
- const Sysshm_unlink : scno = 0x200010b
- const Syssem_open : scno = 0x200010c
- const Syssem_close : scno = 0x200010d
- const Syssem_unlink : scno = 0x200010e
- const Syssem_wait : scno = 0x200010f
- const Syssem_trywait : scno = 0x2000110
- const Syssem_post : scno = 0x2000111
- const Syssem_getvalue : scno = 0x2000112
- const Syssem_init : scno = 0x2000113
- const Syssem_destroy : scno = 0x2000114
- const Sysopen_extended : scno = 0x2000115
- const Sysumask_extended : scno = 0x2000116
- const Sysstat_extended : scno = 0x2000117
- const Syslstat_extended : scno = 0x2000118
- const Sysfstat_extended : scno = 0x2000119
- const Syschmod_extended : scno = 0x200011a
- const Sysfchmod_extended : scno = 0x200011b
- const Sysaccess_extended : scno = 0x200011c
- const Syssettid : scno = 0x200011d
- const Sysgettid : scno = 0x200011e
- const Syssetsgroups : scno = 0x200011f
- const Sysgetsgroups : scno = 0x2000120
- const Syssetwgroups : scno = 0x2000121
- const Sysgetwgroups : scno = 0x2000122
- const Sysmkfifo_extended : scno = 0x2000123
- const Sysmkdir_extended : scno = 0x2000124
- const Sysidentitysvc : scno = 0x2000125
- const Sysshared_region_check_np : scno = 0x2000126
- const Sysshared_region_map_np : scno = 0x2000127
- const Sysvm_pressure_monitor : scno = 0x2000128
- const Syspsynch_rw_longrdlock : scno = 0x2000129
- const Syspsynch_rw_yieldwrlock : scno = 0x200012a
- const Syspsynch_rw_downgrade : scno = 0x200012b
- const Syspsynch_rw_upgrade : scno = 0x200012c
- const Syspsynch_mutexwait : scno = 0x200012d
- const Syspsynch_mutexdrop : scno = 0x200012e
- const Syspsynch_cvbroad : scno = 0x200012f
- const Syspsynch_cvsignal : scno = 0x2000130
- const Syspsynch_cvwait : scno = 0x2000131
- const Syspsynch_rw_rdlock : scno = 0x2000132
- const Syspsynch_rw_wrlock : scno = 0x2000133
- const Syspsynch_rw_unlock : scno = 0x2000134
- const Syspsynch_rw_unlock2 : scno = 0x2000135
- const Sysgetsid : scno = 0x2000136
- const Syssettid_with_pid : scno = 0x2000137
- const Sysaio_fsync : scno = 0x2000139
- const Sysaio_return : scno = 0x200013a
- const Sysaio_suspend : scno = 0x200013b
- const Sysaio_cancel : scno = 0x200013c
- const Sysaio_error : scno = 0x200013d
- const Sysaio_read : scno = 0x200013e
- const Sysaio_write : scno = 0x200013f
- const Syslio_listio : scno = 0x2000140
- const Sysiopolicysys : scno = 0x2000142
- const Sysmlockall : scno = 0x2000144
- const Sysmunlockall : scno = 0x2000145
- const Sysissetugid : scno = 0x2000147
- const Sys__pthread_kill : scno = 0x2000148
- const Sys__pthread_sigmask : scno = 0x2000149
- const Sys__sigwait : scno = 0x200014a
- const Sys__disable_threadsignal : scno = 0x200014b
- const Sys__pthread_markcancel : scno = 0x200014c
- const Sys__pthread_canceled : scno = 0x200014d
- const Sys__semwait_signal : scno = 0x200014e
- const Sysproc_info : scno = 0x2000150
- const Syssendfile : scno = 0x2000151
- const Sysstat64 : scno = 0x2000152
- const Sysfstat64 : scno = 0x2000153
- const Syslstat64 : scno = 0x2000154
- const Sysstat64_extended : scno = 0x2000155
- const Syslstat64_extended : scno = 0x2000156
- const Sysfstat64_extended : scno = 0x2000157
- const Sysgetdirentries64 : scno = 0x2000158
- const Sysstatfs64 : scno = 0x2000159
- const Sysfstatfs64 : scno = 0x200015a
- const Sysgetfsstat64 : scno = 0x200015b
- const Sys__pthread_chdir : scno = 0x200015c
- const Sys__pthread_fchdir : scno = 0x200015d
- const Sysaudit : scno = 0x200015e
- const Sysauditon : scno = 0x200015f
- const Sysgetauid : scno = 0x2000161
- const Syssetauid : scno = 0x2000162
- const Sysgetaudit : scno = 0x2000163
- const Syssetaudit : scno = 0x2000164
- const Sysgetaudit_addr : scno = 0x2000165
- const Syssetaudit_addr : scno = 0x2000166
- const Sysauditctl : scno = 0x2000167
- const Sysbsdthread_create : scno = 0x2000168
- const Sysbsdthread_terminate : scno = 0x2000169
- const Syskqueue : scno = 0x200016a
- const Syskevent : scno = 0x200016b
- const Syslchown : scno = 0x200016c
- const Sysstack_snapshot : scno = 0x200016d
- const Sysbsdthread_register : scno = 0x200016e
- const Sysworkq_open : scno = 0x200016f
- const Sysworkq_kernreturn : scno = 0x2000170
- const Syskevent64 : scno = 0x2000171
- const Sys__old_semwait_signal : scno = 0x2000172
- const Sys__old_semwait_signal_nocancel : scno = 0x2000173
- const Systhread_selfid : scno = 0x2000174
- const Sys__mac_execve : scno = 0x200017c
- const Sys__mac_syscall : scno = 0x200017d
- const Sys__mac_get_file : scno = 0x200017e
- const Sys__mac_set_file : scno = 0x200017f
- const Sys__mac_get_link : scno = 0x2000180
- const Sys__mac_set_link : scno = 0x2000181
- const Sys__mac_get_proc : scno = 0x2000182
- const Sys__mac_set_proc : scno = 0x2000183
- const Sys__mac_get_fd : scno = 0x2000184
- const Sys__mac_set_fd : scno = 0x2000185
- const Sys__mac_get_pid : scno = 0x2000186
- const Sys__mac_get_lcid : scno = 0x2000187
- const Sys__mac_get_lctx : scno = 0x2000188
- const Sys__mac_set_lctx : scno = 0x2000189
- const Syssetlcid : scno = 0x200018a
- const Sysgetlcid : scno = 0x200018b
- const Sysread_nocancel : scno = 0x200018c
- const Syswrite_nocancel : scno = 0x200018d
- const Sysopen_nocancel : scno = 0x200018e
- const Sysclose_nocancel : scno = 0x200018f
- const Syswait4_nocancel : scno = 0x2000190
- const Sysrecvmsg_nocancel : scno = 0x2000191
- const Syssendmsg_nocancel : scno = 0x2000192
- const Sysrecvfrom_nocancel : scno = 0x2000193
- const Sysaccept_nocancel : scno = 0x2000194
- const Sysmsync_nocancel : scno = 0x2000195
- const Sysfcntl_nocancel : scno = 0x2000196
- const Sysselect_nocancel : scno = 0x2000197
- const Sysfsync_nocancel : scno = 0x2000198
- const Sysconnect_nocancel : scno = 0x2000199
- const Syssigsuspend_nocancel : scno = 0x200019a
- const Sysreadv_nocancel : scno = 0x200019b
- const Syswritev_nocancel : scno = 0x200019c
- const Syssendto_nocancel : scno = 0x200019d
- const Syspread_nocancel : scno = 0x200019e
- const Syspwrite_nocancel : scno = 0x200019f
- const Syswaitid_nocancel : scno = 0x20001a0
- const Syspoll_nocancel : scno = 0x20001a1
- const Sysmsgsnd_nocancel : scno = 0x20001a2
- const Sysmsgrcv_nocancel : scno = 0x20001a3
- const Syssem_wait_nocancel : scno = 0x20001a4
- const Sysaio_suspend_nocancel : scno = 0x20001a5
- const Sys__sigwait_nocancel : scno = 0x20001a6
- const Sys__semwait_signal_nocancel : scno = 0x20001a7
- const Sys__mac_mount : scno = 0x20001a8
- const Sys__mac_get_mount : scno = 0x20001a9
- const Sys__mac_getfsstat : scno = 0x20001aa
- const Sysfsgetpath : scno = 0x20001ab
- const Sysaudit_session_self : scno = 0x20001ac
- const Sysaudit_session_join : scno = 0x20001ad
- const Syspid_suspend : scno = 0x20001ae
- const Syspid_resume : scno = 0x20001af
- const Sysfileport_makeport : scno = 0x20001b0
- const Sysfileport_makefd : scno = 0x20001b1
-
- extern const syscall : (sc:scno, args:... -> int64)
-
- /* process control */
- const exit : (status:int -> void)
- const getpid : ( -> pid)
- const kill : (pid : pid, sig:int64 -> int64)
- const fork : (-> pid)
- const wait4 : (pid : pid, loc:int32#, opt : int64, rusage: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 getdirentries64 : (fd : fd, buf : byte[:], basep : int64# -> int64)
- const chdir : (p : byte[:] -> int64)
-
- /* fd stuff */
- const pipe : (fd : fd[:] -> int64)
- const dup : (fd : fd -> fd)
- const dup2 : (src : fd, dst : fd -> fd)
-
- /* kqueue */
- const kqueue : (-> fd)
- const kevent : (q : fd, cl : kevent[:], el : kevent[:], flg : kflags, timeout : timespec# -> int64)
- const kevent64 : (q : fd, cl : kevent64[:], el : kevent64[:], flg : kflags, timeout : timespec# -> 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 */
- const gettimeofday : (tv : timeval#, tz : timezone# -> int)
- const settimeofday : (tv : timeval#, tz : timezone# -> int)
- /* faked with gettimeofday */
- const clock_getres : (clk : clock, ts : timespec# -> int)
- const clock_gettime : (clk : clock, ts : timespec# -> int)
- const clock_settime : (clk : clock, ts : timespec# -> int)
-
- /* 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
- -> x castto(uint64)
-}
-
-/* OSX has a number of funky syscalls */
-extern const __osx_fork : (-> pid)
-extern const __osx_pipe : (fd : fd# -> int64)
-extern const __osx_getpid : (-> pid)
-extern const __osx_lseek : (fd:fd, off:uint64, whence:int64 -> int64)
-extern const __osx_gettimeofday : (tv : timeval#, tz : timezone# -> int)
-/*
-extern const __osx_ptrace
-extern const __osx_signalstack
-extern const __osx_sigreturn
-extern const __osx_thread_selfid
-extern const __osx_vfork
-*/
-
-extern const cstring : (str : byte[:] -> byte#)
-extern const alloca : (sz : size -> byte#)
-extern const __cenvp : byte##
-
-/* process control */
-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 = {; -> __osx_fork()}
-const wait4 = {pid, loc, opt, rusage; -> syscall(Syswait4, a(pid), a(loc), a(opt), a(rusage))}
-const waitpid = {pid, loc, opt;
- -> wait4(pid, loc, opt, 0 castto(rusage#))
-}
-
-const execv = {cmd, args
- var p, cargs, i
-
- /* doesn't just call execve() for efficiency's sake. */
- 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))
-}
-
-
-/* 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 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(Sysstat64, cstring(path), a(sb))}
-const lstat = {path, sb; -> syscall(Syslstat64, cstring(path), a(sb))}
-const fstat = {fd, sb; -> syscall(Sysfstat64, 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(Sysgetdirentries64, a(fd), buf castto(byte#), a(buf.len), a(basep))}
-const chdir = {dir; -> syscall(Syschdir, dir)}
-
-/* fd stuff */
-const pipe = {fd; -> __osx_pipe(fd castto(fd#))}
-const dup = {fd; -> syscall(Sysdup, a(fd)) castto(fd)}
-const dup2 = {src, dst; -> syscall(Sysdup2, a(src), a(dst)) castto(fd)}
-
-/* kqueueueueueueue */
-const kqueue = {; -> syscall(Syskqueue) castto(fd)}
-const kevent = {q, cl, el, flg, timeout
- -> syscall(Syskevent, a(q), \
- cl castto(kevent#), a(cl.len), \
- el castto(kevent#), a(el.len), \
- a(flg), \
- timeout)
-}
-
-const kevent64 = {q, cl, el, flg, timeout
- -> syscall(Syskevent, a(q), \
- cl castto(kevent#), a(cl.len), \
- el castto(kevent#), a(el.len), \
- a(flg), \
- timeout)
-}
-
-/* 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 gettimeofday = {tv, tz; -> __osx_gettimeofday(tv, tz) castto(int)}
-const settimeofday = {tv, tz; -> syscall(Syssettimeofday, a(tv), a(tz)) castto(int)}
-
-/* faked with gettimeofday */
-const clock_getres = {clk, ts
- ts.sec = 0
- ts.nsec = 1000*10 /* 10ms is reasonable resolution */
- -> 0
-}
-
-const clock_gettime = {clk, ts
- var tv
- var ret
-
- ret = gettimeofday(&tv, 0 castto(timezone#))
- ts.sec = tv.sec
- ts.nsec = tv.usec * 1000
- -> ret
-}
-
-const clock_settime = {clk, ts
- var tv
-
- tv.sec = ts.sec
- tv.usec = ts.nsec / 1000
- -> settimeofday(&tv, 0 castto(timezone#))
-}
-
-/* system information */
-const uname = {buf;
- var mib : int[2]
- var ret
- var sys
- var nod
- var rel
- var ver
- var mach
-
- ret = 0
- mib[0] = 1 /* CTL_KERN */
- mib[1] = 1 /* KERN_OSTYPE */
- sys = buf.system[:]
- ret = sysctl(mib[:], &sys, [][:])
- if ret < 0
- -> ret
- ;;
-
- mib[0] = 1 /* CTL_KERN */
- mib[1] = 10 /* KERN_HOSTNAME */
- nod = buf.node[:]
- ret = sysctl(mib[:], &nod, [][:])
- if ret < 0
- -> ret
- ;;
-
- mib[0] = 1 /* CTL_KERN */
- mib[1] = 2 /* KERN_OSRELEASE */
- rel = buf.release[:]
- ret = sysctl(mib[:], &rel, [][:])
- if ret < 0
- -> ret
- ;;
-
- mib[0] = 1 /* CTL_KERN */
- mib[1] = 4 /* KERN_VERSION */
- ver = buf.version[:]
- ret = sysctl(mib[:], &ver, [][:])
- if ret < 0
- -> ret
- ;;
-
- mib[0] = 6 /* CTL_HW */
- mib[1] = 1 /* HW_MACHINE */
- mach = buf.machine[:]
- ret = sysctl(mib[:], &mach, [][:])
- if ret < 0
- -> ret
- ;;
-
- -> 0
-}
-
-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 = mib.len castto(uint64)
- o = old#
- oldp = o castto(byte#)
- oldsz = (o.len castto(uint64))
- if new.len > 0
- newp = new castto(byte#)
- newsz = new.len castto(uint64)
- else
- newp = 0 castto(byte#)
- newsz = 0
- ;;
-
- ret = syscall(Sys__sysctl, a(mibp), a(mibsz), a(oldp), a(&oldsz), a(newp), a(newsz)) castto(int)
-
- old# = o[:oldsz]
- -> ret
-}