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