shithub: mc

Download patch

ref: 241b498591ec1c86165c4e749f5e74ce7a03dd2a
parent: 2c911dc66fe609309ca666da961ca3e78c0379d0
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Aug 5 21:44:39 EDT 2017

Add system call generation scripts.

	Should start to make life easier. Maybe.

--- /dev/null
+++ b/support/syscall-gen/c2myr.py
@@ -1,0 +1,369 @@
+import sys
+import re
+import os
+import traceback
+import pycparser
+import StringIO
+from pycparser import c_parser, c_ast
+from pycparser.plyparser import Coord
+#from pycparser import c_parser, c_ast, parse_file
+
+#from pycparser.plyparser import Coord
+
+ctypes = {}
+myrtypes = {
+    'void':                     'void',
+    'char':                     'byte',
+    'short':                    'int16',
+    'int':                      'int',
+    'long':                     'int64',
+    'long long':                'int64',
+
+    'unsigned char':            'byte',
+    'unsigned short':           'uint16',
+    'unsigned int':             'uint',
+    'unsigned long':            'uint64',
+    'unsigned long long':       'uint64',
+
+    'unsigned short int':       'uint16',
+    'unsigned long int':        'uint64',
+    'unsigned long long int':   'uint64',
+
+    'short int':                'int16',
+    'long int':                 'int64',
+    'long long int':            'int64',
+
+    'int8_t':                   'byte',
+    'int16_t':                  'int16',
+    'int32_t':                  'int32',
+    'int64_t':                  'int64',
+
+    'uint8_t':                  'byte',
+    'uint16_t':                 'uint16',
+    'uint32_t':                 'uint32',
+    'uint64_t':                 'uint64',
+
+    'size_t':                   'size',
+    'ssize_t':                  'size', # myrddin sizes are signed
+
+    # kernel-defined types?
+    'u_char':                   'byte',
+    'u_short':                  'uint16',
+    'u_int':                    'uint',
+    'u_long':                   'uint64',
+
+    'u_int8':                   'uint8',
+    'u_int16':                  'uint16',
+    'u_int32':                  'uint32',
+    'u_int64':                  'uint64',
+
+    'int8':                     'int8',
+    'int16':                    'int16',
+    'int32':                    'int32',
+    'int64':                    'int64',
+
+    '__int64_t':                'int64',
+
+    'char':                     'byte',
+    'short':                    'int16',
+    'int':                      'int',
+    'long':                     'int64',
+
+    'caddr_t':                  'void#',
+}
+
+have = set()
+
+#valid for all unixes we support...
+sizes = {
+        'char':                     1,
+        'short':                    2,
+        'int':                      4,
+        'long':                     8,
+        'long int':                 8,
+        'long long':                8,
+        'long long int':            8,
+        'unsigned char':            1,
+        'unsigned short':           2,
+        'unsigned short int':       2,
+        'unsigned int':             4,
+        'unsigned long':            8,
+        'unsigned long int':        8,
+        'unsigned long long':       8,
+        'unsigned long long int':   8,
+        'void*':                    1,
+}
+
+def fullydefined(t):
+    return type(t) == c_ast.Struct and t.decls
+
+def collectdef(n, t):
+    if t in [c_ast.Decl, c_ast.TypeDecl] and type(n.type) == c_ast.Struct:
+        if fullydefined(n.type):
+            ctypes[n.type.name] = n.type
+    elif t == c_ast.Typedef:
+        # typedef struct foo foo is valid.
+        if n.name not in ctypes:
+            ctypes[n.name] = n
+        # as is 'typedef struct foo { ... } bar'
+        if type(n.type) is c_ast.TypeDecl:
+            if type(n.type.type) is c_ast.Struct:
+                collectdef(n.type, type(n.type))
+
+def collect(ast):
+    for n in ast.ext:
+        collectdef(n, type(n))
+
+def typename(t):
+    if type(t) == c_ast.Struct:
+        return t.name
+    elif type(t) == c_ast.IdentifierType:
+        return ' '.join(t.names)
+    elif type(t) == c_ast.Typedef:
+        return t.name
+    elif type(t) == c_ast.Struct:
+        return t.name
+    elif type(t) == c_ast.TypeDecl:
+        return typename(t.type)
+    elif type(t) == c_ast.TypeDecl:
+        return typename(t.type)
+    else:
+        t.show()
+        raise ValueError('unknown type')
+
+def deprefix(decls):
+    pfx = None
+    for d in decls:
+        name = d.name
+        if not name:
+            return
+        if name.startswith('__'):
+            name = name[2:]
+        sp = name.split('_', 1)
+        if len(sp) != 2:
+            return
+        if pfx and sp[0] != pfx:
+            return
+        pfx = sp[0]
+
+    for d in decls:
+        if d.name.startswith('__'):
+            d.name = d.name[2:]
+        (hd, tl) = d.name.split('_', 1)
+        d.name = tl
+
+def myrname(n):
+    namemap = {
+        'acl_type_t':           'acltype',
+	'acl_tag_t':	        'acltag',
+	'acl_perm_t':	        'aclperm',
+	'acl_entry_type_t':     'aclenttype',
+	'mode_t':               'filemode',
+	'ssize_t':              'size',
+	'__socklen_t':          'int32',
+	'socklen_t':            'int32',
+	'fd_set':               'fdset',
+	'__ucontext':           'ucontext',
+	'cap_rights_t':         'caprights',
+	'stack_t':              'sigstack',
+        'thr_param':            'thrparam',
+        'stat':                 'statbuf',
+        'nstat':                'statbuf',
+        'newstat':              'statbuf',
+    }
+    if n in namemap:
+        return namemap[n]
+    if n.endswith('_t'):
+        n = n[:-2]
+    if n.startswith('__'):
+        n = n[2:]
+    return n
+
+def tysize(t):
+    if type(t) == c_ast.Typename:
+        return tysize(t.type)
+    if type(t) == c_ast.TypeDecl:
+        return tysize(t.type)
+    if type(t) == c_ast.Typedef:
+        return tysize(t.type)
+    if type(t) == c_ast.Typedef:
+        return tysize(t.type)
+    if type(t) == c_ast.PtrDecl:
+        return sizes['void*']
+    if type(t) == c_ast.ArrayDecl:
+        return tysize(t.type) * fold(t.dim)
+    elif type(t) == c_ast.IdentifierType:
+        name = ' '.join(t.names)
+        if name in ctypes:
+            return tysize(ctypes[name])
+        else:
+            return sizes[name]
+    else:
+        raise ValueError('unsupported type' + str(t))
+
+def fold(expr):
+    try:
+        if type(expr) is c_ast.BinaryOp:
+            if expr.op == '+':  return fold(expr.left) + fold(expr.right)
+            if expr.op == '-':  return fold(expr.left) - fold(expr.right)
+            if expr.op == '*':  return fold(expr.left) * fold(expr.right)
+            if expr.op == '/':  return fold(expr.left) / fold(expr.right)
+            if expr.op == '%':  return fold(expr.left) % fold(expr.right)
+            if expr.op == '&':  return fold(expr.left) & fold(expr.right)
+            if expr.op == '|':  return fold(expr.left) | fold(expr.right)
+            if expr.op == '^':  return fold(expr.left) >> fold(expr.right)
+            if expr.op == '<<': return fold(expr.left) << fold(expr.right)
+            if expr.op == '>>': return fold(expr.left) >> fold(expr.right)
+        elif type(expr) is c_ast.UnaryOp:
+            if expr.op == '+':  return fold(expr.expr)
+            if expr.op == '-':  return -fold(expr.expr)
+            if expr.op == 'sizeof':
+                return tysize(expr.expr)
+        elif type(expr) is c_ast.Cast:
+            return fold(expr.expr)
+        else:
+            return int(expr.value)
+    except Exception:
+        raise
+
+def emitstruct(t, defname):
+    fields = []
+    if t.name:
+        name = myrname(t.name)
+    else:
+        name = defname
+    deprefix(t.decls)
+    for d in t.decls:
+        if not d.name:
+            raise ValueError('null name in type')
+        etype = emit(d.type)
+        fname = d.name
+        if fname == 'type':
+            fname = 'kind'
+        fields.append('{}\t: {}'.format(fname, etype))
+    structs.write('type {} = struct\n\t{}\n\n;;\n\n'.format(name, '\n\t'.join(fields)))
+    return name
+
+def emit(t, defname=None):
+    if type(t) == c_ast.Struct:
+        if t.name:
+            if myrname(t.name) in have:
+                return t.name
+            # linked lists can be a problem...
+            have.add(myrname(t.name))
+        if not t.decls:
+            t = ctypes[t.name]
+        return emitstruct(t, defname)
+    elif type(t) == c_ast.IdentifierType:
+        name = ' '.join(t.names)
+        if name in myrtypes:
+            return myrtypes[' '.join(t.names)]
+        return myrtype(name, defname)
+    elif type(t) == c_ast.Typedef:
+        if t.name in myrtypes:
+            return myrtypes[t.name]
+        name = myrname(t.name)
+        if name in have:
+            return name
+        # fold chains of typedefs
+        sub = emit(t.type, name)
+        if defname:
+            return myrname(sub)
+        else:
+            if name != sub and name not in have:
+                have.add(name)
+                defs.write('type {} = {}\n'.format(name, sub))
+            return name
+    elif type(t) == c_ast.TypeDecl:
+        return emit(t.type, defname)
+    elif type(t) == c_ast.ArrayDecl:
+        ret = emit(t.type)
+        return '{}[{}]'.format(ret, fold(t.dim))
+    elif type(t) == c_ast.PtrDecl:
+        # Myrddin functions aren't easy to translate to C.
+        if type(t.type) == c_ast.FuncDecl:
+            return 'void#'
+        return emit(t.type) + '#'
+    elif type(t) == c_ast.Union:
+        raise ValueError('unions unsupported')
+    else:
+        t.show()
+        raise ValueError('unknown type')
+
+
+def myrtype(name, defname=None):
+    if name is None:
+        return None
+    if myrname(name) in myrtypes:
+        return myrtypes[myrname(name)]
+
+    t = ctypes[name]
+    gen = emit(t, defname)
+    have.add(myrname(gen))
+    return gen
+
+if __name__ == '__main__':
+    structs = StringIO.StringIO()
+    defs = StringIO.StringIO()
+
+    prehdr = '''
+#define __builtin_va_list int
+#define __inline
+#define __restrict
+#define __attribute__(_)
+#define __asm(x)
+#define __extension__
+#define __signed__
+#define __extern_inline__
+#define volatile(_) /* catches '__asm volatile(asm)' on openbsd */
+
+#include <sys/types.h>
+#include <sys/cdefs.h>
+#ifdef __linux__
+#include <sys/sysinfo.h>
+#include <utime.h>
+#include <ucontext.h>
+#include <linux/futex.h>
+#endif
+    '''
+    includes = []
+    # A bunch of these headers are system-only. We wouldn't
+    # care, but they also try to prevent people from depending
+    # on them accidentally. As a result, let's just try including
+    # each one ahead of time, and see if it works.
+    #
+    # if so, we generate a mega-header with all the types.
+
+    for hdr in os.listdir('/usr/include/sys'):
+        print 'trying {}'.format(hdr)
+        try:
+            include = prehdr + '\n#include <sys/{}>'.format(hdr)
+            with open('/tmp/myr-includes.h', 'w') as f:
+                f.write(include)
+            pycparser.parse_file('/tmp/myr-includes.h', use_cpp=True)
+            includes.append('#include <sys/{}>'.format(hdr))
+        except Exception:
+            print '...skip'
+
+    print('importing' + ' '.join(includes))
+    with open('/tmp/myr-includes.h', 'w') as f:
+        f.write(prehdr + '\n' + '\n'.join(includes))
+    with open('want.txt') as f:
+        want = f.read().split()
+    with open('have.txt') as f:
+        have |= set(f.read().split())
+        for sz in ['', 8, 16, 32, 64]:
+            have.add('int{}'.format(sz))
+            have.add('uint{}'.format(sz))
+    ast = pycparser.parse_file('/tmp/myr-includes.h', use_cpp=True)
+    collect(ast)
+    for w in want:
+        try:
+            myrtype(w)
+        except (ValueError,KeyError) as e:
+            print('unconvertable type {}: add a manual override: {}'.format(w, e))
+    f = 'gentypes+{}-{}.frag'.format(sys.argv[1], sys.argv[2])
+    with open(f, 'w') as f:
+        f.write(defs.getvalue())
+        f.write('\n')
+        f.write(structs.getvalue())
--- /dev/null
+++ b/support/syscall-gen/gencalls.awk
@@ -1,0 +1,328 @@
+BEGIN {
+	sys = ARGV[1]
+	split(sys, sp, ":")
+	systype = sp[1]
+	sysvers = sp[2]
+	arch = ARGV[2]
+
+	print "/*";
+	print "  generated-ish source";
+	print "  stitched for "sys" arch:"arch;
+	print "  edit with caution.";
+	print " */";
+	ARGC=1
+	if (systype =="freebsd" || systype == "linux") {
+		Typefield = 3;
+		Protofield = 4;
+		renamings["sys_exit"] = "exit"
+		if (systype == "linux") {
+			strippfx="^(linux_|linux_new)"
+			renamings["mmap2"] = "mmap";
+			renamings["sys_futex"] = "futex";
+		}
+	} else if (systype == "openbsd") {
+		Typefield = 2;
+		Protofield = 3;
+		strippfx="^sys_"
+	} else if (systype == "netbsd") {
+		Typefield = 2;
+		Protofield = 4;
+	} else {
+		print "unknown system " ARGV[1];
+		exit 1;
+	}
+	# stop processing args as files.
+
+	loadtypes()
+	loadspecials()
+}
+
+NF == 0 || $1 ~ /^;/ || $1 ~ "^#" {
+	next
+}
+
+END {
+	printf("pkg sys =\n")
+	for(i = 0; i < ntypes; i++)
+		printf("\t%s\n", types[i])
+	printf("\n")
+	for(i = 0; i < nnums; i++)
+		printf("\t%s\n", scnums[i])
+	printf("\n")
+	printf("\t/* start manual overrides { */\n");
+	for(i = 0; i < nspecialdefs; i++)
+		printf("\t%s\n", specialdefs[i])
+	printf("\t/* } end manual overrides */\n");
+	printf("\n")
+	for(i = 0; i < nproto; i++)
+		printf("\t%s\n", scproto[i])
+	printf(";;\n\n")
+
+	printf("\t/* start manual overrides { */\n");
+	for(i = 0; i < nspecialbody; i++)
+		printf("\t%s\n", specialbody[i])
+	printf("\t/* } end manual overrides */\n");
+	for(i = 0; i < ncall; i++)
+		printf("%s\n", sccall[i])
+}
+
+$Typefield == "STD" || (systype == "linux" && $Typefield == "NOPROTO") {
+	parse();
+	if (length("const Sys") + length(name) < 16)
+		tabs="\t\t\t"
+	else if (length("const Sys") + length(name) < 24)
+		tabs="\t\t"
+	else
+		tabs = "\t"
+	num = sprintf("const Sys%s%s: scno = %d", name, tabs, number);
+	scnums[nnums++] = num
+
+	if (nocode)
+		next;
+
+	if (length("const ") + length(name) < 16)
+		tabs="\t\t\t"
+	else if (length("const ") + length(name) < 24)
+		tabs="\t\t"
+	else
+		tabs = "\t"
+	proto = sprintf("const %s%s:  (", name, tabs);
+	sep="";
+	for (i = 0; i < argc; i++) {
+		proto = proto sprintf("%s%s : %s", sep, argname[i], argtype[i])
+		sep = ", ";
+	}
+	proto = proto sprintf(" -> %s)", ret)
+	scproto[nproto++] = proto
+
+	call = sprintf("const %s\t= {", name);
+	sep="";
+	for (i = 0; i < argc; i++) {
+		call = call sprintf("%s%s", sep, argname[i])
+		sep = ", ";
+	}
+	call = call sprintf("\n\t -> (syscall(Sys%s", name)
+	for (i = 1; i < argc; i++) {
+		call = call sprintf(", a(%s)", argname[i])
+	}
+	call = call sprintf(") : %s)\n}", ret)
+	sccall[ncall++] = call
+}
+
+
+function err(was, wanted) {
+	printf("%s: line %d: unexpected %s (expected %s)\n",
+		infile, NR, was, wanted);
+	printf("\tnear %s\n", $0);
+	exit 1;
+}
+
+function myrtype(t) {
+	gsub("[[:space:]]", "", t)
+	if (systype == "linux")
+		gsub("^l_", "", t)
+
+	if (t == "char")		t = "byte";
+	if (t == "unsigned int")	t = "uint";
+	if (t == "unsigned long")	t = "uint64";
+	if (t == "long")		t = "int64";
+	if (t == "u_char")		t = "byte";
+	if (t == "u_int")		t = "uint";
+	if (t == "u_long")		t = "uint64";
+	if (t == "acl_type_t")		t = "acltype";
+	if (t == "acl_tag_t")		t = "acltag";
+	if (t == "acl_perm_t")		t = "aclperm";
+	if (t == "acl_entry_type_t")	t = "aclenttype";
+	if (t == "mode_t")		t = "filemode"
+	# myrddin sizes are signed
+	if (t == "ssize_t")		t = "size";
+	if (t == "__socklen_t")		t = "int32";
+	if (t == "socklen_t")		t = "int32";
+	if (t == "fd_set")		t = "fdset";
+	if (t == "__ucontext")		t = "ucontext";
+	if (t == "cap_rights_t")	t = "caprights";
+	if (t == "stack_t")		t = "sigstack";
+	if (t == "thr_param")		t = "thrparam";
+	if (t == "nstat")		t = "statbuf";
+	if (t == "stat")		t = "statbuf";
+	if (t == "suseconds_t")		t = "int64";
+	if (t == "caddr_t")		t = "void#";
+
+	# linux stuff
+	if (t == "times_argv")		t = "tms";
+	if (t == "newstat")		t = "statbuf";
+	if (t == "stat64")		t = "statbuf";
+	if (t == "new_utsname")		t = "utsname"
+	if (t == "user_cap_header")	t = "capuserheader";
+	if (t == "user_cap_data")	t = "capuserdata";
+	if (t == "epoll_event")		t = "epollevt";
+	if (t == "statfs_buf")		t = "statfs";
+	if (t == "linux_robust_list_head")
+		t = "robust_list_head"
+
+	gsub("_t$", "", t)
+	gsub("^__", "", t)
+	return t;
+}
+
+function cname(t) {
+	# mostly to work around freebsd's linux syscalls.master
+	# being a bit off in places.
+	if (systype == "linux")
+		gsub("^l_", "", t)
+	if (t == "times_argv")		t = "tms";
+	if (t == "newstat")		t = "stat";
+	if (t == "statfs_buf")		t = "statfs";
+	if (t == "linux_robust_list_head")
+		t = "robust_list_head"
+
+	return t;
+}
+
+function unkeyword(kw) {
+	if (kw == "type")
+		return "kind";
+	if (kw == "in")
+		return "_in";
+	return kw;
+}
+
+function parse() {
+	number = $1;
+	type = $Typefield;
+
+	argc = 0
+	nocode = 0
+	if ($NF == "}") {
+		funcalias="";
+		argalias="";
+		rettype="int";
+		end=NF;
+	} else if ($(NF-1) == "}") {
+		funcalias=$(NF-1);
+		argalias="";
+		end=NF-1;
+	} else {
+		funcalias=$(NF-2);
+		argalias=$(NF-1);
+		rettype=$NF;
+		end=NF-3;
+	}
+
+	f = Protofield; 
+	# openbsd puts flags after the kind of call
+	if (systype == "openbsd" && $f != "{")
+		f++;
+	if ($f != "{")
+		err($f, "{");
+	f++
+	if ($end != "}")
+		err($f, "closing }");
+	end--;
+	if ($end != ";")
+		err($end, ";");
+	end--;
+	if ($end != ")")
+		err($end, ")");
+	end--;
+
+	ret=myrtype($f);
+	f++;
+	if ($f == "*") {
+		$f = $f"#";
+		f++;
+	}
+	name=$f;
+	if (strippfx)
+		gsub(strippfx, "", name);
+	if (renamings[name])
+		name=renamings[name];
+	if (special[name])
+		nocode = 1
+	f++;
+
+	if ($f != "(")
+		err($f, "(");
+	f++; 
+	if (f == end) {
+		if ($f != "void")
+			parserr($f, "argument definition")
+		return
+	}
+
+	while (f <= end) {
+		argtype[argc]=""
+		oldf=""
+		while (f < end && $(f+1) != ",") {
+			if ($f == "...")
+				f++;
+			if (argtype[argc] != "" && oldf != "*" && $f != "*")
+				argtype[argc] = argtype[argc]" ";
+			if ($f == "*")
+				$f="#"
+			if ($f != "const" && $f != "struct" &&
+			    $f != "__restrict" && $f != "volatile" &&
+			    $f != "union") {
+				argtype[argc] = myrtype(argtype[argc]$f);
+				if ($f != "#" && !knowntypes[myrtype($f)] && !wanttype[$f]) {
+					t = cname($f)
+					wanttype[t] = 1
+					printf("%s\n", t) > "want.txt"
+				}
+			}
+			oldf = $f;
+			f++
+		}
+		if (argtype[argc] == "")
+			err($f, "argument definition")
+		argname[argc]=unkeyword($f);
+		f += 2;			# skip name, and any comma
+		argc++
+	}
+}
+
+function loadtypes() {
+	path="types+"sys"-"arch".frag";
+	while ((getline ln < path) > 0) {
+		types[ntypes++] = ln;
+		split(ln, a)
+		if (a[1] == "type") {
+			knowntypes[a[2]] = 1
+			printf("%s\n", a[2]) > "have.txt"
+		}
+	}
+	path="gentypes+"sys"-"arch".frag";
+	while ((getline ln < path) > 0) {
+		types[ntypes++] = ln;
+		split(ln, a)
+		if (a[1] == "type") {
+			knowntypes[a[2]] = 1
+			printf("%s\n", a[2]) > "have.txt"
+		}
+	}
+}
+
+function loadspecials() {
+	path="specials+"sys"-"arch".frag";
+	while ((getline ln < path) > 0) {
+		while (match(ln, "\\\\[ \t]*$")) {
+			getline ln2 < path
+			ln = ln "\n" ln2
+		}
+		split(ln, sp)
+		off = 0
+		if (sp[off+1] == "extern")
+			off++;
+		if (sp[off+1] == "const" || sp[off+1] == "generic") {
+			special[sp[off+2]] = 1
+			if (sp[off+3] == ":")
+				specialdefs[nspecialdefs++] = ln;
+			else if (sp[3] == "=")
+				specialbody[nspecialbody++] = ln;
+			else
+				err(sp[3], ": or =")
+		} else {
+			specialbody[nspecialbody++] = ln;
+		}
+	}
+}
--- /dev/null
+++ b/support/syscall-gen/gensys.sh
@@ -1,0 +1,28 @@
+#!/bin/sh
+
+if [ $# -ne 2 ]; then
+	echo usage: $0 sysname arch
+	exit 1
+fi
+
+gen() {
+	sed -e '
+	s/\$//g
+	:join
+		/\\$/{a\
+
+		N
+		s/\\\n//
+		b join
+		}
+	2,${
+		/^#/!s/\([{}()*,]\)/ \1 /g
+	}
+	' < syscalls+$1.master | awk -f gencalls.awk $1 $2 > sys+$1-$2.myr
+}
+
+rm -f have.txt want.txt gentypes+$1-$2.frag
+
+gen $1 $2
+python ./c2myr.py $1 $2
+gen $1 $2
--- /dev/null
+++ b/support/syscall-gen/specials+freebsd-x64.frag
@@ -1,0 +1,299 @@
+/* pkg sys */
+	/* 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, 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)
+	/* wrappers to extract wait status */
+	const waitstatus	: (st : int32 -> waitstatus)
+
+	/* thread control */
+	const thr_new	: (param : thrparam#, paramsz : int -> int)
+	const thr_exit	: (state : int64# -> void)
+	const umtx_op	: (obj : void#, op : umtxop, val : uint64, a1 : void#, a2 : void# -> int)
+	const yield	: (-> int)
+
+	/* 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 unlink	: (path:byte[:] -> int)
+	const read	: (fd:fd, buf:byte[:] -> size)
+	const pread	: (fd:fd, buf:byte[:], off : off -> size)
+	const readv	: (fd:fd, iov:iovec[:] -> size)
+	const write	: (fd:fd, buf:byte[:] -> size)
+	const pwrite	: (fd:fd, buf:byte[:], off : off -> size)
+	const writev	: (fd:fd, iov : iovec[:] -> size)
+	const lseek	: (fd:fd, off : off, whence : whence -> 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 getdirentries	: (fd : fd, buf : byte[:], basep : int64# -> int64)
+	const chdir	: (p : byte[:] -> int64)
+	const __getcwd	: (buf : byte[:] -> int64)
+
+	/* signals */
+	const sigaction	: (sig : signo, act : sigaction#, oact : sigaction# -> int)
+	const sigprocmask	: (how : int32, set : sigset#, oset : sigset# -> int)
+
+	/* fd stuff */
+	const pipe	: (fds : fd[2]# -> int64)
+	const dup	: (fd : fd -> fd)
+	const dup2	: (src : fd, dst : fd -> fd)
+	/* NB: the C ABI uses '...' for the args. */
+	const fcntl	: (fd : fd, cmd : fcntlcmd, args : byte# -> int64)
+	const poll	: (pfd : pollfd[:], tm : 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)
+	const setsockopt	: (sock : fd, lev : sockproto, opt : sockopt, val : void#, len : size -> int)
+	const getsockopt	: (sock : fd, lev : sockproto, opt : sockopt, val : void#, 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 nanosleep	: (req : timespec#, rem : timespec# -> int32)
+	const sched_yield	: (-> void)
+
+	/* system information */
+	const uname 	: (buf : utsname# -> int)
+	const sysctl	: (mib : int[:], \
+		old : void#, oldsz : size#, \
+		new : void#, newsz : size# \
+		-> int)
+
+	/* filled by start code */
+/* ;; */
+
+/* 
+wraps a syscall argument, converting it to 64 bits for the syscall function. This is
+the same as casting, but more concise than (writing : int64)
+*/
+generic a = {x : @t; -> (x : uint64)}
+
+extern const cstring	: (str : byte[:] -> byte#)
+extern const alloca	: (sz : size	-> byte#)
+
+extern const __freebsd_pipe	: (fds : fd[2]# -> int64)
+
+/* process management */
+const exit	= {status;		syscall(Sysexit, a(status))}
+const getpid	= {;			-> (syscall(Sysgetpid, 1) : pid)}
+const kill	= {pid, sig;		-> syscall(Syskill, pid, sig)}
+const fork	= {;			-> (syscall(Sysfork) : pid)}
+const wait4	= {pid, loc, opt, usage;	-> syscall(Syswait4, pid, loc, opt, usage)}
+const waitpid	= {pid, loc, opt;
+	-> wait4(pid, loc, opt, (0 : 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 : byte##))[:args.len + 1]
+	for i = 0; i < args.len; i++
+		cargs[i] = cstring(args[i])
+	;;
+	cargs[args.len] = (0 : 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 : byte##))[:args.len]
+	for i = 0; i < args.len; i++
+		cargs[i] = cstring(args[i])
+	;;
+	cargs[args.len] = (0 : 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 : byte##))[:env.len]
+	for i = 0; i < env.len; i++
+		cenv[i] = cstring(env[i])
+	;;
+	cenv[env.len] = (0 : byte#)
+
+	-> syscall(Sysexecve, cstring(cmd), a(p), a(cenv))
+}
+
+/* thread management */
+const thr_new	= {param, sz;	-> (syscall(Systhr_new, a(param), a(sz)) : int)}
+const thr_exit	= {state;	syscall(Systhr_exit, a(state))}
+const umtx_op	= {obj, op, val, a1, a2; -> (syscall(Sys_umtx_op, a(obj), a(op), a(val), a(a1), a(a2)) : int)}
+const yield	= {;	-> (syscall(Sysyield) : int)}
+
+/* fd manipulation */
+const open	= {path, opts;		-> (syscall(Sysopen, cstring(path), a(opts), a(0o777)) : fd)}
+const openmode	= {path, opts, mode;	-> (syscall(Sysopen, cstring(path), a(opts), a(mode)) : fd)}
+const close	= {fd;			-> syscall(Sysclose, a(fd))}
+const creat	= {path, mode;		-> (openmode(path, Ocreat | Otrunc | Owronly, mode) : fd)}
+const unlink	= {path;		-> (syscall(Sysunlink, cstring(path)) : int)}
+const read	= {fd, buf;		-> (syscall(Sysread, a(fd), (buf : byte#), a(buf.len)) : size)}
+const pread	= {fd, buf, off;	-> (syscall(Syspread, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
+const readv	= {fd, vec;		-> (syscall(Sysreadv, a(fd), (vec : iovec#), a(vec.len)) : size)}
+const write	= {fd, buf;		-> (syscall(Syswrite, a(fd), (buf : byte#), a(buf.len)) : size)}
+const pwrite	= {fd, buf, off;	-> (syscall(Syspwrite, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
+const writev	= {fd, vec;		-> (syscall(Syswritev, a(fd), (vec : iovec#), a(vec.len)) : 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)) : int64)}
+generic ioctl	= {fd, req, arg;	-> (syscall(Sysioctl, a(fd), a(req), a(arg)) : int64)
+}
+const getdirentries	= {fd, buf, basep;	-> syscall(Sysgetdirentries, a(fd), (buf : byte#), a(buf.len), a(basep))}
+const chdir	= {dir;	-> syscall(Syschdir, cstring(dir))}
+const __getcwd	= {buf;	-> syscall(Sys__getcwd, a(buf), a(buf.len))}
+
+/* file stuff */
+const pipe	= {fds;	-> __freebsd_pipe(fds)}
+const dup 	= {fd;	-> (syscall(Sysdup, a(fd)) : fd)}
+const dup2 	= {src, dst;	-> (syscall(Sysdup2, a(src), a(dst)) : fd)}
+const fcntl	= {fd, cmd, args; 	-> syscall(Sysfcntl, a(fd), a(cmd), a(args))}
+const poll	= {pfd, tm;	-> (syscall(Syspoll, (pfd : byte#), a(pfd.len), a(tm)) : int)}
+
+/* signals */
+const sigaction	= {sig, act, oact;	-> (syscall(Syssigaction, a(sig), a(act), a(oact)) : int)}
+const sigprocmask	= {sig, act, oact;	-> (syscall(Syssigprocmask, a(sig), a(act), a(oact)) : int)}
+
+/* networking */
+const socket	= {dom, stype, proto;	-> (syscall(Syssocket, a(dom), a(stype), a(proto)) : fd) }
+const connect	= {sock, addr, len;	-> (syscall(Sysconnect, a(sock), a(addr), a(len)) : int)}
+const accept	= {sock, addr, len;	-> (syscall(Sysaccept, a(sock), a(addr), a(len)) : fd)}
+const listen	= {sock, backlog;	-> (syscall(Syslisten, a(sock), a(backlog)) : int)}
+const bind	= {sock, addr, len;	-> (syscall(Sysbind, a(sock), a(addr), a(len)) : int)}
+const setsockopt	= {sock, lev, opt, val, len;	-> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
+const getsockopt	= {sock, lev, opt, val, len;	-> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : 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)) : byte#)}
+
+/* time */
+const clock_getres = {clk, ts;	-> (syscall(Sysclock_getres, clockid(clk), a(ts)) : int32)}
+const clock_gettime = {clk, ts;	-> (syscall(Sysclock_gettime, clockid(clk), a(ts)) : int32)}
+const clock_settime = {clk, ts;	-> (syscall(Sysclock_settime, clockid(clk), a(ts)) : int32)}
+const nanosleep	= {req, rem;	-> (syscall(Sysnanosleep, a(req), a(rem)) : int32)}
+const sched_yield = {;	syscall(Syssched_yield)}
+
+
+const sysctl = {mib, old, oldsz, new, newsz
+	/* all args already passed through a() or ar  ptrs */
+	-> (syscall(Sys__sysctl, \
+		(mib : int#), a(mib.len), old, oldsz, new, newsz) : int)
+}
+
+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)
+}
+
+const waitstatus = {st
+	if st < 0
+		-> `Waitfail st
+	;;
+	match st & 0o177
+	| 0:    -> `Waitexit (st >> 8)
+	| 0x7f:-> `Waitstop (st >> 8)
+	| sig:  -> `Waitsig sig
+	;;
+}
+
+const uname	= {buf
+	var mib : int[2]
+	var ret
+	var sys, syssz
+	var nod, nodsz
+	var rel, relsz
+	var ver, versz
+	var mach, machsz
+
+	ret = 0
+	mib[0] = 1 /* CTL_KERN */
+	mib[1] = 1 /* KERN_OSTYPE */
+	sys = (buf.system[:] : void#)
+	syssz = buf.system.len
+	ret = sysctl(mib[:], sys, &syssz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	mib[0] = 1 /* CTL_KERN */
+	mib[1] = 10 /* KERN_HOSTNAME */
+	nod = (buf.node[:] : void#)
+	nodsz = buf.node.len
+	ret = sysctl(mib[:], nod, &nodsz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	mib[0] = 1 /* CTL_KERN */
+	mib[1] = 2 /* KERN_OSRELEASE */
+	rel = (buf.release[:] : void#)
+	relsz = buf.release.len
+	ret = sysctl(mib[:], rel, &relsz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	mib[0] = 1 /* CTL_KERN */
+	mib[1] = 4 /* KERN_VERSION */
+	ver = (buf.version[:] : void#)
+	versz = buf.version.len
+	ret = sysctl(mib[:], ver, &versz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	mib[0] = 6 /* CTL_HW */
+	mib[1] = 1 /* HW_MACHINE */
+	mach = (buf.machine[:] : void#)
+	machsz = buf.machine.len
+	ret = sysctl(mib[:], mach, &machsz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	-> 0
+}
--- /dev/null
+++ b/support/syscall-gen/specials+linux-x64.frag
@@ -1,0 +1,276 @@
+/* getting to the os */
+extern const syscall	: (sc:scno, args:... -> int64)
+extern const sigreturn	: (-> void)
+
+/* process management */
+const exit	: (status:int -> void)
+const exit_group	: (status:int -> void)
+const getpid	: ( -> pid)
+const kill	: (pid:pid, sig:int64 -> int64)
+const fork	: (-> pid)
+/* FIXME: where the fuck is 'struct pt_reg' defined?? */
+const clone	: (flags : cloneopt, stk : byte#, ptid : pid#, ctid : pid#, ptreg : byte# -> pid)
+extern const fnclone	: ( flags : cloneopt, \
+			stk : byte#, \
+			ptid : pid#, \
+			tls : byte#, \
+			ctid : pid#, \
+			ptreg : byte#, \
+			fn : void#  /* we need a raw pointer */ \
+			-> 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)
+/* wrappers to extract wait status */
+const waitstatus	: (st : int32 -> waitstatus)
+
+/* file manipulation */
+const open	: (path:byte[:], opts:fdopt -> fd)
+const openmode	: (path:byte[:], opts:fdopt, mode:int64 -> fd)
+const close	: (fd:fd -> int64)
+const rename	: (from : byte[:], to : byte[:] -> int64)
+const creat	: (path:byte[:], mode:int64 -> fd)
+const unlink	: (path:byte[:] -> int)
+const readlink	: (path:byte[:], buf:byte[:] -> int64)
+const read	: (fd:fd, buf:byte[:] -> size)
+const pread	: (fd:fd, buf:byte[:], off : off -> size)
+const write	: (fd:fd, buf:byte[:] -> size)
+const pwrite	: (fd:fd, buf:byte[:], off : off -> size)
+const lseek	: (fd:fd, off:off, whence:whence -> 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)
+const getcwd	: (buf : byte[:] -> int64)
+const sendmsg	: (fd:fd, msg:msghdr#, flags:msgflags -> int64)
+const recvmsg	: (fd:fd, msg:msghdr#, flags:msgflags -> int64)
+const fallocate : (fd:fd, mode:fallocmode, off:off, len:off -> int64)
+
+/* signals */
+const sigaction	: (sig : signo, act : sigaction#, oact : sigaction# -> int)
+const sigprocmask	: (how : int32, set : sigset#, oset : sigset# -> int)
+
+/* fd stuff */
+const pipe	: (fds : fd[2]# -> int64)
+const dup	: (fd : fd -> fd)
+const dup2	: (src : fd, dst : fd -> fd)
+
+/* threading */
+const futex	: (uaddr : int32#, op : futexop, val : int32, \
+	timeout : timespec#, uaddr2 : int32#, val3 : int32 -> int64)
+const semctl	:  (semid : int, semnum : int, cmd : int, arg : void# -> int)
+
+/* 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)
+const setsockopt	: (sock : fd, lev : sockproto, opt : sockopt, val : void#, len : size -> int)
+const getsockopt	: (sock : fd, lev : sockproto, opt : sockopt, val : void#, 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 nanosleep	: (req : timespec#, rem : timespec# -> int32)
+
+/* user/group management */
+const getuid : ( -> uint32)
+const getgid : ( -> uint32)
+const setuid : (uid : uint32 -> int32)
+const setgid : (gid : uint32 -> int32)
+
+/* system information */
+const uname 	: (buf : utsname# -> 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 a cast to int64.
+*/
+generic a = {x : @t; -> (x : 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 exit_group	= {status;	syscall(Sysexit_group, a(status))}
+const getpid	= {;			-> (syscall(Sysgetpid) : pid)}
+const kill	= {pid, sig;		-> syscall(Syskill, a(pid), a(sig))}
+const fork	= {;			-> (syscall(Sysfork) : pid)}
+const clone	= {flags, stk, ptid, ctid, ptreg;	-> (syscall(Sysclone, a(flags), a(stk), a(ptid), a(ctid), a(ptreg)) : 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 : byte##)[:args.len + 1]
+	for i = 0; i < args.len; i++
+		cargs[i] = cstring(args[i])
+	;;
+	cargs[args.len] = (0 : byte#)
+	-> syscall(Sysexecve, cstring(cmd), a(p), a(__cenvp))
+}
+
+const execve	= {cmd, args, env
+	var cargs, cenv, i
+	var ap, ep
+
+	/* copy the args */
+	ap = alloca((args.len + 1)*sizeof(byte#))
+	cargs = (ap : byte##)[:args.len + 1]
+	for i = 0; i < args.len; i++
+		cargs[i] = cstring(args[i])
+	;;
+	cargs[args.len] = (0 : byte#)
+
+	/*
+	 copy the env.
+	 of course we fucking have to duplicate this code everywhere,
+	 since we want to stack allocate...
+	*/
+	ep = alloca((env.len + 1)*sizeof(byte#))
+	cenv = (ep : byte##)[:env.len]
+	for i = 0; i < env.len; i++
+		cenv[i] = cstring(env[i])
+	;;
+	cenv[env.len] = (0 : byte#)
+
+	-> syscall(Sysexecve, cstring(cmd), a(ap), a(ep))
+}
+
+/* file manipulation */
+const open	= {path, opts;		-> (syscall(Sysopen, cstring(path), a(opts), a(0o777)) : fd)}
+const openmode	= {path, opts, mode;	-> (syscall(Sysopen, cstring(path), a(opts), a(mode)) : fd)}
+const close	= {fd;			-> syscall(Sysclose, a(fd))}
+const creat	= {path, mode;		-> (syscall(Syscreat, cstring(path), a(mode)) : fd)}
+const rename	= {from, to;		-> syscall(Sysrename, cstring(from), cstring(to))}
+const unlink	= {path;		-> (syscall(Sysunlink, cstring(path)) : int)}
+const readlink	= {path, buf; -> syscall(Sysreadlink, cstring(path), (buf : byte#), a(buf.len))}
+const read	= {fd, buf;		-> (syscall(Sysread, a(fd), (buf : byte#), a(buf.len)) : size)}
+const pread	= {fd, buf, off;	-> (syscall(Syspread, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
+const write	= {fd, buf;		-> (syscall(Syswrite, a(fd), (buf : byte#), a(buf.len)) : size)}
+const pwrite	= {fd, buf, off;	-> (syscall(Syspwrite, a(fd), (buf : byte#), a(buf.len), a(off)) : 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)) : int64)}
+generic ioctl	= {fd, req, arg;	-> (syscall(Sysioctl, a(fd), a(req), a(arg)) : int64)}
+const getdents64	= {fd, buf;	-> syscall(Sysgetdents64, a(fd), (buf : byte#), a(buf.len))}
+const chdir	= {dir;	-> syscall(Syschdir, cstring(dir))}
+const getcwd	= {buf;	-> syscall(Sysgetcwd, a(buf), a(buf.len))}
+const sendmsg	= {fd, msg, flags;	-> syscall(Syssendmsg, a(fd), msg, a(flags))}
+const recvmsg	= {fd, msg, flags;	-> syscall(Sysrecvmsg, a(fd), msg, a(flags))}
+const fallocate	= {fd, mode, off, len;	-> syscall(Sysfallocate, a(fd), a(mode),  a(off), a(len))}
+
+/* file stuff */
+const pipe	= {fds;	-> syscall(Syspipe, a(fds))}
+const dup 	= {fd;	-> (syscall(Sysdup, a(fd)) : fd)}
+const dup2 	= {src, dst;	-> (syscall(Sysdup2, a(src), a(dst)) : fd)}
+
+const sigaction	= {sig, act, oact;
+	if act.restore == (0 : byte#)
+		act.flags |= Sarestorer
+		act.restore = (sys.sigreturn : byte#)
+	;;
+	-> (syscall(Sysrt_sigaction, a(sig), a(act), a(oact), a(sizeof(sigflags))) : int)
+}
+const sigprocmask	= {sig, act, oact;	-> (syscall(Sysrt_sigprocmask, a(sig), a(act), a(oact), a(sizeof(sigflags))) : int)}
+
+/* threading */
+const futex	= {uaddr, op, val, timeout, uaddr2, val3
+	-> syscall(Sysfutex, a(uaddr), a(op), a(val), a(timeout), a(uaddr2), a(val3))
+}
+const semctl	= {semid, semnum, cmd, arg
+	-> (syscall(Syssemctl, a(semnum), a(cmd), a(arg)) : int)
+}
+
+/* poll */
+const poll	= {pfd, timeout;	-> (syscall(Syspoll, (pfd : pollfd#), a(pfd.len), a(timeout)) : int)}
+const epollctl	= {epfd, op, fd, evt;
+	-> (syscall(Sysepoll_ctl, a(epfd), a(op), a(fd), a(evt)) : int)}
+const epollwait	= {epfd, evts, timeout;
+	-> (syscall(Sysepoll_wait, a(epfd), (evts : epollevt#), a(evts.len), a(timeout)) : int)}
+const epollcreate	= {flg;	-> (syscall(Sysepoll_create1, a(flg)) : fd)}
+
+/* networking */
+const socket	= {dom, stype, proto;	-> (syscall(Syssocket, a(dom), a(stype), a(proto)) : fd)}
+const connect	= {sock, addr, len;	-> (syscall(Sysconnect, a(sock), a(addr), a(len)) : int)}
+const bind	= {sock, addr, len;	-> (syscall(Sysbind, a(sock), a(addr), a(len)) : int)}
+const listen	= {sock, backlog;	-> (syscall(Syslisten, a(sock), a(backlog)) : int)}
+const accept	= {sock, addr, lenp;	-> (syscall(Sysaccept, a(sock), a(addr), a(lenp)) : fd)}
+const setsockopt	= {sock, lev, opt, val, len;	-> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
+const getsockopt	= {sock, lev, opt, val, len;	-> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
+
+/* 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)) : byte#)
+}
+
+/* time */
+const clock_getres = {clk, ts;	-> (syscall(Sysclock_getres, clockid(clk), a(ts)) : int32)}
+const clock_gettime = {clk, ts;	-> (syscall(Sysclock_gettime, clockid(clk), a(ts)) : int32)}
+const clock_settime = {clk, ts;	-> (syscall(Sysclock_settime, clockid(clk), a(ts)) : int32)}
+const nanosleep	= {req, rem;	-> (syscall(Sysnanosleep, a(req), a(rem)) : int32)}
+
+/* user/group management */
+const getuid = {; -> (syscall(Sysgetuid) : uint32)}
+const getgid = {; -> (syscall(Sysgetgid) : uint32)}
+const setuid = {uid; -> (syscall(Syssetuid, a(uid)) : int32)}
+const setgid = {gid; -> (syscall(Syssetgid, a(gid)) : int32)}
+
+/* system information */
+const uname	= {buf;	-> (syscall(Sysuname, buf) : 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
+}
+
+
+const waitstatus = {st
+	if st & 0x7f == 0 /* if exited */
+		-> `Waitexit ((st & 0xff00) >> 8)
+	elif ((st & 0xffff)-1) < 0xff /* if signaled */
+		-> `Waitsig ((st) & 0x7f)
+	elif (((st & 0xffff)*0x10001)>>8) > 0x7f00
+		-> `Waitstop ((st & 0xff00) >> 8)
+	;;
+	-> `Waitfail st	/* wait failed to give a result */
+}
--- /dev/null
+++ b/support/syscall-gen/specials+openbsd:6.1-x64.frag
@@ -1,0 +1,286 @@
+/* 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, 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)
+/* wrappers to extract wait status */
+const waitstatus	: (st : int32 -> waitstatus)
+extern const __tfork_thread	: (tfp : tforkparams#, sz : size, fn : void#, arg : void# -> pid)
+
+/* 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 unlink	: (path:byte[:] -> int)
+const read	: (fd:fd, buf:byte[:] -> size)
+const pread	: (fd:fd, buf:byte[:], off : off -> size)
+const readv	: (fd:fd, iov:iovec[:] -> size)
+const write	: (fd:fd, buf:byte[:] -> size)
+const pwrite	: (fd:fd, buf:byte[:], off : off -> size)
+const writev	: (fd:fd, iov:iovec[:] -> size)
+const lseek	: (fd:fd, off : off, whence : whence -> 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 getdents	: (fd : fd, buf : byte[:] -> int64)
+const chdir	: (p : byte[:] -> int64)
+const __getcwd	: (buf : byte[:] -> int64)
+const poll	: (pfd : pollfd[:], tm : int -> int)
+
+/* signals */
+const sigaction	: (sig : signo, act : sigaction#, oact : sigaction# -> int)
+const sigprocmask	: (how : int32, set : sigset#, oset : sigset# -> int)
+
+/* fd stuff */
+const pipe	: (fds : fd[2]# -> int64)
+const dup	: (fd : fd -> fd)
+const dup2	: (src : fd, dst : fd -> fd)
+/* NB: the C ABI uses '...' for the args. */
+const fcntl	: (fd : fd, cmd : fcntlcmd, args : byte# -> 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)
+const setsockopt	: (sock : fd, lev : sockproto, opt : sockopt, val : void#, len : size -> int)
+const getsockopt	: (sock : fd, lev : sockproto, opt : sockopt, val : void#, 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 : void#, oldsz : size#, \
+		new : void#, newsz : size# \
+		-> 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 a cast to uint64
+*/
+generic a = {x : @t; -> (x : uint64)}
+
+extern const cstring	: (str : byte[:] -> byte#)
+extern const alloca	: (sz : size	-> byte#)
+
+extern const __freebsd_pipe	: (fds : fd[2]# -> int64)
+
+/* process management */
+const exit	= {status;		syscall(Sysexit, a(status))}
+const getpid	= {;			-> (syscall(Sysgetpid, 1) : pid)}
+const kill	= {pid, sig;		-> syscall(Syskill, pid, sig)}
+const fork	= {;			-> (syscall(Sysfork) : pid)}
+const wait4	= {pid, loc, opt, usage;	-> syscall(Syswait4, pid, loc, opt, usage)}
+const waitpid	= {pid, loc, opt;
+	-> wait4(pid, loc, opt, (0 : 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 : byte##)[:args.len + 1]
+	for i = 0; i < args.len; i++
+		cargs[i] = cstring(args[i])
+	;;
+	cargs[args.len] = (0 : 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 : byte##)[:args.len]
+	for i = 0; i < args.len; i++
+		cargs[i] = cstring(args[i])
+	;;
+	cargs[args.len] = (0 : 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 : byte##)[:env.len]
+	for i = 0; i < env.len; i++
+		cenv[i] = cstring(env[i])
+	;;
+	cenv[env.len] = (0 : byte#)
+
+	-> syscall(Sysexecve, cstring(cmd), a(p), a(cenv))
+}
+
+/* fd manipulation */
+const open	= {path, opts;		-> (syscall(Sysopen, cstring(path), a(opts), a(0o777)) : fd)}
+const openmode	= {path, opts, mode;	-> (syscall(Sysopen, cstring(path), a(opts), a(mode)) : fd)}
+const close	= {fd;			-> syscall(Sysclose, a(fd))}
+const creat	= {path, mode;		-> (openmode(path, Ocreat | Otrunc | Owronly, mode) : fd)}
+const unlink	= {path;		-> (syscall(Sysunlink, cstring(path)) : int)}
+const read	= {fd, buf;		-> (syscall(Sysread, a(fd), (buf : byte#), a(buf.len)) : size)}
+const pread	= {fd, buf, off;	-> (syscall(Syspread, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
+const readv	= {fd, vec;		-> (syscall(Sysreadv, a(fd), (vec : iovec#), a(vec.len)) : size)}
+const write	= {fd, buf;		-> (syscall(Syswrite, a(fd), (buf : byte#), a(buf.len)) : size)}
+const pwrite	= {fd, buf, off;	-> (syscall(Syspwrite, a(fd), (buf : byte#), a(buf.len), a(off)) : size)}
+const writev	= {fd, vec;		-> (syscall(Syswritev, a(fd), (vec : iovec#), a(vec.len)) : 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)) : int64)}
+generic ioctl	= {fd, req, arg;	-> (syscall(Sysioctl, a(fd), a(req), a(arg)) : int64)}
+const chdir	= {dir;	-> syscall(Syschdir, cstring(dir))}
+const __getcwd	= {buf;	-> syscall(Sys__getcwd, a(buf), a(buf.len))}
+const getdents	= {fd, buf;		-> (syscall(Sysgetdents, a(buf), a(buf.len)) : int64)}
+
+/* signals */
+const sigaction	= {sig, act, oact;	-> (syscall(Syssigaction, a(sig), a(act), a(oact)) : int)}
+const sigprocmask	= {sig, act, oact;	-> (syscall(Syssigprocmask, a(sig), a(act), a(oact)) : int)}
+
+/* file stuff */
+const pipe	= {fds;	-> syscall(Syspipe, fds)}
+const dup 	= {fd;	-> (syscall(Sysdup, a(fd)) : fd)}
+const dup2 	= {src, dst;	-> (syscall(Sysdup2, a(src), a(dst)) : fd)}
+const fcntl	= {fd, cmd, args; 	-> syscall(Sysfcntl, a(fd), a(cmd), a(args))}
+const poll      = {pfd, tm;     -> (syscall(Syspoll, (pfd : byte#), a(pfd.len), a(tm)) : int)}
+
+/* networking */
+const socket	= {dom, stype, proto;	-> (syscall(Syssocket, a(dom), a(stype), a(proto)) : fd)}
+const connect	= {sock, addr, len;	-> (syscall(Sysconnect, a(sock), a(addr), a(len)) : int)}
+const accept	= {sock, addr, len;	-> (syscall(Sysaccept, a(sock), a(addr), a(len)) : fd)}
+const listen	= {sock, backlog;	-> (syscall(Syslisten, a(sock), a(backlog)) : int)}
+const bind	= {sock, addr, len;	-> (syscall(Sysbind, a(sock), a(addr), a(len)) : int)}
+const setsockopt	= {sock, lev, opt, val, len;	-> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
+const getsockopt	= {sock, lev, opt, val, len;	-> (syscall(Syssetsockopt, a(sock), a(lev), a(opt), a(val), a(len)) : int)}
+
+/* memory management */
+const munmap	= {addr, len;		-> syscall(Sysmunmap, a(addr), a(len))}
+const mmap	= {addr, len, prot, flags, fd, off;
+	/* the actual syscall has padding on the offset arg */
+	-> (syscall(Sysmmap, a(addr), a(len), a(prot), a(flags), a(fd), a(0), a(off)) : byte#)
+}
+
+/* time */
+const clock_getres = {clk, ts;	-> (syscall(Sysclock_getres, clockid(clk), a(ts)) : int32)}
+const clock_gettime = {clk, ts;	-> (syscall(Sysclock_gettime, clockid(clk), a(ts)) : int32)}
+const clock_settime = {clk, ts;	-> (syscall(Sysclock_settime, clockid(clk), a(ts)) : 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)) : int32)}
+
+
+/* system information */
+const uname	= {buf
+	var mib : int[2]
+	var ret
+	var sys, syssz
+	var nod, nodsz
+	var rel, relsz
+	var ver, versz
+	var mach, machsz
+
+	ret = 0
+	mib[0] = 1 /* CTL_KERN */
+	mib[1] = 1 /* KERN_OSTYPE */
+	sys = (buf.system[:] : void#)
+	syssz = buf.system.len
+	ret = sysctl(mib[:], sys, &syssz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	mib[0] = 1 /* CTL_KERN */
+	mib[1] = 10 /* KERN_HOSTNAME */
+	nod = (buf.node[:] : void#)
+	nodsz = buf.node.len
+	ret = sysctl(mib[:], nod, &nodsz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	mib[0] = 1 /* CTL_KERN */
+	mib[1] = 2 /* KERN_OSRELEASE */
+	rel = (buf.release[:] : void#)
+	relsz = buf.release.len
+	ret = sysctl(mib[:], rel, &relsz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	mib[0] = 1 /* CTL_KERN */
+	mib[1] = 27 /* KERN_OSVERSION */
+	ver = (buf.version[:] : void#)
+	versz = buf.version.len
+	ret = sysctl(mib[:], ver, &versz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	mib[0] = 6 /* CTL_HW */
+	mib[1] = 1 /* HW_MACHINE */
+	mach = (buf.machine[:] : void#)
+	machsz = buf.machine.len
+	ret = sysctl(mib[:], mach, &machsz, (0 : void#), (0 : size#))
+	if ret < 0
+		-> ret
+	;;
+
+	-> 0
+}
+
+const sysctl = {mib, old, oldsz, new, newsz
+	/* all args already passed through a() or ar  ptrs */
+	-> (syscall(Syssysctl, \
+		(mib : int#), a(mib.len), old, oldsz, new, newsz) : int)
+}
+
+const clockid = {clk
+	match clk
+	| `Clockrealtime:	-> 0
+	| `Clockproccputime:	-> 2
+	| `Clockmonotonic:	-> 3
+	| `Clockthreadcputime:	-> 4
+	| `Clockuptime:	-> 5
+	;;
+	-> -1
+}
+
+const waitstatus = {st
+	if st < 0
+		-> `Waitfail st
+	;;
+	match st & 0o177
+	| 0:    -> `Waitexit (st >> 8)
+	| 0x7f:-> `Waitstop (st >> 8)
+	| sig:  -> `Waitsig sig
+	;;
+}
+
--- /dev/null
+++ b/support/syscall-gen/syscalls+freebsd.master
@@ -1,0 +1,999 @@
+;	from: @(#)syscalls.master	8.2 (Berkeley) 1/13/94
+;
+; System call name/number master file.
+; Processed to created init_sysent.c, syscalls.c and syscall.h.
+
+; Columns: number audit type name alt{name,tag,rtyp}/comments
+;	number	system call number, must be in order
+;	audit	the audit event associated with the system call
+;		A value of AUE_NULL means no auditing, but it also means that
+;		there is no audit event for the call at this time. For the
+;		case where the event exists, but we don't want auditing, the
+;		event should be #defined to AUE_NULL in audit_kevents.h.
+;	type	one of STD, OBSOL, UNIMPL, COMPAT, COMPAT4, COMPAT6,
+;		COMPAT7, NODEF, NOARGS, NOPROTO, NOSTD
+;		The COMPAT* options may be combined with one or more NO*
+;		options separated by '|' with no spaces (e.g. COMPAT|NOARGS)
+;	name	psuedo-prototype of syscall routine
+;		If one of the following alts is different, then all appear:
+;	altname	name of system call if different
+;	alttag	name of args struct tag if different from [o]`name'"_args"
+;	altrtyp	return type if not int (bogus - syscalls always return int)
+;		for UNIMPL/OBSOL, name continues with comments
+
+; types:
+;	STD	always included
+;	COMPAT	included on COMPAT #ifdef
+;	COMPAT4	included on COMPAT_FREEBSD4 #ifdef (FreeBSD 4 compat)
+;	COMPAT6	included on COMPAT_FREEBSD6 #ifdef (FreeBSD 6 compat)
+;	COMPAT7	included on COMPAT_FREEBSD7 #ifdef (FreeBSD 7 compat)
+;	COMPAT10 included on COMPAT_FREEBSD10 #ifdef (FreeBSD 10 compat)
+;	OBSOL	obsolete, not included in system, only specifies name
+;	UNIMPL	not implemented, placeholder only
+;	NOSTD	implemented but as a lkm that can be statically
+;		compiled in; sysent entry will be filled with lkmressys
+;		so the SYSCALL_MODULE macro works
+;	NOARGS	same as STD except do not create structure in sys/sysproto.h
+;	NODEF	same as STD except only have the entry in the syscall table
+;		added.  Meaning - do not create structure or function
+;		prototype in sys/sysproto.h
+;	NOPROTO	same as STD except do not create structure or
+;		function prototype in sys/sysproto.h.  Does add a
+;		definition to syscall.h besides adding a sysent.
+;	NOTSTATIC syscall is loadable
+;
+; Please copy any additions and changes to the following compatability tables:
+; sys/compat/freebsd32/syscalls.master
+
+; #ifdef's, etc. may be included, and are copied to the output files.
+
+#include <sys/param.h>
+#include <sys/sysent.h>
+#include <sys/sysproto.h>
+
+; Reserved/unimplemented system calls in the range 0-150 inclusive
+; are reserved for use in future Berkeley releases.
+; Additional system calls implemented in vendor and other
+; redistributions should be placed in the reserved range at the end
+; of the current calls.
+
+0	AUE_NULL	STD	{ int nosys(void); } syscall nosys_args int
+1	AUE_EXIT	STD	{ void sys_exit(int rval); } exit \
+				    sys_exit_args void
+2	AUE_FORK	STD	{ int fork(void); }
+3	AUE_NULL	STD	{ ssize_t read(int fd, void *buf, \
+				    size_t nbyte); }
+4	AUE_NULL	STD	{ ssize_t write(int fd, const void *buf, \
+				    size_t nbyte); }
+5	AUE_OPEN_RWTC	STD	{ int open(char *path, int flags, int mode); }
+; XXX should be		{ int open(const char *path, int flags, ...); }
+; but we're not ready for `const' or varargs.
+; XXX man page says `mode_t mode'.
+6	AUE_CLOSE	STD	{ int close(int fd); }
+7	AUE_WAIT4	STD	{ int wait4(int pid, int *status, \
+				    int options, struct rusage *rusage); }
+8	AUE_CREAT	COMPAT	{ int creat(char *path, int mode); }
+9	AUE_LINK	STD	{ int link(char *path, char *link); }
+10	AUE_UNLINK	STD	{ int unlink(char *path); }
+11	AUE_NULL	OBSOL	execv
+12	AUE_CHDIR	STD	{ int chdir(char *path); }
+13	AUE_FCHDIR	STD	{ int fchdir(int fd); }
+14	AUE_MKNOD	STD	{ int mknod(char *path, int mode, int dev); }
+15	AUE_CHMOD	STD	{ int chmod(char *path, int mode); }
+16	AUE_CHOWN	STD	{ int chown(char *path, int uid, int gid); }
+17	AUE_NULL	STD	{ int obreak(char *nsize); } break \
+				    obreak_args int
+18	AUE_GETFSSTAT	COMPAT4	{ int getfsstat(struct ostatfs *buf, \
+				    long bufsize, int flags); }
+19	AUE_LSEEK	COMPAT	{ long lseek(int fd, long offset, \
+				    int whence); }
+20	AUE_GETPID	STD	{ pid_t getpid(void); }
+21	AUE_MOUNT	STD	{ int mount(char *type, char *path, \
+				    int flags, caddr_t data); }
+; XXX `path' should have type `const char *' but we're not ready for that.
+22	AUE_UMOUNT	STD	{ int unmount(char *path, int flags); }
+23	AUE_SETUID	STD	{ int setuid(uid_t uid); }
+24	AUE_GETUID	STD	{ uid_t getuid(void); }
+25	AUE_GETEUID	STD	{ uid_t geteuid(void); }
+26	AUE_PTRACE	STD	{ int ptrace(int req, pid_t pid, \
+				    caddr_t addr, int data); }
+27	AUE_RECVMSG	STD	{ int recvmsg(int s, struct msghdr *msg, \
+				    int flags); }
+28	AUE_SENDMSG	STD	{ int sendmsg(int s, struct msghdr *msg, \
+				    int flags); }
+29	AUE_RECVFROM	STD	{ int recvfrom(int s, caddr_t buf, \
+				    size_t len, int flags, \
+				    struct sockaddr * __restrict from, \
+				    __socklen_t * __restrict fromlenaddr); }
+30	AUE_ACCEPT	STD	{ int accept(int s, \
+				    struct sockaddr * __restrict name, \
+				    __socklen_t * __restrict anamelen); }
+31	AUE_GETPEERNAME	STD	{ int getpeername(int fdes, \
+				    struct sockaddr * __restrict asa, \
+				    __socklen_t * __restrict alen); }
+32	AUE_GETSOCKNAME	STD	{ int getsockname(int fdes, \
+				    struct sockaddr * __restrict asa, \
+				    __socklen_t * __restrict alen); }
+33	AUE_ACCESS	STD	{ int access(char *path, int amode); }
+34	AUE_CHFLAGS	STD	{ int chflags(const char *path, u_long flags); }
+35	AUE_FCHFLAGS	STD	{ int fchflags(int fd, u_long flags); }
+36	AUE_SYNC	STD	{ int sync(void); }
+37	AUE_KILL	STD	{ int kill(int pid, int signum); }
+38	AUE_STAT	COMPAT	{ int stat(char *path, struct ostat *ub); }
+39	AUE_GETPPID	STD	{ pid_t getppid(void); }
+40	AUE_LSTAT	COMPAT	{ int lstat(char *path, struct ostat *ub); }
+41	AUE_DUP		STD	{ int dup(u_int fd); }
+42	AUE_PIPE	COMPAT10	{ int pipe(void); }
+43	AUE_GETEGID	STD	{ gid_t getegid(void); }
+44	AUE_PROFILE	STD	{ int profil(caddr_t samples, size_t size, \
+				    size_t offset, u_int scale); }
+45	AUE_KTRACE	STD	{ int ktrace(const char *fname, int ops, \
+				    int facs, int pid); }
+46	AUE_SIGACTION	COMPAT	{ int sigaction(int signum, \
+				    struct osigaction *nsa, \
+				    struct osigaction *osa); }
+47	AUE_GETGID	STD	{ gid_t getgid(void); }
+48	AUE_SIGPROCMASK	COMPAT	{ int sigprocmask(int how, osigset_t mask); }
+; XXX note nonstandard (bogus) calling convention - the libc stub passes
+; us the mask, not a pointer to it, and we return the old mask as the
+; (int) return value.
+49	AUE_GETLOGIN	STD	{ int getlogin(char *namebuf, u_int \
+				    namelen); }
+50	AUE_SETLOGIN	STD	{ int setlogin(char *namebuf); }
+51	AUE_ACCT	STD	{ int acct(char *path); }
+52	AUE_SIGPENDING	COMPAT	{ int sigpending(void); }
+53	AUE_SIGALTSTACK	STD	{ int sigaltstack(stack_t *ss, \
+				    stack_t *oss); }
+54	AUE_IOCTL	STD	{ int ioctl(int fd, u_long com, \
+				    caddr_t data); }
+55	AUE_REBOOT	STD	{ int reboot(int opt); }
+56	AUE_REVOKE	STD	{ int revoke(char *path); }
+57	AUE_SYMLINK	STD	{ int symlink(char *path, char *link); }
+58	AUE_READLINK	STD	{ ssize_t readlink(char *path, char *buf, \
+				    size_t count); }
+59	AUE_EXECVE	STD	{ int execve(char *fname, char **argv, \
+				    char **envv); }
+60	AUE_UMASK	STD	{ int umask(int newmask); } umask umask_args \
+				    int
+61	AUE_CHROOT	STD	{ int chroot(char *path); }
+62	AUE_FSTAT	COMPAT	{ int fstat(int fd, struct ostat *sb); }
+63	AUE_NULL	COMPAT	{ int getkerninfo(int op, char *where, \
+				    size_t *size, int arg); } getkerninfo \
+				    getkerninfo_args int
+64	AUE_NULL	COMPAT	{ int getpagesize(void); } getpagesize \
+				    getpagesize_args int
+65	AUE_MSYNC	STD	{ int msync(void *addr, size_t len, \
+				    int flags); }
+66	AUE_VFORK	STD	{ int vfork(void); }
+67	AUE_NULL	OBSOL	vread
+68	AUE_NULL	OBSOL	vwrite
+69	AUE_SBRK	STD	{ int sbrk(int incr); }
+70	AUE_SSTK	STD	{ int sstk(int incr); }
+71	AUE_MMAP	COMPAT	{ int mmap(void *addr, int len, int prot, \
+				    int flags, int fd, long pos); }
+72	AUE_O_VADVISE	STD	{ int ovadvise(int anom); } vadvise \
+				    ovadvise_args int
+73	AUE_MUNMAP	STD	{ int munmap(void *addr, size_t len); }
+74	AUE_MPROTECT	STD	{ int mprotect(const void *addr, size_t len, \
+				    int prot); }
+75	AUE_MADVISE	STD	{ int madvise(void *addr, size_t len, \
+				    int behav); }
+76	AUE_NULL	OBSOL	vhangup
+77	AUE_NULL	OBSOL	vlimit
+78	AUE_MINCORE	STD	{ int mincore(const void *addr, size_t len, \
+				    char *vec); }
+79	AUE_GETGROUPS	STD	{ int getgroups(u_int gidsetsize, \
+				    gid_t *gidset); }
+80	AUE_SETGROUPS	STD	{ int setgroups(u_int gidsetsize, \
+				    gid_t *gidset); }
+81	AUE_GETPGRP	STD	{ int getpgrp(void); }
+82	AUE_SETPGRP	STD	{ int setpgid(int pid, int pgid); }
+83	AUE_SETITIMER	STD	{ int setitimer(u_int which, struct \
+				    itimerval *itv, struct itimerval *oitv); }
+84	AUE_WAIT4	COMPAT	{ int wait(void); }
+85	AUE_SWAPON	STD	{ int swapon(char *name); }
+86	AUE_GETITIMER	STD	{ int getitimer(u_int which, \
+				    struct itimerval *itv); }
+87	AUE_SYSCTL	COMPAT	{ int gethostname(char *hostname, \
+				    u_int len); } gethostname \
+				    gethostname_args int
+88	AUE_SYSCTL	COMPAT	{ int sethostname(char *hostname, \
+				    u_int len); } sethostname \
+				    sethostname_args int
+89	AUE_GETDTABLESIZE	STD	{ int getdtablesize(void); }
+90	AUE_DUP2	STD	{ int dup2(u_int from, u_int to); }
+91	AUE_NULL	UNIMPL	getdopt
+92	AUE_FCNTL	STD	{ int fcntl(int fd, int cmd, long arg); }
+; XXX should be	{ int fcntl(int fd, int cmd, ...); }
+; but we're not ready for varargs.
+93	AUE_SELECT	STD	{ int select(int nd, fd_set *in, fd_set *ou, \
+				    fd_set *ex, struct timeval *tv); }
+94	AUE_NULL	UNIMPL	setdopt
+95	AUE_FSYNC	STD	{ int fsync(int fd); }
+96	AUE_SETPRIORITY	STD	{ int setpriority(int which, int who, \
+				    int prio); }
+97	AUE_SOCKET	STD	{ int socket(int domain, int type, \
+				    int protocol); }
+98	AUE_CONNECT	STD	{ int connect(int s, caddr_t name, \
+				    int namelen); }
+99	AUE_ACCEPT	COMPAT|NOARGS { int accept(int s, caddr_t name, \
+				    int *anamelen); } accept accept_args int
+100	AUE_GETPRIORITY	STD	{ int getpriority(int which, int who); }
+101	AUE_SEND	COMPAT	{ int send(int s, caddr_t buf, int len, \
+				    int flags); }
+102	AUE_RECV	COMPAT	{ int recv(int s, caddr_t buf, int len, \
+				    int flags); }
+103	AUE_SIGRETURN	COMPAT	{ int sigreturn( \
+				    struct osigcontext *sigcntxp); }
+104	AUE_BIND	STD	{ int bind(int s, caddr_t name, \
+				    int namelen); }
+105	AUE_SETSOCKOPT	STD	{ int setsockopt(int s, int level, int name, \
+				    caddr_t val, int valsize); }
+106	AUE_LISTEN	STD	{ int listen(int s, int backlog); }
+107	AUE_NULL	OBSOL	vtimes
+108	AUE_NULL	COMPAT	{ int sigvec(int signum, struct sigvec *nsv, \
+				    struct sigvec *osv); }
+109	AUE_NULL	COMPAT	{ int sigblock(int mask); }
+110	AUE_NULL	COMPAT	{ int sigsetmask(int mask); }
+111	AUE_NULL	COMPAT	{ int sigsuspend(osigset_t mask); }
+; XXX note nonstandard (bogus) calling convention - the libc stub passes
+; us the mask, not a pointer to it.
+112	AUE_NULL	COMPAT	{ int sigstack(struct sigstack *nss, \
+				    struct sigstack *oss); }
+113	AUE_RECVMSG	COMPAT	{ int recvmsg(int s, struct omsghdr *msg, \
+				    int flags); }
+114	AUE_SENDMSG	COMPAT	{ int sendmsg(int s, caddr_t msg, \
+				    int flags); }
+115	AUE_NULL	OBSOL	vtrace
+116	AUE_GETTIMEOFDAY	STD	{ int gettimeofday(struct timeval *tp, \
+				    struct timezone *tzp); }
+117	AUE_GETRUSAGE	STD	{ int getrusage(int who, \
+				    struct rusage *rusage); }
+118	AUE_GETSOCKOPT	STD	{ int getsockopt(int s, int level, int name, \
+				    caddr_t val, int *avalsize); }
+119	AUE_NULL	UNIMPL	resuba (BSD/OS 2.x)
+120	AUE_READV	STD	{ int readv(int fd, struct iovec *iovp, \
+				    u_int iovcnt); }
+121	AUE_WRITEV	STD	{ int writev(int fd, struct iovec *iovp, \
+				    u_int iovcnt); }
+122	AUE_SETTIMEOFDAY	STD	{ int settimeofday(struct timeval *tv, \
+				    struct timezone *tzp); }
+123	AUE_FCHOWN	STD	{ int fchown(int fd, int uid, int gid); }
+124	AUE_FCHMOD	STD	{ int fchmod(int fd, int mode); }
+125	AUE_RECVFROM	COMPAT|NOARGS { int recvfrom(int s, caddr_t buf, \
+				    size_t len, int flags, caddr_t from, int \
+				    *fromlenaddr); } recvfrom recvfrom_args \
+				    int
+126	AUE_SETREUID	STD	{ int setreuid(int ruid, int euid); }
+127	AUE_SETREGID	STD	{ int setregid(int rgid, int egid); }
+128	AUE_RENAME	STD	{ int rename(char *from, char *to); }
+129	AUE_TRUNCATE	COMPAT	{ int truncate(char *path, long length); }
+130	AUE_FTRUNCATE	COMPAT	{ int ftruncate(int fd, long length); }
+131	AUE_FLOCK	STD	{ int flock(int fd, int how); }
+132	AUE_MKFIFO	STD	{ int mkfifo(char *path, int mode); }
+133	AUE_SENDTO	STD	{ int sendto(int s, caddr_t buf, size_t len, \
+				    int flags, caddr_t to, int tolen); }
+134	AUE_SHUTDOWN	STD	{ int shutdown(int s, int how); }
+135	AUE_SOCKETPAIR	STD	{ int socketpair(int domain, int type, \
+				    int protocol, int *rsv); }
+136	AUE_MKDIR	STD	{ int mkdir(char *path, int mode); }
+137	AUE_RMDIR	STD	{ int rmdir(char *path); }
+138	AUE_UTIMES	STD	{ int utimes(char *path, \
+				    struct timeval *tptr); }
+139	AUE_NULL	OBSOL	4.2 sigreturn
+140	AUE_ADJTIME	STD	{ int adjtime(struct timeval *delta, \
+				    struct timeval *olddelta); }
+141	AUE_GETPEERNAME	COMPAT	{ int getpeername(int fdes, caddr_t asa, \
+				    int *alen); }
+142	AUE_SYSCTL	COMPAT	{ long gethostid(void); }
+143	AUE_SYSCTL	COMPAT	{ int sethostid(long hostid); }
+144	AUE_GETRLIMIT	COMPAT	{ int getrlimit(u_int which, struct \
+				    orlimit *rlp); }
+145	AUE_SETRLIMIT	COMPAT	{ int setrlimit(u_int which, \
+				    struct orlimit *rlp); }
+146	AUE_KILLPG	COMPAT	{ int killpg(int pgid, int signum); }
+147	AUE_SETSID	STD	{ int setsid(void); }
+148	AUE_QUOTACTL	STD	{ int quotactl(char *path, int cmd, int uid, \
+				    caddr_t arg); }
+149	AUE_O_QUOTA	COMPAT	{ int quota(void); }
+150	AUE_GETSOCKNAME	COMPAT|NOARGS { int getsockname(int fdec, \
+				    caddr_t asa, int *alen); } getsockname \
+				    getsockname_args int
+
+; Syscalls 151-180 inclusive are reserved for vendor-specific
+; system calls.  (This includes various calls added for compatibity
+; with other Unix variants.)
+; Some of these calls are now supported by BSD...
+151	AUE_NULL	UNIMPL	sem_lock (BSD/OS 2.x)
+152	AUE_NULL	UNIMPL	sem_wakeup (BSD/OS 2.x)
+153	AUE_NULL	UNIMPL	asyncdaemon (BSD/OS 2.x)
+; 154 is initialised by the NLM code, if present.
+154	AUE_NULL	NOSTD	{ int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
+; 155 is initialized by the NFS code, if present.
+155	AUE_NFS_SVC	NOSTD	{ int nfssvc(int flag, caddr_t argp); }
+156	AUE_GETDIRENTRIES	COMPAT	{ int getdirentries(int fd, char *buf, \
+				    u_int count, long *basep); }
+157	AUE_STATFS	COMPAT4	{ int statfs(char *path, \
+				    struct ostatfs *buf); }
+158	AUE_FSTATFS	COMPAT4	{ int fstatfs(int fd, \
+				    struct ostatfs *buf); }
+159	AUE_NULL	UNIMPL	nosys
+160	AUE_LGETFH	STD	{ int lgetfh(char *fname, \
+				    struct fhandle *fhp); }
+161	AUE_NFS_GETFH	STD	{ int getfh(char *fname, \
+				    struct fhandle *fhp); }
+162	AUE_SYSCTL	COMPAT4	{ int getdomainname(char *domainname, \
+				    int len); }
+163	AUE_SYSCTL	COMPAT4	{ int setdomainname(char *domainname, \
+				    int len); }
+164	AUE_NULL	COMPAT4	{ int uname(struct utsname *name); }
+165	AUE_SYSARCH	STD	{ int sysarch(int op, char *parms); }
+166	AUE_RTPRIO	STD	{ int rtprio(int function, pid_t pid, \
+				    struct rtprio *rtp); }
+167	AUE_NULL	UNIMPL	nosys
+168	AUE_NULL	UNIMPL	nosys
+169	AUE_SEMSYS	NOSTD	{ int semsys(int which, int a2, int a3, \
+				    int a4, int a5); }
+; XXX should be	{ int semsys(int which, ...); }
+170	AUE_MSGSYS	NOSTD	{ int msgsys(int which, int a2, int a3, \
+				    int a4, int a5, int a6); }
+; XXX should be	{ int msgsys(int which, ...); }
+171	AUE_SHMSYS	NOSTD	{ int shmsys(int which, int a2, int a3, \
+				    int a4); }
+; XXX should be	{ int shmsys(int which, ...); }
+172	AUE_NULL	UNIMPL	nosys
+173	AUE_PREAD	COMPAT6	{ ssize_t pread(int fd, void *buf, \
+				    size_t nbyte, int pad, off_t offset); }
+174	AUE_PWRITE	COMPAT6	{ ssize_t pwrite(int fd, \
+				    const void *buf, \
+				    size_t nbyte, int pad, off_t offset); }
+175	AUE_NULL	STD	{ int setfib(int fibnum); }
+176	AUE_NTP_ADJTIME	STD	{ int ntp_adjtime(struct timex *tp); }
+177	AUE_NULL	UNIMPL	sfork (BSD/OS 2.x)
+178	AUE_NULL	UNIMPL	getdescriptor (BSD/OS 2.x)
+179	AUE_NULL	UNIMPL	setdescriptor (BSD/OS 2.x)
+180	AUE_NULL	UNIMPL	nosys
+
+; Syscalls 181-199 are used by/reserved for BSD
+181	AUE_SETGID	STD	{ int setgid(gid_t gid); }
+182	AUE_SETEGID	STD	{ int setegid(gid_t egid); }
+183	AUE_SETEUID	STD	{ int seteuid(uid_t euid); }
+184	AUE_NULL	UNIMPL	lfs_bmapv
+185	AUE_NULL	UNIMPL	lfs_markv
+186	AUE_NULL	UNIMPL	lfs_segclean
+187	AUE_NULL	UNIMPL	lfs_segwait
+188	AUE_STAT	STD	{ int stat(char *path, struct stat *ub); }
+189	AUE_FSTAT	STD	{ int fstat(int fd, struct stat *sb); }
+190	AUE_LSTAT	STD	{ int lstat(char *path, struct stat *ub); }
+191	AUE_PATHCONF	STD	{ int pathconf(char *path, int name); }
+192	AUE_FPATHCONF	STD	{ int fpathconf(int fd, int name); }
+193	AUE_NULL	UNIMPL	nosys
+194	AUE_GETRLIMIT	STD	{ int getrlimit(u_int which, \
+				    struct rlimit *rlp); } getrlimit \
+				    __getrlimit_args int
+195	AUE_SETRLIMIT	STD	{ int setrlimit(u_int which, \
+				    struct rlimit *rlp); } setrlimit \
+				    __setrlimit_args int
+196	AUE_GETDIRENTRIES	STD	{ int getdirentries(int fd, char *buf, \
+				    u_int count, long *basep); }
+197	AUE_MMAP	COMPAT6	{ caddr_t mmap(caddr_t addr, \
+				    size_t len, int prot, int flags, int fd, \
+				    int pad, off_t pos); }
+198	AUE_NULL	NOPROTO	{ int nosys(void); } __syscall \
+				    __syscall_args int
+199	AUE_LSEEK	COMPAT6	{ off_t lseek(int fd, int pad, \
+				    off_t offset, int whence); }
+200	AUE_TRUNCATE	COMPAT6	{ int truncate(char *path, int pad, \
+				    off_t length); }
+201	AUE_FTRUNCATE	COMPAT6	{ int ftruncate(int fd, int pad, \
+				    off_t length); }
+202	AUE_SYSCTL	STD	{ int __sysctl(int *name, u_int namelen, \
+				    void *old, size_t *oldlenp, void *new, \
+				    size_t newlen); } __sysctl sysctl_args int
+203	AUE_MLOCK	STD	{ int mlock(const void *addr, size_t len); }
+204	AUE_MUNLOCK	STD	{ int munlock(const void *addr, size_t len); }
+205	AUE_UNDELETE	STD	{ int undelete(char *path); }
+206	AUE_FUTIMES	STD	{ int futimes(int fd, struct timeval *tptr); }
+207	AUE_GETPGID	STD	{ int getpgid(pid_t pid); }
+208	AUE_NULL	UNIMPL	newreboot (NetBSD)
+209	AUE_POLL	STD	{ int poll(struct pollfd *fds, u_int nfds, \
+				    int timeout); }
+
+;
+; The following are reserved for loadable syscalls
+;
+210	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+211	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+212	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+213	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+214	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+215	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+216	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+217	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+218	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+219	AUE_NULL	NODEF|NOTSTATIC	lkmnosys lkmnosys nosys_args int
+
+;
+; The following were introduced with NetBSD/4.4Lite-2
+220	AUE_SEMCTL	COMPAT7|NOSTD { int __semctl(int semid, int semnum, \
+				    int cmd, union semun_old *arg); }
+221	AUE_SEMGET	NOSTD	{ int semget(key_t key, int nsems, \
+				    int semflg); }
+222	AUE_SEMOP	NOSTD	{ int semop(int semid, struct sembuf *sops, \
+				    size_t nsops); }
+223	AUE_NULL	UNIMPL	semconfig
+224	AUE_MSGCTL	COMPAT7|NOSTD { int msgctl(int msqid, int cmd, \
+				    struct msqid_ds_old *buf); }
+225	AUE_MSGGET	NOSTD	{ int msgget(key_t key, int msgflg); }
+226	AUE_MSGSND	NOSTD	{ int msgsnd(int msqid, const void *msgp, \
+				    size_t msgsz, int msgflg); }
+227	AUE_MSGRCV	NOSTD	{ int msgrcv(int msqid, void *msgp, \
+				    size_t msgsz, long msgtyp, int msgflg); }
+228	AUE_SHMAT	NOSTD	{ int shmat(int shmid, const void *shmaddr, \
+				    int shmflg); }
+229	AUE_SHMCTL	COMPAT7|NOSTD { int shmctl(int shmid, int cmd, \
+				    struct shmid_ds_old *buf); }
+230	AUE_SHMDT	NOSTD	{ int shmdt(const void *shmaddr); }
+231	AUE_SHMGET	NOSTD	{ int shmget(key_t key, size_t size, \
+				    int shmflg); }
+;
+232	AUE_NULL	STD	{ int clock_gettime(clockid_t clock_id, \
+				    struct timespec *tp); }
+233	AUE_CLOCK_SETTIME	STD	{ int clock_settime( \
+				    clockid_t clock_id, \
+				    const struct timespec *tp); }
+234	AUE_NULL	STD	{ int clock_getres(clockid_t clock_id, \
+				    struct timespec *tp); }
+235	AUE_NULL	STD	{ int ktimer_create(clockid_t clock_id, \
+				    struct sigevent *evp, int *timerid); }
+236	AUE_NULL	STD	{ int ktimer_delete(int timerid); }
+237	AUE_NULL	STD	{ int ktimer_settime(int timerid, int flags, \
+				    const struct itimerspec *value, \
+				    struct itimerspec *ovalue); }
+238	AUE_NULL	STD	{ int ktimer_gettime(int timerid, struct \
+				    itimerspec *value); }
+239	AUE_NULL	STD	{ int ktimer_getoverrun(int timerid); }
+240	AUE_NULL	STD	{ int nanosleep(const struct timespec *rqtp, \
+				    struct timespec *rmtp); }
+241	AUE_NULL	STD	{ int ffclock_getcounter(ffcounter *ffcount); }
+242	AUE_NULL	STD	{ int ffclock_setestimate( \
+				    struct ffclock_estimate *cest); }
+243	AUE_NULL	STD	{ int ffclock_getestimate( \
+				    struct ffclock_estimate *cest); }
+244	AUE_NULL	UNIMPL	nosys
+245	AUE_NULL	UNIMPL	nosys
+246	AUE_NULL	UNIMPL	nosys
+247	AUE_NULL	STD	{ int clock_getcpuclockid2(id_t id,\
+				    int which, clockid_t *clock_id); }
+;248	AUE_NULL	STD	{ int ntp_gettime(struct ntptimeval *ntvp); }
+249	AUE_NULL	UNIMPL	nosys
+; syscall numbers initially used in OpenBSD
+250	AUE_MINHERIT	STD	{ int minherit(void *addr, size_t len, \
+				    int inherit); }
+251	AUE_RFORK	STD	{ int rfork(int flags); }
+252	AUE_POLL	STD	{ int openbsd_poll(struct pollfd *fds, \
+				    u_int nfds, int timeout); }
+253	AUE_ISSETUGID	STD	{ int issetugid(void); }
+254	AUE_LCHOWN	STD	{ int lchown(char *path, int uid, int gid); }
+255	AUE_NULL	STD	{ int aio_read(struct aiocb *aiocbp); }
+256	AUE_NULL	STD	{ int aio_write(struct aiocb *aiocbp); }
+257	AUE_NULL	STD	{ int lio_listio(int mode, \
+				    struct aiocb * const *acb_list, \
+				    int nent, struct sigevent *sig); }
+258	AUE_NULL	UNIMPL	nosys
+259	AUE_NULL	UNIMPL	nosys
+260	AUE_NULL	UNIMPL	nosys
+261	AUE_NULL	UNIMPL	nosys
+262	AUE_NULL	UNIMPL	nosys
+263	AUE_NULL	UNIMPL	nosys
+264	AUE_NULL	UNIMPL	nosys
+265	AUE_NULL	UNIMPL	nosys
+266	AUE_NULL	UNIMPL	nosys
+267	AUE_NULL	UNIMPL	nosys
+268	AUE_NULL	UNIMPL	nosys
+269	AUE_NULL	UNIMPL	nosys
+270	AUE_NULL	UNIMPL	nosys
+271	AUE_NULL	UNIMPL	nosys
+272	AUE_O_GETDENTS	STD	{ int getdents(int fd, char *buf, \
+				    size_t count); }
+273	AUE_NULL	UNIMPL	nosys
+274	AUE_LCHMOD	STD	{ int lchmod(char *path, mode_t mode); }
+275	AUE_LCHOWN	NOPROTO	{ int lchown(char *path, uid_t uid, \
+				    gid_t gid); } netbsd_lchown lchown_args \
+				    int
+276	AUE_LUTIMES	STD	{ int lutimes(char *path, \
+				    struct timeval *tptr); }
+277	AUE_MSYNC	NOPROTO	{ int msync(void *addr, size_t len, \
+				    int flags); } netbsd_msync msync_args int
+278	AUE_STAT	STD	{ int nstat(char *path, struct nstat *ub); }
+279	AUE_FSTAT	STD	{ int nfstat(int fd, struct nstat *sb); }
+280	AUE_LSTAT	STD	{ int nlstat(char *path, struct nstat *ub); }
+281	AUE_NULL	UNIMPL	nosys
+282	AUE_NULL	UNIMPL	nosys
+283	AUE_NULL	UNIMPL	nosys
+284	AUE_NULL	UNIMPL	nosys
+285	AUE_NULL	UNIMPL	nosys
+286	AUE_NULL	UNIMPL	nosys
+287	AUE_NULL	UNIMPL	nosys
+288	AUE_NULL	UNIMPL	nosys
+; 289 and 290 from NetBSD (OpenBSD: 267 and 268)
+289	AUE_PREADV	STD	{ ssize_t preadv(int fd, struct iovec *iovp, \
+					u_int iovcnt, off_t offset); }
+290	AUE_PWRITEV	STD	{ ssize_t pwritev(int fd, struct iovec *iovp, \
+					u_int iovcnt, off_t offset); }
+291	AUE_NULL	UNIMPL	nosys
+292	AUE_NULL	UNIMPL	nosys
+293	AUE_NULL	UNIMPL	nosys
+294	AUE_NULL	UNIMPL	nosys
+295	AUE_NULL	UNIMPL	nosys
+296	AUE_NULL	UNIMPL	nosys
+; XXX 297 is 300 in NetBSD 
+297	AUE_FHSTATFS	COMPAT4	{ int fhstatfs( \
+				    const struct fhandle *u_fhp, \
+				    struct ostatfs *buf); }
+298	AUE_FHOPEN	STD	{ int fhopen(const struct fhandle *u_fhp, \
+				    int flags); }
+299	AUE_FHSTAT	STD	{ int fhstat(const struct fhandle *u_fhp, \
+				    struct stat *sb); }
+; syscall numbers for FreeBSD
+300	AUE_NULL	STD	{ int modnext(int modid); }
+;301	AUE_NULL	STD	{ int modstat(int modid, \
+;				    struct module_stat *stat); }
+302	AUE_NULL	STD	{ int modfnext(int modid); }
+303	AUE_NULL	STD	{ int modfind(const char *name); }
+304	AUE_MODLOAD	STD	{ int kldload(const char *file); }
+305	AUE_MODUNLOAD	STD	{ int kldunload(int fileid); }
+306	AUE_NULL	STD	{ int kldfind(const char *file); }
+307	AUE_NULL	STD	{ int kldnext(int fileid); }
+;308	AUE_NULL	STD	{ int kldstat(int fileid, struct \
+;				    kld_file_stat* stat); }
+309	AUE_NULL	STD	{ int kldfirstmod(int fileid); }
+310	AUE_GETSID	STD	{ int getsid(pid_t pid); }
+311	AUE_SETRESUID	STD	{ int setresuid(uid_t ruid, uid_t euid, \
+				    uid_t suid); }
+312	AUE_SETRESGID	STD	{ int setresgid(gid_t rgid, gid_t egid, \
+				    gid_t sgid); }
+313	AUE_NULL	OBSOL	signanosleep
+314	AUE_NULL	STD	{ ssize_t aio_return(struct aiocb *aiocbp); }
+315	AUE_NULL	STD	{ int aio_suspend( \
+				    struct aiocb * const * aiocbp, int nent, \
+				    const struct timespec *timeout); }
+316	AUE_NULL	STD	{ int aio_cancel(int fd, \
+				    struct aiocb *aiocbp); }
+317	AUE_NULL	STD	{ int aio_error(struct aiocb *aiocbp); }
+318	AUE_NULL	COMPAT6	{ int aio_read(struct oaiocb *aiocbp); }
+319	AUE_NULL	COMPAT6	{ int aio_write(struct oaiocb *aiocbp); }
+320	AUE_NULL	COMPAT6	{ int lio_listio(int mode, \
+				    struct oaiocb * const *acb_list, \
+				    int nent, struct osigevent *sig); }
+321	AUE_NULL	STD	{ int yield(void); }
+322	AUE_NULL	OBSOL	thr_sleep
+323	AUE_NULL	OBSOL	thr_wakeup
+324	AUE_MLOCKALL	STD	{ int mlockall(int how); }
+325	AUE_MUNLOCKALL	STD	{ int munlockall(void); }
+326	AUE_GETCWD	STD	{ int __getcwd(char *buf, u_int buflen); }
+
+327	AUE_NULL	STD	{ int sched_setparam (pid_t pid, \
+				    const struct sched_param *param); }
+328	AUE_NULL	STD	{ int sched_getparam (pid_t pid, struct \
+				    sched_param *param); }
+
+329	AUE_NULL	STD	{ int sched_setscheduler (pid_t pid, int \
+				    policy, const struct sched_param \
+				    *param); }
+330	AUE_NULL	STD	{ int sched_getscheduler (pid_t pid); }
+
+331	AUE_NULL	STD	{ int sched_yield (void); }
+332	AUE_NULL	STD	{ int sched_get_priority_max (int policy); }
+333	AUE_NULL	STD	{ int sched_get_priority_min (int policy); }
+334	AUE_NULL	STD	{ int sched_rr_get_interval (pid_t pid, \
+				    struct timespec *interval); }
+335	AUE_NULL	STD	{ int utrace(const void *addr, size_t len); }
+336	AUE_SENDFILE	COMPAT4	{ int sendfile(int fd, int s, \
+				    off_t offset, size_t nbytes, \
+				    struct sf_hdtr *hdtr, off_t *sbytes, \
+				    int flags); }
+337	AUE_NULL	STD	{ int kldsym(int fileid, int cmd, \
+				    void *data); }
+338	AUE_JAIL	STD	{ int jail(struct jail *jail); }
+339	AUE_NULL	NOSTD|NOTSTATIC	{ int nnpfs_syscall(int operation, \
+				    char *a_pathP, int a_opcode, \
+				    void *a_paramsP, int a_followSymlinks); }
+340	AUE_SIGPROCMASK	STD	{ int sigprocmask(int how, \
+				    const sigset_t *set, sigset_t *oset); }
+341	AUE_SIGSUSPEND	STD	{ int sigsuspend(const sigset_t *sigmask); }
+342	AUE_SIGACTION	COMPAT4	{ int sigaction(int sig, const \
+				    struct sigaction *act, \
+				    struct sigaction *oact); }
+343	AUE_SIGPENDING	STD	{ int sigpending(sigset_t *set); }
+344	AUE_SIGRETURN	COMPAT4	{ int sigreturn( \
+				    const struct ucontext4 *sigcntxp); }
+345	AUE_SIGWAIT	STD	{ int sigtimedwait(const sigset_t *set, \
+				    siginfo_t *info, \
+				    const struct timespec *timeout); }
+346	AUE_NULL	STD	{ int sigwaitinfo(const sigset_t *set, \
+				    siginfo_t *info); }
+347	AUE_NULL	STD	{ int __acl_get_file(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
+348	AUE_NULL	STD	{ int __acl_set_file(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
+349	AUE_NULL	STD	{ int __acl_get_fd(int filedes, \
+				    acl_type_t type, struct acl *aclp); }
+350	AUE_NULL	STD	{ int __acl_set_fd(int filedes, \
+				    acl_type_t type, struct acl *aclp); }
+351	AUE_NULL	STD	{ int __acl_delete_file(const char *path, \
+				    acl_type_t type); }
+352	AUE_NULL	STD	{ int __acl_delete_fd(int filedes, \
+				    acl_type_t type); }
+353	AUE_NULL	STD	{ int __acl_aclcheck_file(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
+354	AUE_NULL	STD	{ int __acl_aclcheck_fd(int filedes, \
+				    acl_type_t type, struct acl *aclp); }
+355	AUE_EXTATTRCTL	STD	{ int extattrctl(const char *path, int cmd, \
+				    const char *filename, int attrnamespace, \
+				    const char *attrname); }
+356	AUE_EXTATTR_SET_FILE	STD	{ ssize_t extattr_set_file( \
+				    const char *path, int attrnamespace, \
+				    const char *attrname, void *data, \
+				    size_t nbytes); }
+357	AUE_EXTATTR_GET_FILE	STD	{ ssize_t extattr_get_file( \
+				    const char *path, int attrnamespace, \
+				    const char *attrname, void *data, \
+				    size_t nbytes); }
+358	AUE_EXTATTR_DELETE_FILE	STD	{ int extattr_delete_file(const char *path, \
+				    int attrnamespace, \
+				    const char *attrname); }
+359	AUE_NULL	STD	{ ssize_t aio_waitcomplete( \
+				    struct aiocb **aiocbp, \
+				    struct timespec *timeout); }
+360	AUE_GETRESUID	STD	{ int getresuid(uid_t *ruid, uid_t *euid, \
+				    uid_t *suid); }
+361	AUE_GETRESGID	STD	{ int getresgid(gid_t *rgid, gid_t *egid, \
+				    gid_t *sgid); }
+362	AUE_KQUEUE	STD	{ int kqueue(void); }
+363	AUE_NULL	STD	{ int kevent(int fd, \
+				    struct kevent *changelist, int nchanges, \
+				    struct kevent *eventlist, int nevents, \
+				    const struct timespec *timeout); }
+364	AUE_NULL	UNIMPL	__cap_get_proc
+365	AUE_NULL	UNIMPL	__cap_set_proc
+366	AUE_NULL	UNIMPL	__cap_get_fd
+367	AUE_NULL	UNIMPL	__cap_get_file
+368	AUE_NULL	UNIMPL	__cap_set_fd
+369	AUE_NULL	UNIMPL	__cap_set_file
+370	AUE_NULL	UNIMPL	nosys
+371	AUE_EXTATTR_SET_FD	STD	{ ssize_t extattr_set_fd(int fd, \
+				    int attrnamespace, const char *attrname, \
+				    void *data, size_t nbytes); }
+372	AUE_EXTATTR_GET_FD	STD	{ ssize_t extattr_get_fd(int fd, \
+				    int attrnamespace, const char *attrname, \
+				    void *data, size_t nbytes); }
+373	AUE_EXTATTR_DELETE_FD	STD	{ int extattr_delete_fd(int fd, \
+				    int attrnamespace, \
+				    const char *attrname); }
+374	AUE_NULL	STD	{ int __setugid(int flag); }
+375	AUE_NULL	UNIMPL	nfsclnt
+376	AUE_EACCESS	STD	{ int eaccess(char *path, int amode); }
+377	AUE_NULL	NOSTD|NOTSTATIC	{ int afs3_syscall(long syscall, \
+				    long parm1, long parm2, long parm3, \
+				    long parm4, long parm5, long parm6); }
+378	AUE_NMOUNT	STD	{ int nmount(struct iovec *iovp, \
+				    unsigned int iovcnt, int flags); }
+379	AUE_NULL	UNIMPL	kse_exit
+380	AUE_NULL	UNIMPL	kse_wakeup
+381	AUE_NULL	UNIMPL	kse_create
+382	AUE_NULL	UNIMPL	kse_thr_interrupt
+383	AUE_NULL	UNIMPL	kse_release
+384	AUE_NULL	STD	{ int __mac_get_proc(struct mac *mac_p); }
+385	AUE_NULL	STD	{ int __mac_set_proc(struct mac *mac_p); }
+386	AUE_NULL	STD	{ int __mac_get_fd(int fd, \
+				    struct mac *mac_p); }
+387	AUE_NULL	STD	{ int __mac_get_file(const char *path_p, \
+				    struct mac *mac_p); }
+388	AUE_NULL	STD	{ int __mac_set_fd(int fd, \
+				    struct mac *mac_p); }
+389	AUE_NULL	STD	{ int __mac_set_file(const char *path_p, \
+				    struct mac *mac_p); }
+390	AUE_NULL	STD	{ int kenv(int what, const char *name, \
+				    char *value, int len); }
+391	AUE_LCHFLAGS	STD	{ int lchflags(const char *path, \
+				    u_long flags); }
+392	AUE_NULL	STD	{ int uuidgen(struct uuid *store, \
+				    int count); }
+393	AUE_SENDFILE	STD	{ int sendfile(int fd, int s, off_t offset, \
+				    size_t nbytes, struct sf_hdtr *hdtr, \
+				    off_t *sbytes, int flags); }
+394	AUE_NULL	STD	{ int mac_syscall(const char *policy, \
+				    int call, void *arg); }
+395	AUE_GETFSSTAT	STD	{ int getfsstat(struct statfs *buf, \
+				    long bufsize, int flags); }
+396	AUE_STATFS	STD	{ int statfs(char *path, \
+				    struct statfs *buf); }
+397	AUE_FSTATFS	STD	{ int fstatfs(int fd, struct statfs *buf); }
+398	AUE_FHSTATFS	STD	{ int fhstatfs(const struct fhandle *u_fhp, \
+				    struct statfs *buf); }
+399	AUE_NULL	UNIMPL	nosys
+400	AUE_NULL	NOSTD	{ int ksem_close(semid_t id); }
+401	AUE_NULL	NOSTD	{ int ksem_post(semid_t id); }
+402	AUE_NULL	NOSTD	{ int ksem_wait(semid_t id); }
+403	AUE_NULL	NOSTD	{ int ksem_trywait(semid_t id); }
+404	AUE_NULL	NOSTD	{ int ksem_init(semid_t *idp, \
+				    unsigned int value); }
+405	AUE_NULL	NOSTD	{ int ksem_open(semid_t *idp, \
+				    const char *name, int oflag, \
+				    mode_t mode, unsigned int value); }
+406	AUE_NULL	NOSTD	{ int ksem_unlink(const char *name); }
+407	AUE_NULL	NOSTD	{ int ksem_getvalue(semid_t id, int *val); }
+408	AUE_NULL	NOSTD	{ int ksem_destroy(semid_t id); }
+409	AUE_NULL	STD	{ int __mac_get_pid(pid_t pid, \
+				    struct mac *mac_p); }
+410	AUE_NULL	STD	{ int __mac_get_link(const char *path_p, \
+				    struct mac *mac_p); }
+411	AUE_NULL	STD	{ int __mac_set_link(const char *path_p, \
+				    struct mac *mac_p); }
+412	AUE_EXTATTR_SET_LINK	STD	{ ssize_t extattr_set_link( \
+				    const char *path, int attrnamespace, \
+				    const char *attrname, void *data, \
+				    size_t nbytes); }
+413	AUE_EXTATTR_GET_LINK	STD	{ ssize_t extattr_get_link( \
+				    const char *path, int attrnamespace, \
+				    const char *attrname, void *data, \
+				    size_t nbytes); }
+414	AUE_EXTATTR_DELETE_LINK	STD	{ int extattr_delete_link( \
+				    const char *path, int attrnamespace, \
+				    const char *attrname); }
+415	AUE_NULL	STD	{ int __mac_execve(char *fname, char **argv, \
+				    char **envv, struct mac *mac_p); }
+416	AUE_SIGACTION	STD	{ int sigaction(int sig, \
+				    const struct sigaction *act, \
+				    struct sigaction *oact); }
+417	AUE_SIGRETURN	STD	{ int sigreturn( \
+				    const struct __ucontext *sigcntxp); }
+418	AUE_NULL	UNIMPL	__xstat
+419	AUE_NULL	UNIMPL	__xfstat
+420	AUE_NULL	UNIMPL	__xlstat
+421	AUE_NULL	STD	{ int getcontext(struct __ucontext *ucp); }
+422	AUE_NULL	STD	{ int setcontext( \
+				    const struct __ucontext *ucp); }
+423	AUE_NULL	STD	{ int swapcontext(struct __ucontext *oucp, \
+				    const struct __ucontext *ucp); }
+424	AUE_SWAPOFF	STD	{ int swapoff(const char *name); }
+425	AUE_NULL	STD	{ int __acl_get_link(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
+426	AUE_NULL	STD	{ int __acl_set_link(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
+427	AUE_NULL	STD	{ int __acl_delete_link(const char *path, \
+				    acl_type_t type); }
+428	AUE_NULL	STD	{ int __acl_aclcheck_link(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
+429	AUE_SIGWAIT	STD	{ int sigwait(const sigset_t *set, \
+				    int *sig); }
+430	AUE_NULL	STD	{ int thr_create(ucontext_t *ctx, long *id, \
+				    int flags); }
+431	AUE_NULL	STD	{ void thr_exit(long *state); }
+432	AUE_NULL	STD	{ int thr_self(long *id); }
+433	AUE_NULL	STD	{ int thr_kill(long id, int sig); }
+434	AUE_NULL	UNIMPL	nosys
+435	AUE_NULL	UNIMPL	nosys
+436	AUE_NULL	STD	{ int jail_attach(int jid); }
+437	AUE_EXTATTR_LIST_FD	STD	{ ssize_t extattr_list_fd(int fd, \
+				    int attrnamespace, void *data, \
+				    size_t nbytes); }
+438	AUE_EXTATTR_LIST_FILE	STD	{ ssize_t extattr_list_file( \
+				    const char *path, int attrnamespace, \
+				    void *data, size_t nbytes); }
+439	AUE_EXTATTR_LIST_LINK	STD	{ ssize_t extattr_list_link( \
+				    const char *path, int attrnamespace, \
+				    void *data, size_t nbytes); }
+440	AUE_NULL	UNIMPL	kse_switchin
+441	AUE_NULL	NOSTD	{ int ksem_timedwait(semid_t id, \
+				    const struct timespec *abstime); }
+442	AUE_NULL	STD	{ int thr_suspend( \
+				    const struct timespec *timeout); }
+443	AUE_NULL	STD	{ int thr_wake(long id); }
+444	AUE_MODUNLOAD	STD	{ int kldunloadf(int fileid, int flags); }
+445	AUE_AUDIT	STD	{ int audit(const void *record, \
+				    u_int length); }
+446	AUE_AUDITON	STD	{ int auditon(int cmd, void *data, \
+				    u_int length); }
+;447	AUE_GETAUID	STD	{ int getauid(uid_t *auid); }
+;448	AUE_SETAUID	STD	{ int setauid(uid_t *auid); }
+;449	AUE_GETAUDIT	STD	{ int getaudit(struct auditinfo *auditinfo); }
+;450	AUE_SETAUDIT	STD	{ int setaudit(struct auditinfo *auditinfo); }
+;451	AUE_GETAUDIT_ADDR	STD	{ int getaudit_addr( \
+;				    struct auditinfo_addr *auditinfo_addr, \
+;				    u_int length); }
+;452	AUE_SETAUDIT_ADDR	STD	{ int setaudit_addr( \
+;				    struct auditinfo_addr *auditinfo_addr, \
+;				    u_int length); }
+;453	AUE_AUDITCTL	STD	{ int auditctl(char *path); }
+454	AUE_NULL	STD	{ int _umtx_op(void *obj, int op, \
+				    u_long val, void *uaddr1, void *uaddr2); }
+455	AUE_NULL	STD	{ int thr_new(struct thr_param *param, \
+				    int param_size); }
+456	AUE_NULL	STD	{ int sigqueue(pid_t pid, int signum, void *value); }
+457	AUE_NULL	NOSTD	{ int kmq_open(const char *path, int flags, \
+				    mode_t mode, const struct mq_attr *attr); }
+458	AUE_NULL	NOSTD	{ int kmq_setattr(int mqd,		\
+				    const struct mq_attr *attr,		\
+				    struct mq_attr *oattr); }
+459	AUE_NULL	NOSTD	{ int kmq_timedreceive(int mqd,	\
+				    char *msg_ptr, size_t msg_len,	\
+				    unsigned *msg_prio,			\
+				    const struct timespec *abs_timeout); }
+460	AUE_NULL	NOSTD	{ int kmq_timedsend(int mqd,		\
+				    const char *msg_ptr, size_t msg_len,\
+				    unsigned msg_prio,			\
+				    const struct timespec *abs_timeout);}
+461	AUE_NULL	NOSTD	{ int kmq_notify(int mqd,		\
+				    const struct sigevent *sigev); }
+462	AUE_NULL	NOSTD	{ int kmq_unlink(const char *path); }
+463	AUE_NULL	STD	{ int abort2(const char *why, int nargs, void **args); }
+464	AUE_NULL	STD	{ int thr_set_name(long id, const char *name); }
+465	AUE_NULL	STD	{ int aio_fsync(int op, struct aiocb *aiocbp); }
+466	AUE_RTPRIO	STD	{ int rtprio_thread(int function, \
+				    lwpid_t lwpid, struct rtprio *rtp); }
+467	AUE_NULL	UNIMPL	nosys
+468	AUE_NULL	UNIMPL	nosys
+469	AUE_NULL	UNIMPL	__getpath_fromfd
+470	AUE_NULL	UNIMPL	__getpath_fromaddr
+471	AUE_NULL	NOSTD	{ int sctp_peeloff(int sd, uint32_t name); }
+472     AUE_NULL        NOSTD	{ int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \
+	                            caddr_t to, __socklen_t tolen, \
+				    struct sctp_sndrcvinfo *sinfo, int flags); }
+473     AUE_NULL        NOSTD	{ int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \
+	                            caddr_t to, __socklen_t tolen, \
+				    struct sctp_sndrcvinfo *sinfo, int flags); }
+474     AUE_NULL        NOSTD	{ int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
+				    struct sockaddr * from, __socklen_t *fromlenaddr, \
+				    struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
+475	AUE_PREAD	STD	{ ssize_t pread(int fd, void *buf, \
+				    size_t nbyte, off_t offset); }
+476	AUE_PWRITE	STD	{ ssize_t pwrite(int fd, const void *buf, \
+				    size_t nbyte, off_t offset); }
+477	AUE_MMAP	STD	{ caddr_t mmap(caddr_t addr, size_t len, \
+				    int prot, int flags, int fd, off_t pos); }
+478	AUE_LSEEK	STD	{ off_t lseek(int fd, off_t offset, \
+				    int whence); }
+479	AUE_TRUNCATE	STD	{ int truncate(char *path, off_t length); }
+480	AUE_FTRUNCATE	STD	{ int ftruncate(int fd, off_t length); }
+481	AUE_KILL	STD	{ int thr_kill2(pid_t pid, long id, int sig); }
+482	AUE_SHMOPEN	STD	{ int shm_open(const char *path, int flags, \
+				    mode_t mode); }
+483	AUE_SHMUNLINK	STD	{ int shm_unlink(const char *path); }
+484	AUE_NULL	STD	{ int cpuset(cpusetid_t *setid); }
+485	AUE_NULL	STD	{ int cpuset_setid(cpuwhich_t which, id_t id, \
+				    cpusetid_t setid); }
+486	AUE_NULL	STD	{ int cpuset_getid(cpulevel_t level, \
+				    cpuwhich_t which, id_t id, \
+				    cpusetid_t *setid); }
+487	AUE_NULL	STD	{ int cpuset_getaffinity(cpulevel_t level, \
+				    cpuwhich_t which, id_t id, size_t cpusetsize, \
+				    cpuset_t *mask); }
+488	AUE_NULL	STD	{ int cpuset_setaffinity(cpulevel_t level, \
+				    cpuwhich_t which, id_t id, size_t cpusetsize, \
+				    const cpuset_t *mask); }
+489	AUE_FACCESSAT	STD	{ int faccessat(int fd, char *path, int amode, \
+				    int flag); }
+490	AUE_FCHMODAT	STD	{ int fchmodat(int fd, char *path, mode_t mode, \
+				    int flag); }
+491	AUE_FCHOWNAT	STD	{ int fchownat(int fd, char *path, uid_t uid, \
+				    gid_t gid, int flag); }
+492	AUE_FEXECVE	STD	{ int fexecve(int fd, char **argv, \
+				    char **envv); }
+493	AUE_FSTATAT	STD	{ int fstatat(int fd, char *path, \
+				    struct stat *buf, int flag); }
+494	AUE_FUTIMESAT	STD	{ int futimesat(int fd, char *path, \
+				    struct timeval *times); }
+495	AUE_LINKAT	STD	{ int linkat(int fd1, char *path1, int fd2, \
+				    char *path2, int flag); }
+496	AUE_MKDIRAT	STD	{ int mkdirat(int fd, char *path, mode_t mode); }
+497	AUE_MKFIFOAT	STD	{ int mkfifoat(int fd, char *path, mode_t mode); }
+498	AUE_MKNODAT	STD	{ int mknodat(int fd, char *path, mode_t mode, \
+				    dev_t dev); }
+; XXX: see the comment for open
+499	AUE_OPENAT_RWTC	STD	{ int openat(int fd, char *path, int flag, \
+				    mode_t mode); }
+500	AUE_READLINKAT	STD	{ int readlinkat(int fd, char *path, char *buf, \
+				    size_t bufsize); }
+501	AUE_RENAMEAT	STD	{ int renameat(int oldfd, char *old, int newfd, \
+				     char *new); }
+502	AUE_SYMLINKAT	STD	{ int symlinkat(char *path1, int fd, \
+				     char *path2); }
+503	AUE_UNLINKAT	STD	{ int unlinkat(int fd, char *path, int flag); }
+504	AUE_POSIX_OPENPT	STD	{ int posix_openpt(int flags); }
+; 505 is initialised by the kgssapi code, if present.
+505	AUE_NULL	NOSTD	{ int gssd_syscall(char *path); }
+506	AUE_NULL	STD	{ int jail_get(struct iovec *iovp, \
+				    unsigned int iovcnt, int flags); }
+507	AUE_NULL	STD	{ int jail_set(struct iovec *iovp, \
+				    unsigned int iovcnt, int flags); }
+508	AUE_NULL	STD	{ int jail_remove(int jid); }
+509	AUE_CLOSEFROM	STD	{ int closefrom(int lowfd); }
+510	AUE_SEMCTL	NOSTD	{ int __semctl(int semid, int semnum, \
+				    int cmd, union semun *arg); }
+511	AUE_MSGCTL	NOSTD	{ int msgctl(int msqid, int cmd, \
+				    struct msqid_ds *buf); }
+512	AUE_SHMCTL	NOSTD	{ int shmctl(int shmid, int cmd, \
+				    struct shmid_ds *buf); }
+513	AUE_LPATHCONF	STD	{ int lpathconf(char *path, int name); }
+514	AUE_NULL	OBSOL	cap_new
+515	AUE_CAP_RIGHTS_GET	STD	{ int __cap_rights_get(int version, \
+				    int fd, cap_rights_t *rightsp); }
+516	AUE_CAP_ENTER	STD	{ int cap_enter(void); }
+517	AUE_CAP_GETMODE	STD	{ int cap_getmode(u_int *modep); }
+518	AUE_PDFORK	STD	{ int pdfork(int *fdp, int flags); }
+519	AUE_PDKILL	STD	{ int pdkill(int fd, int signum); }
+520	AUE_PDGETPID	STD	{ int pdgetpid(int fd, pid_t *pidp); }
+521	AUE_PDWAIT	UNIMPL	pdwait4
+522	AUE_SELECT	STD	{ int pselect(int nd, fd_set *in, \
+				    fd_set *ou, fd_set *ex, \
+				    const struct timespec *ts, \
+				    const sigset_t *sm); }
+523	AUE_NULL	STD	{ int getloginclass(char *namebuf, \
+				    size_t namelen); }
+524	AUE_NULL	STD	{ int setloginclass(const char *namebuf); }
+525	AUE_NULL	STD	{ int rctl_get_racct(const void *inbufp, \
+				    size_t inbuflen, void *outbufp, \
+				    size_t outbuflen); }
+526	AUE_NULL	STD	{ int rctl_get_rules(const void *inbufp, \
+				    size_t inbuflen, void *outbufp, \
+				    size_t outbuflen); }
+527	AUE_NULL	STD	{ int rctl_get_limits(const void *inbufp, \
+				    size_t inbuflen, void *outbufp, \
+				    size_t outbuflen); }
+528	AUE_NULL	STD	{ int rctl_add_rule(const void *inbufp, \
+				    size_t inbuflen, void *outbufp, \
+				    size_t outbuflen); }
+529	AUE_NULL	STD	{ int rctl_remove_rule(const void *inbufp, \
+				    size_t inbuflen, void *outbufp, \
+				    size_t outbuflen); }
+530	AUE_NULL	STD	{ int posix_fallocate(int fd, \
+				    off_t offset, off_t len); }
+531	AUE_NULL	STD	{ int posix_fadvise(int fd, off_t offset, \
+				    off_t len, int advice); }
+532	AUE_WAIT6	STD	{ int wait6(idtype_t idtype, id_t id, \
+				    int *status, int options, \
+				    struct __wrusage *wrusage, \
+				    siginfo_t *info); }
+533	AUE_CAP_RIGHTS_LIMIT	STD	{ int cap_rights_limit(int fd, \
+					    cap_rights_t *rightsp); }
+534	AUE_CAP_IOCTLS_LIMIT	STD	{ int cap_ioctls_limit(int fd, \
+					    const u_long *cmds, size_t ncmds); }
+535	AUE_CAP_IOCTLS_GET	STD	{ ssize_t cap_ioctls_get(int fd, \
+					    u_long *cmds, size_t maxcmds); }
+536	AUE_CAP_FCNTLS_LIMIT	STD	{ int cap_fcntls_limit(int fd, \
+					    uint32_t fcntlrights); }
+537	AUE_CAP_FCNTLS_GET	STD	{ int cap_fcntls_get(int fd, \
+					    uint32_t *fcntlrightsp); }
+538	AUE_BINDAT	STD	{ int bindat(int fd, int s, caddr_t name, \
+				    int namelen); }
+539	AUE_CONNECTAT	STD	{ int connectat(int fd, int s, caddr_t name, \
+				    int namelen); }
+540	AUE_CHFLAGSAT	STD	{ int chflagsat(int fd, const char *path, \
+				    u_long flags, int atflag); }
+541	AUE_ACCEPT	STD	{ int accept4(int s, \
+				    struct sockaddr * __restrict name, \
+				    __socklen_t * __restrict anamelen, \
+				    int flags); }
+542	AUE_PIPE	STD	{ int pipe2(int *fildes, int flags); }
+543	AUE_NULL	STD	{ int aio_mlock(struct aiocb *aiocbp); }
+544	AUE_NULL	STD	{ int procctl(idtype_t idtype, id_t id, \
+				    int com, void *data); }
+545	AUE_POLL	STD	{ int ppoll(struct pollfd *fds, u_int nfds, \
+				    const struct timespec *ts, \
+				    const sigset_t *set); }
+546	AUE_FUTIMES	STD	{ int futimens(int fd, \
+				    struct timespec *times); }
+547	AUE_FUTIMESAT	STD	{ int utimensat(int fd, \
+				    char *path, \
+				    struct timespec *times, int flag); }
+;548	AUE_NULL	STD	{ int numa_getaffinity(cpuwhich_t which, \
+;				    id_t id, \
+;				    struct vm_domain_policy_entry *policy); }
+;549	AUE_NULL	STD	{ int numa_setaffinity(cpuwhich_t which, \
+;				    id_t id, \
+;				    const struct vm_domain_policy_entry *policy); }
+;
+; Please copy any additions and changes to the following compatability tables:
+; sys/compat/freebsd32/syscalls.master
--- /dev/null
+++ b/support/syscall-gen/syscalls+linux.master
@@ -1,0 +1,515 @@
+ $FreeBSD: releng/11.0/sys/amd64/linux/syscalls.master 303005 2016-07-18 16:34:11Z dchagin $
+
+;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
+; System call name/number master file (or rather, slave, from LINUX).
+; Processed to create linux_sysent.c, linux_proto.h and linux_syscall.h.
+
+; Columns: number audit type nargs name alt{name,tag,rtyp}/comments
+;	number	system call number, must be in order
+;	audit	the audit event associated with the system call
+;		A value of AUE_NULL means no auditing, but it also means that
+;		there is no audit event for the call at this time. For the
+;		case where the event exists, but we don't want auditing, the
+;		event should be #defined to AUE_NULL in audit_kevents.h.
+;	type	one of STD, OBSOL, UNIMPL
+;	name	psuedo-prototype of syscall routine
+;		If one of the following alts is different, then all appear:
+;	altname	name of system call if different
+;	alttag	name of args struct tag if different from [o]`name'"_args"
+;	altrtyp	return type if not int (bogus - syscalls always return int)
+;		for UNIMPL/OBSOL, name continues with comments
+
+; types:
+;	STD	always included
+;	OBSOL	obsolete, not included in system, only specifies name
+;	UNIMPL	not implemented, placeholder only
+
+#include <sys/param.h>
+#include <sys/sysent.h>
+#include <sys/sysproto.h>
+#include <compat/linux/linux_sysproto.h>
+#include <amd64/linux/linux.h>
+#include <amd64/linux/linux_proto.h>
+
+; Isn't pretty, but there seems to be no other way to trap nosys
+#define	nosys	linux_nosys
+
+; #ifdef's, etc. may be included, and are copied to the output files.
+
+0	AUE_NULL	NOPROTO	{ int read(int fd, char *buf, \
+				    u_int nbyte); }
+1	AUE_NULL	NOPROTO	{ int write(int fd, char *buf, \
+				    u_int nbyte); }
+2	AUE_OPEN_RWTC	STD	{ int linux_open(char *path, l_int flags, \
+				    l_int mode); }
+3	AUE_CLOSE	NOPROTO	{ int close(int fd); }
+4	AUE_STAT	STD	{ int linux_newstat(char *path, \
+				    struct l_newstat *buf); }
+5	AUE_FSTAT	STD	{ int linux_newfstat(l_uint fd, \
+				    struct l_newstat *buf); }
+6	AUE_LSTAT	STD	{ int linux_newlstat(char *path, \
+				    struct l_newstat *buf); }
+7	AUE_POLL	NOPROTO	{ int poll(struct pollfd *fds, u_int nfds, \
+				    int timeout); }
+8	AUE_LSEEK	STD	{ int linux_lseek(l_uint fdes, l_off_t off, \
+				    l_int whence); }
+9	AUE_MMAP	STD	{ int linux_mmap2(l_ulong addr, l_ulong len, \
+				    l_ulong prot, l_ulong flags, l_ulong fd, \
+				    l_ulong pgoff); }
+10	AUE_MPROTECT	STD	{ int linux_mprotect(caddr_t addr, int len, \
+				    int prot); }
+11	AUE_MUNMAP	NOPROTO	{ int munmap(caddr_t addr, int len); }
+12	AUE_NULL	STD	{ int linux_brk(l_ulong dsend); }
+13	AUE_NULL	STD	{ int linux_rt_sigaction(l_int sig, \
+				    l_sigaction_t *act, l_sigaction_t *oact, \
+				    l_size_t sigsetsize); }
+14	AUE_NULL	STD	{ int linux_rt_sigprocmask(l_int how, \
+				    l_sigset_t *mask, l_sigset_t *omask, \
+				    l_size_t sigsetsize); }
+15	AUE_NULL	STD	{ int linux_rt_sigreturn( \
+				    struct l_ucontext *ucp); }
+16	AUE_IOCTL	STD	{ int linux_ioctl(l_uint fd, l_uint cmd, \
+				    uintptr_t arg); }
+17	AUE_PREAD	STD	{ int linux_pread(l_uint fd, char *buf, \
+				    l_size_t nbyte, l_loff_t offset); }
+18	AUE_PWRITE	STD	{ int linux_pwrite(l_uint fd, char *buf, \
+				    l_size_t nbyte, l_loff_t offset); }
+19	AUE_READV	NOPROTO { int readv(int fd, struct iovec *iovp, \
+				    u_int iovcnt); }
+20	AUE_WRITEV	NOPROTO	{ int writev(int fd, struct iovec *iovp, \
+				    u_int iovcnt); }
+21	AUE_ACCESS	STD	{ int linux_access(char *path, l_int amode); }
+22	AUE_PIPE	STD	{ int linux_pipe(l_ulong *pipefds); }
+23	AUE_SELECT	STD	{ int linux_select(l_int nfds, \
+				    l_fd_set *readfds, l_fd_set *writefds, \
+				    l_fd_set *exceptfds, \
+				    struct l_timeval *timeout); }
+24	AUE_NULL	NOPROTO	{ int sched_yield(void); }
+25	AUE_NULL	STD	{ int linux_mremap(l_ulong addr, \
+				    l_ulong old_len, l_ulong new_len, \
+				    l_ulong flags, l_ulong new_addr); }
+26	AUE_MSYNC	STD	{ int linux_msync(l_ulong addr, \
+				    l_size_t len, l_int fl); }
+27	AUE_MINCORE	STD	{ int linux_mincore(l_ulong start, \
+				    l_size_t len, u_char *vec); }
+28	AUE_MADVISE	NOPROTO	{ int madvise(void *addr, size_t len, \
+				    int behav); }
+29	AUE_NULL	STD	{ int linux_shmget(l_key_t key, l_size_t size, \
+				    l_int shmflg); }
+30	AUE_NULL	STD	{ int linux_shmat(l_int shmid, char *shmaddr, \
+				    l_int shmflg); }
+31	AUE_NULL	STD	{ int linux_shmctl(l_int shmid, l_int cmd, \
+				    struct l_shmid_ds *buf); }
+32	AUE_DUP		NOPROTO	{ int dup(u_int fd); }
+33	AUE_DUP2	NOPROTO	{ int dup2(u_int from, u_int to); }
+34	AUE_NULL	STD	{ int linux_pause(void); }
+35	AUE_NULL	STD	{ int linux_nanosleep( \
+				    const struct l_timespec *rqtp, \
+				    struct l_timespec *rmtp); }
+36	AUE_GETITIMER	STD	{ int linux_getitimer(l_int which, \
+				    struct l_itimerval *itv); }
+37	AUE_NULL	STD	{ int linux_alarm(l_uint secs); }
+38	AUE_SETITIMER	STD	{ int linux_setitimer(l_int which, \
+				    struct l_itimerval *itv, \
+				    struct l_itimerval *oitv); }
+39	AUE_GETPID	STD	{ int linux_getpid(void); }
+40	AUE_SENDFILE	STD	{ int linux_sendfile(int out, int in, \
+				    l_long *offset, l_size_t count); }
+41	AUE_SOCKET	STD	{ int linux_socket(l_int domain, l_int type, \
+				    l_int protocol); }
+42	AUE_CONNECT	STD	{ int linux_connect(l_int s, l_uintptr_t name, \
+				    l_int namelen); }
+43	AUE_ACCEPT	STD	{ int linux_accept(l_int s, l_uintptr_t addr, \
+				    l_uintptr_t namelen); }
+44	AUE_SENDTO	STD	{ int linux_sendto(l_int s, l_uintptr_t msg, \
+				    l_int len, l_int flags, l_uintptr_t to, \
+				    l_int tolen); }
+45	AUE_RECVFROM	STD	{ int linux_recvfrom(l_int s, l_uintptr_t buf, \
+				    l_size_t len, l_int flags, l_uintptr_t from, \
+				    l_uintptr_t fromlen); }
+46	AUE_SENDMSG	STD	{ int linux_sendmsg(l_int s, l_uintptr_t msg, \
+				    l_int flags); }
+47	AUE_RECVMSG	STD	{ int linux_recvmsg(l_int s, l_uintptr_t msg, \
+				    l_int flags); }
+48	AUE_NULL	STD	{ int linux_shutdown(l_int s, l_int how); }
+49	AUE_BIND	STD	{ int linux_bind(l_int s, l_uintptr_t name, \
+				    l_int namelen); }
+50	AUE_LISTEN	STD	{ int linux_listen(l_int s, l_int backlog); }
+51	AUE_GETSOCKNAME	STD	{ int linux_getsockname(l_int s, \
+				    l_uintptr_t addr, l_uintptr_t namelen); }
+52	AUE_GETPEERNAME	STD	{ int linux_getpeername(l_int s, \
+				    l_uintptr_t addr, l_uintptr_t namelen); }
+53	AUE_SOCKETPAIR	STD	{ int linux_socketpair(l_int domain, \
+				    l_int type, l_int protocol, l_uintptr_t rsv); }
+54	AUE_SETSOCKOPT	STD	{ int linux_setsockopt(l_int s, l_int level, \
+				    l_int optname, l_uintptr_t optval, \
+				    l_int optlen); }
+55	AUE_GETSOCKOPT	STD	{ int linux_getsockopt(l_int s, l_int level, \
+				    l_int optname, l_uintptr_t optval, \
+				    l_uintptr_t optlen); }
+56	AUE_RFORK	STD	{ int linux_clone(l_int flags, void *stack, \
+				    void *parent_tidptr, void * child_tidptr, void *tls ); }
+57	AUE_FORK	STD	{ int linux_fork(void); }
+58	AUE_VFORK	STD	{ int linux_vfork(void); }
+59	AUE_EXECVE	STD	{ int linux_execve(char *path, char **argp, \
+				    char **envp); }
+60	AUE_EXIT	STD	{ void linux_exit(int rval); }
+61	AUE_WAIT4	STD	{ int linux_wait4(l_pid_t pid, \
+				    l_int *status, l_int options, \
+				    struct rusage *rusage); }
+62	AUE_KILL	STD	{ int linux_kill(l_int pid, l_int signum); }
+63	AUE_NULL	STD	{ int linux_newuname( \
+				    struct l_new_utsname *buf); }
+64	AUE_NULL	STD	{ int linux_semget(l_key_t key, \
+				    l_int nsems, l_int semflg); }
+65	AUE_NULL	STD	{ int linux_semop(l_int semid, \
+				    struct l_sembuf *tsops, l_uint nsops); }
+66	AUE_NULL	STD	{ int linux_semctl(l_int semid, \
+				    l_int semnum, l_int cmd, union l_semun arg); }
+67	AUE_NULL	STD	{ int linux_shmdt(char *shmaddr); }
+68	AUE_NULL	STD	{ int linux_msgget(l_key_t key, l_int msgflg); }
+69	AUE_NULL	STD	{ int linux_msgsnd(l_int msqid, \
+				    struct l_msgbuf *msgp, l_size_t msgsz, \
+				    l_int msgflg); }
+70	AUE_NULL	STD	{ int linux_msgrcv(l_int msqid, \
+				    struct l_msgbuf *msgp, l_size_t msgsz, \
+				    l_long msgtyp, l_int msgflg); }
+71	AUE_NULL	STD	{ int linux_msgctl(l_int msqid, l_int cmd, \
+				    struct l_msqid_ds *buf); }
+72	AUE_FCNTL	STD	{ int linux_fcntl(l_uint fd, l_uint cmd, \
+				    l_ulong arg); }
+73	AUE_FLOCK	NOPROTO	{ int flock(int fd, int how); }
+74	AUE_FSYNC	NOPROTO	{ int fsync(int fd); }
+75	AUE_NULL	STD	{ int linux_fdatasync(l_uint fd); }
+76	AUE_TRUNCATE	STD	{ int linux_truncate(char *path, \
+				    l_ulong length); }
+77	AUE_FTRUNCATE	STD	{ int linux_ftruncate(l_int fd, l_long length); }
+78	AUE_GETDIRENTRIES	STD { int linux_getdents(l_uint fd, void *dent, \
+				    l_uint count); }
+79	AUE_GETCWD	STD	{ int linux_getcwd(char *buf, \
+				    l_ulong bufsize); }
+80	AUE_CHDIR	STD	{ int linux_chdir(char *path); }
+81	AUE_FCHDIR	NOPROTO	{ int fchdir(int fd); }
+82	AUE_RENAME	STD	{ int linux_rename(char *from, char *to); }
+83	AUE_MKDIR	STD	{ int linux_mkdir(char *path, l_int mode); }
+84	AUE_RMDIR	STD	{ int linux_rmdir(char *path); }
+85	AUE_CREAT	STD	{ int linux_creat(char *path, \
+				    l_int mode); }
+86	AUE_LINK	STD	{ int linux_link(char *path, char *to); }
+87	AUE_UNLINK	STD	{ int linux_unlink(char *path); }
+88	AUE_SYMLINK	STD	{ int linux_symlink(char *path, char *to); }
+89	AUE_READLINK	STD	{ int linux_readlink(char *name, char *buf, \
+				    l_int count); }
+90	AUE_CHMOD	STD	{ int linux_chmod(char *path, \
+				    l_mode_t mode); }
+91	AUE_FCHMOD	NOPROTO	{ int fchmod(int fd, int mode); }
+92	AUE_LCHOWN	STD	{ int linux_chown(char *path, \
+				    l_uid_t uid, l_gid_t gid); }
+93	AUE_FCHOWN	NOPROTO	{ int fchown(int fd, int uid, int gid); }
+94	AUE_LCHOWN	STD	{ int linux_lchown(char *path, l_uid_t uid, \
+				    l_gid_t gid); }
+95	AUE_UMASK	NOPROTO	{ int umask(int newmask); }
+96	AUE_NULL	NOPROTO	{ int gettimeofday(struct l_timeval *tp, \
+				    struct timezone *tzp); }
+97	AUE_GETRLIMIT	STD	{ int linux_getrlimit(l_uint resource, \
+				    struct l_rlimit *rlim); }
+98	AUE_GETRUSAGE	NOPROTO	{ int getrusage(int who, struct rusage *rusage); }
+99	AUE_NULL	STD	{ int linux_sysinfo(struct l_sysinfo *info); }
+100	AUE_NULL	STD	{ int linux_times(struct l_times_argv *buf); }
+101	AUE_PTRACE	STD	{ int linux_ptrace(l_long req, l_long pid, \
+				    l_long addr, l_long data); }
+102	AUE_GETUID	STD	{ int linux_getuid(void); }
+103	AUE_NULL	STD	{ int linux_syslog(l_int type, char *buf, \
+				    l_int len); }
+104	AUE_GETGID	STD	{ int linux_getgid(void); }
+105	AUE_SETUID	NOPROTO	{ int setuid(uid_t uid); }
+106	AUE_SETGID	NOPROTO	{ int setgid(gid_t gid); }
+107	AUE_GETEUID	NOPROTO	{ int geteuid(void); }
+108	AUE_GETEGID	NOPROTO	{ int getegid(void); }
+109	AUE_SETPGRP	NOPROTO	{ int setpgid(int pid, int pgid); }
+110	AUE_GETPPID	STD	{ int linux_getppid(void); }
+111	AUE_GETPGRP	NOPROTO	{ int getpgrp(void); }
+112	AUE_SETSID	NOPROTO	{ int setsid(void); }
+113	AUE_SETREUID	NOPROTO	{ int setreuid(uid_t ruid, uid_t euid); }
+114	AUE_SETREGID	NOPROTO	{ int setregid(gid_t rgid, gid_t egid); }
+115	AUE_GETGROUPS	STD	{ int linux_getgroups(l_int gidsetsize, \
+				    l_gid_t *grouplist); }
+116	AUE_SETGROUPS	STD	{ int linux_setgroups(l_int gidsetsize, \
+				    l_gid_t *grouplist); }
+117	AUE_SETRESUID	NOPROTO	{ int setresuid(uid_t ruid, uid_t euid, \
+				    uid_t suid); }
+118	AUE_GETRESUID	NOPROTO	{ int getresuid(uid_t *ruid, uid_t *euid, \
+				    uid_t *suid); }
+119	AUE_SETRESGID	NOPROTO	{ int setresgid(gid_t rgid, gid_t egid, \
+				    gid_t sgid); }
+120	AUE_GETRESGID	NOPROTO	{ int getresgid(gid_t *rgid, gid_t *egid, \
+				    gid_t *sgid); }
+121	AUE_GETPGID	NOPROTO	{ int getpgid(int pid); }
+122	AUE_SETFSUID	STD	{ int linux_setfsuid(l_uid_t uid); }
+123	AUE_SETFSGID	STD	{ int linux_setfsgid(l_gid_t gid); }
+124	AUE_GETSID	STD	{ int linux_getsid(l_pid_t pid); }
+125	AUE_CAPGET	STD	{ int linux_capget(struct l_user_cap_header *hdrp, \
+				    struct l_user_cap_data *datap); }
+126	AUE_CAPSET	STD	{ int linux_capset(struct l_user_cap_header *hdrp, \
+				    struct l_user_cap_data *datap); }
+127	AUE_NULL	STD	{ int linux_rt_sigpending(l_sigset_t *set, \
+				    l_size_t sigsetsize); }
+128	AUE_NULL	STD	{ int linux_rt_sigtimedwait(l_sigset_t *mask, \
+				    l_siginfo_t *ptr, \
+				    struct l_timeval *timeout, \
+				    l_size_t sigsetsize); }
+129	AUE_NULL	STD	{ int linux_rt_sigqueueinfo(l_pid_t pid, l_int sig, \
+				    l_siginfo_t *info); }
+130	AUE_NULL	STD	{ int linux_rt_sigsuspend( \
+				    l_sigset_t *newset, \
+				    l_size_t sigsetsize); }
+131	AUE_NULL	STD	{ int linux_sigaltstack(l_stack_t *uss, \
+				    l_stack_t *uoss); }
+132	AUE_UTIME	STD	{ int linux_utime(char *fname, \
+				    struct l_utimbuf *times); }
+133	AUE_MKNOD	STD	{ int linux_mknod(char *path, l_int mode, \
+				    l_dev_t dev); }
+134	AUE_USELIB	UNIMPL	uselib
+135	AUE_PERSONALITY	STD	{ int linux_personality(l_uint per); }
+136	AUE_NULL	STD	{ int linux_ustat(l_dev_t dev, \
+				    struct l_ustat *ubuf); }
+137	AUE_STATFS	STD	{ int linux_statfs(char *path, \
+				    struct l_statfs_buf *buf); }
+138	AUE_FSTATFS	STD	{ int linux_fstatfs(l_uint fd, \
+				    struct l_statfs_buf *buf); }
+139	AUE_NULL	STD	{ int linux_sysfs(l_int option, \
+				    l_ulong arg1, l_ulong arg2); }
+140	AUE_GETPRIORITY	STD	{ int linux_getpriority(int which, int who); }
+141	AUE_SETPRIORITY	NOPROTO	{ int setpriority(int which, int who, \
+				    int prio); }
+142	AUE_SCHED_SETPARAM	STD	{ int linux_sched_setparam(l_pid_t pid, \
+				    struct sched_param *param); }
+143	AUE_SCHED_GETPARAM	STD	{ int linux_sched_getparam(l_pid_t pid, \
+				    struct sched_param *param); }
+144	AUE_SCHED_SETSCHEDULER	STD { int linux_sched_setscheduler( \
+				    l_pid_t pid, l_int policy, \
+				    struct sched_param *param); }
+145	AUE_SCHED_GETSCHEDULER	STD { int linux_sched_getscheduler( \
+				    l_pid_t pid); }
+146	AUE_SCHED_GET_PRIORITY_MAX	STD { int linux_sched_get_priority_max( \
+				    l_int policy); }
+147	AUE_SCHED_GET_PRIORITY_MIN	STD { int linux_sched_get_priority_min( \
+				    l_int policy); }
+148	AUE_SCHED_RR_GET_INTERVAL	STD { int linux_sched_rr_get_interval(l_pid_t pid, \
+				    struct l_timespec *interval); }
+149	AUE_MLOCK	NOPROTO	{ int mlock(const void *addr, size_t len); }
+150	AUE_MUNLOCK	NOPROTO	{ int munlock(const void *addr, size_t len); }
+151	AUE_MLOCKALL	NOPROTO	{ int mlockall(int how); }
+152	AUE_MUNLOCKALL	NOPROTO	{ int munlockall(void); }
+153	AUE_NULL	STD	{ int linux_vhangup(void); }
+154	AUE_NULL	UNIMPL	modify_ldt
+155	AUE_PIVOT_ROOT	STD	{ int linux_pivot_root(void); }
+156	AUE_SYSCTL	STD	{ int linux_sysctl( \
+				    struct l___sysctl_args *args); }
+157	AUE_PRCTL	STD	{ int linux_prctl(l_int option, l_uintptr_t arg2, \
+				    l_uintptr_t arg3, l_uintptr_t arg4, \
+				    l_uintptr_t arg5); }
+158	AUE_PRCTL	STD	{ int linux_arch_prctl(l_int code, l_ulong addr); }
+159	AUE_ADJTIME	STD	{ int linux_adjtimex(void); }
+160	AUE_SETRLIMIT	STD	{ int linux_setrlimit(l_uint resource, \
+				    struct l_rlimit *rlim); }
+161	AUE_CHROOT	NOPROTO	{ int chroot(char *path); }
+162	AUE_SYNC	NOPROTO	{ int sync(void); }
+163	AUE_ACCT	NOPROTO	{ int acct(char *path); }
+164	AUE_SETTIMEOFDAY	NOPROTO	{ int settimeofday(struct l_timeval *tv, struct timezone *tzp); }
+165	AUE_MOUNT	STD	{ int linux_mount(char *specialfile, \
+				    char *dir, char *filesystemtype, \
+				    l_ulong rwflag, void *data); }
+166	AUE_UMOUNT	STD	{ int linux_umount(char *path, l_int flags); }
+167	AUE_SWAPON	NOPROTO	{ int swapon(char *name); }
+168	AUE_SWAPOFF	STD	{ int linux_swapoff(void); }
+169	AUE_REBOOT	STD	{ int linux_reboot(l_int magic1, \
+				    l_int magic2, l_uint cmd, void *arg); }
+170	AUE_SYSCTL	STD	{ int linux_sethostname(char *hostname, \
+				    l_uint len); }
+171	AUE_SYSCTL	STD	{ int linux_setdomainname(char *name, \
+				    l_int len); }
+172	AUE_NULL	STD	{ int linux_iopl(l_uint level); }
+173	AUE_NULL	UNIMPL	ioperm
+174	AUE_NULL	STD	{ int linux_create_module(void); }
+175	AUE_NULL	STD	{ int linux_init_module(void); }
+176	AUE_NULL	STD	{ int linux_delete_module(void); }
+177	AUE_NULL	STD	{ int linux_get_kernel_syms(void); }
+178	AUE_NULL	STD	{ int linux_query_module(void); }
+179	AUE_QUOTACTL	STD	{ int linux_quotactl(void); }
+180	AUE_NULL	STD	{ int linux_nfsservctl(void); }
+181	AUE_GETPMSG	STD	{ int linux_getpmsg(void); }
+182	AUE_PUTPMSG	STD	{ int linux_putpmsg(void); }
+183	AUE_NULL	STD	{ int linux_afs_syscall(void); }
+184	AUE_NULL	STD	{ int linux_tuxcall(void); }
+185	AUE_NULL	STD	{ int linux_security(void); }
+186	AUE_NULL	STD	{ int linux_gettid(void); }
+187	AUE_NULL	UNIMPL	linux_readahead
+188	AUE_NULL	STD	{ int linux_setxattr(void); }
+189	AUE_NULL	STD	{ int linux_lsetxattr(void); }
+190	AUE_NULL	STD	{ int linux_fsetxattr(void); }
+191	AUE_NULL	STD	{ int linux_getxattr(void); }
+192	AUE_NULL	STD	{ int linux_lgetxattr(void); }
+193	AUE_NULL	STD	{ int linux_fgetxattr(void); }
+194	AUE_NULL	STD	{ int linux_listxattr(void); }
+195	AUE_NULL	STD	{ int linux_llistxattr(void); }
+196	AUE_NULL	STD	{ int linux_flistxattr(void); }
+197	AUE_NULL	STD	{ int linux_removexattr(void); }
+198	AUE_NULL	STD	{ int linux_lremovexattr(void); }
+199	AUE_NULL	STD	{ int linux_fremovexattr(void); }
+200	AUE_NULL	STD	{ int linux_tkill(int tid, int sig); }
+201	AUE_NULL	STD	{ int linux_time(l_time_t *tm); }
+202	AUE_NULL	STD	{ int linux_sys_futex(void *uaddr, int op, int val, \
+				    struct l_timespec *timeout, void *uaddr2, int val3); }
+203	AUE_NULL	STD	{ int linux_sched_setaffinity(l_pid_t pid, l_uint len, \
+				    l_ulong *user_mask_ptr); }
+204	AUE_NULL	STD	{ int linux_sched_getaffinity(l_pid_t pid, l_uint len, \
+				    l_ulong *user_mask_ptr); }
+205	AUE_NULL	STD	{ int linux_set_thread_area(void); }
+206	AUE_NULL	UNIMPL	linux_io_setup
+207	AUE_NULL	UNIMPL	linux_io_destroy
+208	AUE_NULL	UNIMPL	linux_io_getevents
+209	AUE_NULL	UNIMPL	inux_io_submit
+210	AUE_NULL	UNIMPL	linux_io_cancel
+211	AUE_NULL	UNIMPL	linux_get_thread_area
+212	AUE_NULL	STD	{ int linux_lookup_dcookie(void); }
+213	AUE_NULL	STD	{ int linux_epoll_create(l_int size); }
+214	AUE_NULL	STD	{ int linux_epoll_ctl_old(void); }
+215	AUE_NULL	STD	{ int linux_epoll_wait_old(void); }
+216	AUE_NULL	STD	{ int linux_remap_file_pages(void); }
+217	AUE_GETDIRENTRIES	STD { int linux_getdents64(l_uint fd, \
+				    void *dirent, l_uint count); }
+218	AUE_NULL	STD	{ int linux_set_tid_address(int *tidptr); }
+219	AUE_NULL	UNIMPL	restart_syscall
+220	AUE_NULL	STD	{ int linux_semtimedop(void); }
+221	AUE_NULL	STD	{ int linux_fadvise64(int fd, l_loff_t offset, \
+				    l_size_t len, int advice); }
+222	AUE_NULL	STD	{ int linux_timer_create(clockid_t clock_id, \
+				    struct sigevent *evp, l_timer_t *timerid); }
+223	AUE_NULL	STD	{ int linux_timer_settime(l_timer_t timerid, l_int flags, \
+				    const struct itimerspec *new, struct itimerspec *old); }
+224	AUE_NULL	STD	{ int linux_timer_gettime(l_timer_t timerid, struct itimerspec *setting); }
+225	AUE_NULL	STD	{ int linux_timer_getoverrun(l_timer_t timerid); }
+226	AUE_NULL	STD	{ int linux_timer_delete(l_timer_t timerid); }
+227	AUE_CLOCK_SETTIME	STD	{ int linux_clock_settime(clockid_t which, struct l_timespec *tp); }
+228	AUE_NULL	STD	{ int linux_clock_gettime(clockid_t which, struct l_timespec *tp); }
+229	AUE_NULL	STD	{ int linux_clock_getres(clockid_t which, struct l_timespec *tp); }
+230	AUE_NULL	STD	{ int linux_clock_nanosleep(clockid_t which, int flags, \
+				    struct l_timespec *rqtp, struct l_timespec *rmtp); }
+231	AUE_EXIT	STD	{ int linux_exit_group(int error_code); }
+232	AUE_NULL	STD	{ int linux_epoll_wait(l_int epfd, struct epoll_event *events, \
+					l_int maxevents, l_int timeout); }
+233	AUE_NULL	STD	{ int linux_epoll_ctl(l_int epfd, l_int op, l_int fd, \
+					struct epoll_event *event); }
+234	AUE_NULL	STD	{ int linux_tgkill(int tgid, int pid, int sig); }
+235	AUE_UTIMES	STD	{ int linux_utimes(char *fname, \
+				    struct l_timeval *tptr); }
+236	AUE_NULL	UNIMPL	vserver
+237	AUE_NULL	STD	{ int linux_mbind(void); }
+238	AUE_NULL	STD	{ int linux_set_mempolicy(void); }
+239	AUE_NULL	STD	{ int linux_get_mempolicy(void); }
+240	AUE_NULL	STD	{ int linux_mq_open(void); }
+241	AUE_NULL	STD	{ int linux_mq_unlink(void); }
+242	AUE_NULL	STD	{ int linux_mq_timedsend(void); }
+243	AUE_NULL	STD	{ int linux_mq_timedreceive(void); }
+244	AUE_NULL	STD	{ int linux_mq_notify(void); }
+245	AUE_NULL	STD	{ int linux_mq_getsetattr(void); }
+246	AUE_NULL	STD	{ int linux_kexec_load(void); }
+247	AUE_WAIT6	STD	{ int linux_waitid(int idtype, l_pid_t id, \
+				    l_siginfo_t *info, int options, \
+				    struct rusage *rusage); }
+248	AUE_NULL	STD	{ int linux_add_key(void); }
+249	AUE_NULL	STD	{ int linux_request_key(void); }
+250	AUE_NULL	STD	{ int linux_keyctl(void); }
+251	AUE_NULL	STD	{ int linux_ioprio_set(void); }
+252	AUE_NULL	STD	{ int linux_ioprio_get(void); }
+253	AUE_NULL	STD	{ int linux_inotify_init(void); }
+254	AUE_NULL	STD	{ int linux_inotify_add_watch(void); }
+255	AUE_NULL	STD	{ int linux_inotify_rm_watch(void); }
+256	AUE_NULL	STD	{ int linux_migrate_pages(void); }
+257	AUE_OPEN_RWTC	STD	{ int linux_openat(l_int dfd, const char *filename, \
+				    l_int flags, l_int mode); }
+258	AUE_MKDIRAT	STD	{ int linux_mkdirat(l_int dfd, const char *pathname, \
+				    l_int mode); }
+259	AUE_MKNODAT	STD	{ int linux_mknodat(l_int dfd, const char *filename, \
+				    l_int mode, l_uint dev); }
+260	AUE_FCHOWNAT	STD	{ int linux_fchownat(l_int dfd, const char *filename, \
+				    l_uid_t uid, l_gid_t gid, l_int flag); }
+261	AUE_FUTIMESAT	STD	{ int linux_futimesat(l_int dfd, char *filename, \
+				    struct l_timeval *utimes); }
+262	AUE_FSTATAT	STD	{ int linux_newfstatat(l_int dfd, char *pathname, \
+				    struct l_stat64 *statbuf, l_int flag); }
+263	AUE_UNLINKAT	STD	{ int linux_unlinkat(l_int dfd, const char *pathname, \
+				    l_int flag); }
+264	AUE_RENAMEAT	STD	{ int linux_renameat(l_int olddfd, const char *oldname, \
+				    l_int newdfd, const char *newname); }
+265	AUE_LINKAT	STD	{ int linux_linkat(l_int olddfd, const char *oldname, \
+				    l_int newdfd, const char *newname, l_int flag); }
+266	AUE_SYMLINKAT	STD	{ int linux_symlinkat(const char *oldname, l_int newdfd, \
+				    const char *newname); }
+267	AUE_READLINKAT	STD	{ int linux_readlinkat(l_int dfd, const char *path, \
+				    char *buf, l_int bufsiz); }
+268	AUE_FCHMODAT	STD	{ int linux_fchmodat(l_int dfd, const char *filename, \
+				    l_mode_t mode); }
+269	AUE_FACCESSAT	STD	{ int linux_faccessat(l_int dfd, const char *filename, \
+				    l_int amode); }
+270	AUE_SELECT	STD	{ int linux_pselect6(l_int nfds,			\
+				    l_fd_set *readfds, l_fd_set *writefds, l_fd_set *exceptfds,	\
+				    struct l_timespec *tsp, l_uintptr_t *sig); }
+271	AUE_POLL	STD	{ int linux_ppoll(struct pollfd *fds, uint32_t nfds,	\
+				    struct l_timespec *tsp, l_sigset_t *sset, l_size_t ssize); }
+272	AUE_NULL	STD	{ int linux_unshare(void); }
+273	AUE_NULL	STD	{ int linux_set_robust_list(struct linux_robust_list_head *head, \
+				    l_size_t len); }
+274	AUE_NULL	STD	{ int linux_get_robust_list(l_int pid, \
+				    struct linux_robust_list_head **head, l_size_t *len); }
+275	AUE_NULL	STD	{ int linux_splice(void); }
+276	AUE_NULL	STD	{ int linux_tee(void); }
+277	AUE_NULL	STD	{ int linux_sync_file_range(void); }
+278	AUE_NULL	STD	{ int linux_vmsplice(void); }
+279	AUE_NULL	STD	{ int linux_move_pages(void); }
+280	AUE_FUTIMESAT	STD	{ int linux_utimensat(l_int dfd, const char *pathname, \
+					const struct l_timespec *times, l_int flags); }
+281     AUE_NULL        STD     { int linux_epoll_pwait(l_int epfd, struct epoll_event *events, \
+                                        l_int maxevents, l_int timeout, l_sigset_t *mask); }
+282	AUE_NULL	STD	{ int linux_signalfd(void); }
+283	AUE_NULL	STD	{ int linux_timerfd(void); }
+284	AUE_NULL	STD	{ int linux_eventfd(l_uint initval); }
+285	AUE_NULL	STD	{ int linux_fallocate(l_int fd, l_int mode, \
+				    l_loff_t offset, l_loff_t len); }
+286	AUE_NULL	STD	{ int linux_timerfd_settime(void); }
+287	AUE_NULL	STD	{ int linux_timerfd_gettime(void); }
+288	AUE_ACCEPT	STD	{ int linux_accept4(l_int s, l_uintptr_t addr, \
+				    l_uintptr_t namelen, int flags); }
+289	AUE_NULL	STD	{ int linux_signalfd4(void); }
+290	AUE_NULL	STD	{ int linux_eventfd2(l_uint initval, l_int flags); }
+291	AUE_NULL	STD	{ int linux_epoll_create1(l_int flags); }
+292	AUE_NULL	STD	{ int linux_dup3(l_int oldfd,		\
+				    l_int newfd, l_int flags); }
+293	AUE_NULL	STD	{ int linux_pipe2(l_int *pipefds, l_int flags); }
+294	AUE_NULL	STD	{ int linux_inotify_init1(void); }
+295	AUE_NULL	STD	{ int linux_preadv(void); }
+296	AUE_NULL	STD	{ int linux_pwritev(void); }
+297	AUE_NULL	STD	{ int linux_rt_tsigqueueinfo(void); }
+298	AUE_NULL	STD	{ int linux_perf_event_open(void); }
+299	AUE_NULL	STD	{ int linux_recvmmsg(l_int s,			\
+				    struct l_mmsghdr *msg, l_uint vlen,		\
+				    l_uint flags, struct l_timespec *timeout); }
+300	AUE_NULL	STD	{ int linux_fanotify_init(void); }
+301	AUE_NULL	STD	{ int linux_fanotify_mark(void); }
+302	AUE_NULL	STD	{ int linux_prlimit64(l_pid_t pid, l_uint resource, \
+				    struct rlimit *new, struct rlimit *old); }
+303	AUE_NULL	STD	{ int linux_name_to_handle_at(void); }
+304	AUE_NULL	STD	{ int linux_open_by_handle_at(void); }
+305	AUE_NULL	STD	{ int linux_clock_adjtime(void); }
+306	AUE_SYNC	STD	{ int linux_syncfs(l_int fd); }
+307	AUE_NULL	STD	{ int linux_sendmmsg(l_int s,			\
+				    struct l_mmsghdr *msg, l_uint vlen,		\
+				    l_uint flags); }
+308	AUE_NULL	STD	{ int linux_setns(void); }
+309	AUE_NULL	STD	{ int linux_process_vm_readv(void); }
+310	AUE_NULL	STD	{ int linux_process_vm_writev(void); }
+311	AUE_NULL	STD	{ int linux_kcmp(void); }
+312	AUE_NULL	STD	{ int linux_finit_module(void); }
+; please, keep this line at the end.
+313	AUE_NULL	UNIMPL	nosys
--- /dev/null
+++ b/support/syscall-gen/syscalls+openbsd.master
@@ -1,0 +1,566 @@
+;	$OpenBSD: syscalls.master,v 1.176 2017/04/28 13:50:55 mpi Exp $
+;	$NetBSD: syscalls.master,v 1.32 1996/04/23 10:24:21 mycroft Exp $
+
+;	@(#)syscalls.master	8.2 (Berkeley) 1/13/94
+
+; OpenBSD system call name/number "master" file.
+; (See syscalls.conf to see what it is processed into.)
+;
+; Fields: number type [type-dependent ...]
+;	number	system call number, must be in order
+;	type	one of the types described below, or one of the
+;		compatibility options defined in syscalls.conf
+;
+; types:
+;	INDIR	included, but don't define the syscall args structure,
+;		and allow it to be "really" varargs
+;	NOARGS	included, but don't define the syscall args structure
+;	NODEF	included, but don't define the syscall number
+;	NOLOCK	don't acquire the kernel lock when calling this syscall
+;	OBSOL	obsolete, not included in system
+;	STD	always included
+;	UNIMPL	unimplemented, not included in system
+;
+; The compat options are defined in the syscalls.conf file, and the
+; compat option name is prefixed to the syscall name.  Other than
+; that, they're like NODEF (for 'compat' options), or STD (for
+; 'libcompat' options).
+;
+; The type-dependent arguments are as follows:
+; For STD, NODEF, NOARGS, and compat syscalls:
+;	{ pseudo-proto } [alias]
+; For other syscalls:
+;	[comment]
+;
+; #ifdef's, etc. may be included, and are copied to the output files.
+; #include's are copied to the syscall switch definition file only.
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/signal.h>
+#include <sys/mount.h>
+#include <sys/syscallargs.h>
+#include <sys/poll.h>
+
+; Reserved/unimplemented system calls in the range 0-150 inclusive
+; are reserved for use in future Berkeley releases.
+; Additional system calls implemented in vendor and other
+; redistributions should be placed in the reserved range at the end
+; of the current calls.
+
+0	INDIR		{ int sys_syscall(int number, ...); }
+1	STD		{ void sys_exit(int rval); }
+2	STD		{ int sys_fork(void); }
+3	STD		{ ssize_t sys_read(int fd, void *buf, size_t nbyte); }
+4	STD		{ ssize_t sys_write(int fd, const void *buf, \
+			    size_t nbyte); }
+5	STD		{ int sys_open(const char *path, \
+			    int flags, ... mode_t mode); }
+6	STD		{ int sys_close(int fd); }
+7	STD NOLOCK	{ int sys_getentropy(void *buf, size_t nbyte); }
+8	STD		{ int sys___tfork(const struct __tfork *param, \
+			    size_t psize); }
+9	STD		{ int sys_link(const char *path, const char *link); }
+10	STD		{ int sys_unlink(const char *path); }
+11	STD		{ pid_t sys_wait4(pid_t pid, int *status, \
+			    int options, struct rusage *rusage); }
+12	STD		{ int sys_chdir(const char *path); }
+13	STD		{ int sys_fchdir(int fd); }
+14	STD		{ int sys_mknod(const char *path, mode_t mode, \
+			    dev_t dev); }
+15	STD		{ int sys_chmod(const char *path, mode_t mode); }
+16	STD		{ int sys_chown(const char *path, uid_t uid, \
+			    gid_t gid); }
+17	STD		{ int sys_obreak(char *nsize); } break
+18	STD NOLOCK	{ int sys_getdtablecount(void); }
+19	STD		{ int sys_getrusage(int who, \
+			    struct rusage *rusage); }
+20	STD NOLOCK	{ pid_t sys_getpid(void); }
+21	STD		{ int sys_mount(const char *type, const char *path, \
+			    int flags, void *data); }
+22	STD		{ int sys_unmount(const char *path, int flags); }
+23	STD		{ int sys_setuid(uid_t uid); }
+24	STD NOLOCK	{ uid_t sys_getuid(void); }
+25	STD NOLOCK	{ uid_t sys_geteuid(void); }
+#ifdef PTRACE
+26	STD		{ int sys_ptrace(int req, pid_t pid, caddr_t addr, \
+			    int data); }
+#else
+26	UNIMPL		ptrace
+#endif
+27	STD		{ ssize_t sys_recvmsg(int s, struct msghdr *msg, \
+			    int flags); }
+28	STD		{ ssize_t sys_sendmsg(int s, \
+			    const struct msghdr *msg, int flags); }
+29	STD		{ ssize_t sys_recvfrom(int s, void *buf, size_t len, \
+			    int flags, struct sockaddr *from, \
+			    socklen_t *fromlenaddr); }
+30	STD		{ int sys_accept(int s, struct sockaddr *name, \
+			    socklen_t *anamelen); }
+31	STD		{ int sys_getpeername(int fdes, struct sockaddr *asa, \
+			    socklen_t *alen); }
+32	STD		{ int sys_getsockname(int fdes, struct sockaddr *asa, \
+			    socklen_t *alen); }
+33	STD		{ int sys_access(const char *path, int amode); }
+34	STD		{ int sys_chflags(const char *path, u_int flags); }
+35	STD		{ int sys_fchflags(int fd, u_int flags); }
+36	STD		{ void sys_sync(void); }
+37	OBSOL		o58_kill
+38	STD		{ int sys_stat(const char *path, struct stat *ub); }
+39	STD		{ pid_t sys_getppid(void); }
+40	STD		{ int sys_lstat(const char *path, struct stat *ub); }
+41	STD		{ int sys_dup(int fd); }
+42	STD		{ int sys_fstatat(int fd, const char *path, \
+			    struct stat *buf, int flag); }
+43	STD NOLOCK	{ gid_t sys_getegid(void); }
+44	STD		{ int sys_profil(caddr_t samples, size_t size, \
+			    u_long offset, u_int scale); }
+#ifdef KTRACE
+45	STD		{ int sys_ktrace(const char *fname, int ops, \
+			    int facs, pid_t pid); }
+#else
+45	UNIMPL		ktrace
+#endif
+46	STD		{ int sys_sigaction(int signum, \
+			    const struct sigaction *nsa, \
+			    struct sigaction *osa); }
+47	STD NOLOCK	{ gid_t sys_getgid(void); }
+48	STD NOLOCK	{ int sys_sigprocmask(int how, sigset_t mask); }
+49	OBSOL		ogetlogin
+50	STD		{ int sys_setlogin(const char *namebuf); }
+#ifdef ACCOUNTING
+51	STD		{ int sys_acct(const char *path); }
+#else
+51	UNIMPL		acct
+#endif
+52	STD		{ int sys_sigpending(void); }
+53	STD		{ int sys_fstat(int fd, struct stat *sb); }
+54	STD		{ int sys_ioctl(int fd, \
+			    u_long com, ... void *data); }
+55	STD		{ int sys_reboot(int opt); }
+56	STD		{ int sys_revoke(const char *path); }
+57	STD		{ int sys_symlink(const char *path, \
+			    const char *link); }
+58	STD		{ ssize_t sys_readlink(const char *path, \
+			    char *buf, size_t count); }
+59	STD		{ int sys_execve(const char *path, \
+			    char * const *argp, char * const *envp); }
+60	STD		{ mode_t sys_umask(mode_t newmask); }
+61	STD		{ int sys_chroot(const char *path); }
+62	STD		{ int sys_getfsstat(struct statfs *buf, size_t bufsize, \
+			    int flags); }
+63	STD		{ int sys_statfs(const char *path, \
+			    struct statfs *buf); }
+64	STD		{ int sys_fstatfs(int fd, struct statfs *buf); }
+65	STD		{ int sys_fhstatfs(const fhandle_t *fhp, \
+			    struct statfs *buf); }
+66	STD		{ int sys_vfork(void); }
+67	STD NOLOCK	{ int sys_gettimeofday(struct timeval *tp, \
+			    struct timezone *tzp); }
+68	STD		{ int sys_settimeofday(const struct timeval *tv, \
+			    const struct timezone *tzp); }
+69	STD		{ int sys_setitimer(int which, \
+			    const struct itimerval *itv, \
+			    struct itimerval *oitv); }
+70	STD		{ int sys_getitimer(int which, \
+			    struct itimerval *itv); }
+71	STD		{ int sys_select(int nd, fd_set *in, fd_set *ou, \
+			    fd_set *ex, struct timeval *tv); }
+72	STD		{ int sys_kevent(int fd, \
+			    const struct kevent *changelist, int nchanges, \
+			    struct kevent *eventlist, int nevents, \
+			    const struct timespec *timeout); }
+73	STD		{ int sys_munmap(void *addr, size_t len); }
+74	STD		{ int sys_mprotect(void *addr, size_t len, \
+			    int prot); }
+75	STD		{ int sys_madvise(void *addr, size_t len, \
+			    int behav); }
+76	STD		{ int sys_utimes(const char *path, \
+			    const struct timeval *tptr); }
+77	STD		{ int sys_futimes(int fd, \
+			    const struct timeval *tptr); }
+78	STD		{ int sys_mincore(void *addr, size_t len, \
+			    char *vec); }
+79	STD NOLOCK	{ int sys_getgroups(int gidsetsize, \
+			    gid_t *gidset); }
+80	STD		{ int sys_setgroups(int gidsetsize, \
+			    const gid_t *gidset); }
+81	STD		{ int sys_getpgrp(void); }
+82	STD		{ int sys_setpgid(pid_t pid, pid_t pgid); }
+83	STD NOLOCK	{ int sys_futex(uint32_t *f, int op, int val, \
+			    const struct timespec *timeout, uint32_t *g); }
+84	STD		{ int sys_utimensat(int fd, const char *path, \
+			    const struct timespec *times, int flag); }
+85	STD		{ int sys_futimens(int fd, \
+			    const struct timespec *times); }
+86	STD		{ int sys_kbind(const struct __kbind *param, \
+			    size_t psize, int64_t proc_cookie); }
+87	STD NOLOCK	{ int sys_clock_gettime(clockid_t clock_id, \
+			    struct timespec *tp); }
+88	STD		{ int sys_clock_settime(clockid_t clock_id, \
+			    const struct timespec *tp); }
+89	STD NOLOCK	{ int sys_clock_getres(clockid_t clock_id, \
+			    struct timespec *tp); }
+90	STD		{ int sys_dup2(int from, int to); }
+91	STD		{ int sys_nanosleep(const struct timespec *rqtp, \
+			    struct timespec *rmtp); }
+92	STD		{ int sys_fcntl(int fd, int cmd, ... void *arg); }
+93	STD		{ int sys_accept4(int s, struct sockaddr *name, \
+			    socklen_t *anamelen, int flags); }
+94	STD		{ int sys___thrsleep(const volatile void *ident, \
+			    clockid_t clock_id, const struct timespec *tp, \
+			    void *lock, const int *abort); }
+95	STD		{ int sys_fsync(int fd); }
+96	STD		{ int sys_setpriority(int which, id_t who, int prio); }
+97	STD		{ int sys_socket(int domain, int type, int protocol); }
+98	STD		{ int sys_connect(int s, const struct sockaddr *name, \
+			    socklen_t namelen); }
+99	STD		{ int sys_getdents(int fd, void *buf, size_t buflen); }
+100	STD		{ int sys_getpriority(int which, id_t who); }
+101	STD		{ int sys_pipe2(int *fdp, int flags); }
+102	STD		{ int sys_dup3(int from, int to, int flags); }
+103	STD		{ int sys_sigreturn(struct sigcontext *sigcntxp); }
+104	STD		{ int sys_bind(int s, const struct sockaddr *name, \
+			    socklen_t namelen); }
+105	STD		{ int sys_setsockopt(int s, int level, int name, \
+			    const void *val, socklen_t valsize); }
+106	STD		{ int sys_listen(int s, int backlog); }
+107	STD		{ int sys_chflagsat(int fd, const char *path, \
+			    u_int flags, int atflags); }
+108	STD 		{ int sys_pledge(const char *request, const char **paths); }
+109	STD		{ int sys_ppoll(struct pollfd *fds, \
+			    u_int nfds, const struct timespec *ts, \
+			    const sigset_t *mask); }
+110	STD		{ int sys_pselect(int nd, fd_set *in, fd_set *ou, \
+			    fd_set *ex, const struct timespec *ts, \
+			    const sigset_t *mask); }
+111	STD		{ int sys_sigsuspend(int mask); }
+112	STD		{ int sys_sendsyslog(const void *buf, size_t nbyte, \
+			    int flags); }
+113	OBSOL		orecvmsg
+114	OBSOL		osendmsg
+115	OBSOL		vtrace
+116	OBSOL		t32_gettimeofday
+117	OBSOL		t32_getrusage
+118	STD		{ int sys_getsockopt(int s, int level, int name, \
+			    void *val, socklen_t *avalsize); }
+119	STD		{ int sys_thrkill(pid_t tid, int signum, void *tcb); }
+120	STD		{ ssize_t sys_readv(int fd, \
+			    const struct iovec *iovp, int iovcnt); }
+121	STD		{ ssize_t sys_writev(int fd, \
+			    const struct iovec *iovp, int iovcnt); }
+122	STD		{ int sys_kill(int pid, int signum); }
+123	STD		{ int sys_fchown(int fd, uid_t uid, gid_t gid); }
+124	STD		{ int sys_fchmod(int fd, mode_t mode); }
+125	OBSOL		orecvfrom
+126	STD		{ int sys_setreuid(uid_t ruid, uid_t euid); }
+127	STD		{ int sys_setregid(gid_t rgid, gid_t egid); }
+128	STD		{ int sys_rename(const char *from, const char *to); }
+129	OBSOL		otruncate
+130	OBSOL		oftruncate
+131	STD		{ int sys_flock(int fd, int how); }
+132	STD		{ int sys_mkfifo(const char *path, mode_t mode); }
+133	STD		{ ssize_t sys_sendto(int s, const void *buf, \
+			    size_t len, int flags, const struct sockaddr *to, \
+			    socklen_t tolen); }
+134	STD		{ int sys_shutdown(int s, int how); }
+135	STD		{ int sys_socketpair(int domain, int type, \
+			    int protocol, int *rsv); }
+136	STD		{ int sys_mkdir(const char *path, mode_t mode); }
+137	STD		{ int sys_rmdir(const char *path); }
+138	OBSOL		t32_utimes
+139	OBSOL		4.2 sigreturn
+140	STD		{ int sys_adjtime(const struct timeval *delta, \
+			    struct timeval *olddelta); }
+141	STD		{ int sys_getlogin_r(char *namebuf, u_int namelen); }
+142	OBSOL		ogethostid
+143	OBSOL		osethostid
+144	OBSOL		ogetrlimit
+145	OBSOL		osetrlimit
+146	OBSOL		okillpg
+147	STD		{ int sys_setsid(void); }
+148	STD		{ int sys_quotactl(const char *path, int cmd, \
+			    int uid, char *arg); }
+149	OBSOL		oquota
+150	OBSOL		ogetsockname
+
+; Syscalls 151-180 inclusive are reserved for vendor-specific
+; system calls.  (This includes various calls added for compatibility
+; with other Unix variants.)
+; Some of these calls are now supported by BSD...
+151	UNIMPL
+152	UNIMPL
+153	UNIMPL
+154	UNIMPL
+#if defined(NFSCLIENT) || defined(NFSSERVER)
+155	STD		{ int sys_nfssvc(int flag, void *argp); }
+#else
+155	UNIMPL
+#endif
+156	OBSOL		ogetdirentries
+157	OBSOL		statfs25
+158	OBSOL		fstatfs25
+159	UNIMPL
+160	UNIMPL
+161	STD		{ int sys_getfh(const char *fname, fhandle_t *fhp); }
+162	OBSOL		ogetdomainname
+163	OBSOL		osetdomainname
+164	UNIMPL		ouname
+165	STD		{ int sys_sysarch(int op, void *parms); }
+166	UNIMPL
+167	UNIMPL
+168	UNIMPL
+169	OBSOL		semsys10
+170	OBSOL		msgsys10
+171	OBSOL		shmsys10
+172	UNIMPL
+173	STD		{ ssize_t sys_pread(int fd, void *buf, \
+			  size_t nbyte, int pad, off_t offset); }
+174	STD		{ ssize_t sys_pwrite(int fd, const void *buf, \
+			  size_t nbyte, int pad, off_t offset); }
+175	UNIMPL		ntp_gettime
+176	UNIMPL		ntp_adjtime
+177	UNIMPL
+178	UNIMPL
+179	UNIMPL
+180	UNIMPL
+
+; Syscalls 181-199 are used by/reserved for BSD
+181	STD		{ int sys_setgid(gid_t gid); }
+182	STD		{ int sys_setegid(gid_t egid); }
+183	STD		{ int sys_seteuid(uid_t euid); }
+184	OBSOL		lfs_bmapv
+185	OBSOL		lfs_markv
+186	OBSOL		lfs_segclean
+187	OBSOL		lfs_segwait
+188	OBSOL		stat35
+189	OBSOL		fstat35
+190	OBSOL		lstat35
+191	STD		{ long sys_pathconf(const char *path, int name); }
+192	STD		{ long sys_fpathconf(int fd, int name); }
+193	STD		{ int sys_swapctl(int cmd, const void *arg, int misc); }
+194	STD		{ int sys_getrlimit(int which, \
+			    struct rlimit *rlp); }
+195	STD		{ int sys_setrlimit(int which, \
+			    const struct rlimit *rlp); }
+196	OBSOL		ogetdirentries48
+197	STD		{ void *sys_mmap(void *addr, size_t len, int prot, \
+			    int flags, int fd, long pad, off_t pos); }
+198	INDIR		{ quad_t sys___syscall(quad_t num, ...); }
+199	STD		{ off_t sys_lseek(int fd, int pad, off_t offset, \
+			    int whence); }
+200	STD		{ int sys_truncate(const char *path, int pad, \
+			    off_t length); }
+201	STD		{ int sys_ftruncate(int fd, int pad, off_t length); }
+202	STD		{ int sys_sysctl(const int *name, u_int namelen, \
+			    void *old, size_t *oldlenp, void *new, \
+			    size_t newlen); }
+203	STD		{ int sys_mlock(const void *addr, size_t len); }
+204	STD		{ int sys_munlock(const void *addr, size_t len); }
+205	UNIMPL		sys_undelete
+206	OBSOL		t32_futimes
+207	STD		{ pid_t sys_getpgid(pid_t pid); }
+208	OBSOL		nnpfspioctl
+209	STD		{ int sys_utrace(const char *label, const void *addr, \
+			    size_t len); }
+;
+; Syscalls 210-219 were reserved for dynamically loaded syscalls
+;
+210	UNIMPL
+211	UNIMPL
+212	UNIMPL
+213	UNIMPL
+214	UNIMPL
+215	UNIMPL
+216	UNIMPL
+217	UNIMPL
+218	UNIMPL
+219	UNIMPL
+; System calls 220-240 are reserved for use by OpenBSD
+#ifdef SYSVSEM
+220	UNIMPL
+221	STD		{ int sys_semget(key_t key, int nsems, int semflg); }
+#else
+220	UNIMPL		semctl
+221	UNIMPL		semget
+#endif
+222	OBSOL		semop35
+223	OBSOL		semconfig35
+#ifdef SYSVMSG
+224	UNIMPL
+225	STD		{ int sys_msgget(key_t key, int msgflg); }
+226	STD		{ int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
+			    int msgflg); }
+227	STD		{ int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
+			    long msgtyp, int msgflg); }
+#else
+224	UNIMPL		msgctl
+225	UNIMPL		msgget
+226	UNIMPL		msgsnd
+227	UNIMPL		msgrcv
+#endif
+#ifdef SYSVSHM
+228	STD		{ void *sys_shmat(int shmid, const void *shmaddr, \
+			    int shmflg); }
+229	UNIMPL
+230	STD		{ int sys_shmdt(const void *shmaddr); }
+#else
+228	UNIMPL		shmat
+229	UNIMPL		shmctl
+230	UNIMPL		shmdt
+#endif
+231	OBSOL		shmget35
+232	OBSOL		t32_clock_gettime
+233	OBSOL		t32_clock_settime
+234	OBSOL		t32_clock_getres
+235	UNIMPL		timer_create
+236	UNIMPL		timer_delete
+237	UNIMPL		timer_settime
+238	UNIMPL		timer_gettime
+239	UNIMPL		timer_getoverrun
+;
+; System calls 240-249 are reserved for other IEEE Std1003.1b syscalls
+;
+240	OBSOL		t32_nanosleep
+241	UNIMPL
+242	UNIMPL
+243	UNIMPL
+244	UNIMPL
+245	UNIMPL
+246	UNIMPL
+247	UNIMPL
+248	UNIMPL
+249	UNIMPL
+250	STD		{ int sys_minherit(void *addr, size_t len, \
+			    int inherit); }
+251	OBSOL		rfork
+252	STD		{ int sys_poll(struct pollfd *fds, \
+			    u_int nfds, int timeout); }
+253	STD NOLOCK	{ int sys_issetugid(void); }
+254	STD		{ int sys_lchown(const char *path, uid_t uid, gid_t gid); }
+255	STD		{ pid_t sys_getsid(pid_t pid); }
+256	STD		{ int sys_msync(void *addr, size_t len, int flags); }
+257	OBSOL		semctl35
+258	OBSOL		shmctl35
+259	OBSOL		msgctl35
+260	UNIMPL
+261	UNIMPL
+262	UNIMPL
+263	STD		{ int sys_pipe(int *fdp); }
+264	STD		{ int sys_fhopen(const fhandle_t *fhp, int flags); }
+265	UNIMPL
+266	UNIMPL
+267	STD		{ ssize_t sys_preadv(int fd, \
+			  const struct iovec *iovp, int iovcnt, \
+			  int pad, off_t offset); }
+268	STD		{ ssize_t sys_pwritev(int fd, \
+			  const struct iovec *iovp, int iovcnt, \
+			  int pad, off_t offset); }
+269	STD		{ int sys_kqueue(void); }
+270	OBSOL		t32_kevent
+271	STD		{ int sys_mlockall(int flags); }
+272	STD		{ int sys_munlockall(void); }
+273	UNIMPL		sys_getpeereid
+274	UNIMPL		sys_extattrctl
+275	UNIMPL		sys_extattr_set_file
+276	UNIMPL		sys_extattr_get_file
+277	UNIMPL		sys_extattr_delete_file
+278	UNIMPL		sys_extattr_set_fd
+279	UNIMPL		sys_extattr_get_fd
+280	UNIMPL		sys_extattr_delete_fd
+281	STD NOLOCK	{ int sys_getresuid(uid_t *ruid, uid_t *euid, \
+			    uid_t *suid); }
+282	STD		{ int sys_setresuid(uid_t ruid, uid_t euid, \
+			    uid_t suid); }
+283	STD NOLOCK	{ int sys_getresgid(gid_t *rgid, gid_t *egid, \
+			    gid_t *sgid); }
+284	STD		{ int sys_setresgid(gid_t rgid, gid_t egid, \
+			    gid_t sgid); }
+285	OBSOL		sys_omquery
+286	STD		{ void *sys_mquery(void *addr, size_t len, int prot, \
+			    int flags, int fd, long pad, off_t pos); }
+287	STD		{ int sys_closefrom(int fd); }
+288	STD		{ int sys_sigaltstack(const struct sigaltstack *nss, \
+			    struct sigaltstack *oss); }
+#ifdef SYSVSHM
+289	STD		{ int sys_shmget(key_t key, size_t size, int shmflg); }
+#else
+289	UNIMPL		shmget
+#endif
+#ifdef SYSVSEM
+290	STD		{ int sys_semop(int semid, struct sembuf *sops, \
+			    size_t nsops); }
+#else
+290    UNIMPL		semop
+#endif
+291	OBSOL		t32_stat
+292	OBSOL		t32_fstat
+293	OBSOL		t32_lstat
+294	STD		{ int sys_fhstat(const fhandle_t *fhp, \
+			    struct stat *sb); }
+#ifdef SYSVSEM
+295	STD		{ int sys___semctl(int semid, int semnum, int cmd, \
+			    union semun *arg); }
+#else
+295	UNIMPL
+#endif
+#ifdef SYSVSHM
+296	STD		{ int sys_shmctl(int shmid, int cmd, \
+			    struct shmid_ds *buf); }
+#else
+296	UNIMPL
+#endif
+#ifdef SYSVMSG
+297	STD		{ int sys_msgctl(int msqid, int cmd, \
+			    struct msqid_ds *buf); }
+#else
+297	UNIMPL
+#endif
+298	STD		{ int sys_sched_yield(void); }
+299	STD NOLOCK	{ pid_t sys_getthrid(void); }
+300	OBSOL		t32___thrsleep
+301	STD		{ int sys___thrwakeup(const volatile void *ident, \
+			    int n); }
+302	STD		{ void sys___threxit(pid_t *notdead); }
+303	STD		{ int sys___thrsigdivert(sigset_t sigmask, \
+			    siginfo_t *info, const struct timespec *timeout); }
+304	STD		{ int sys___getcwd(char *buf, size_t len); }
+305	STD		{ int sys_adjfreq(const int64_t *freq, \
+			    int64_t *oldfreq); }
+306	OBSOL		getfsstat53
+307	OBSOL		statfs53
+308	OBSOL		fstatfs53
+309	OBSOL		fhstatfs53
+310	STD		{ int sys_setrtable(int rtableid); }
+311	STD NOLOCK	{ int sys_getrtable(void); }
+312	OBSOL		t32_getdirentries
+313	STD		{ int sys_faccessat(int fd, const char *path, \
+			    int amode, int flag); }
+314	STD		{ int sys_fchmodat(int fd, const char *path, \
+			    mode_t mode, int flag); }
+315	STD		{ int sys_fchownat(int fd, const char *path, \
+			    uid_t uid, gid_t gid, int flag); }
+316	OBSOL		t32_fstatat
+317	STD		{ int sys_linkat(int fd1, const char *path1, int fd2, \
+			    const char *path2, int flag); }
+318	STD		{ int sys_mkdirat(int fd, const char *path, \
+			    mode_t mode); }
+319	STD		{ int sys_mkfifoat(int fd, const char *path, \
+			    mode_t mode); }
+320	STD		{ int sys_mknodat(int fd, const char *path, \
+			    mode_t mode, dev_t dev); }
+321	STD		{ int sys_openat(int fd, const char *path, int flags, \
+			    ... mode_t mode); }
+322	STD		{ ssize_t sys_readlinkat(int fd, const char *path, \
+			    char *buf, size_t count); }
+323	STD		{ int sys_renameat(int fromfd, const char *from, \
+			    int tofd, const char *to); }
+324	STD		{ int sys_symlinkat(const char *path, int fd, \
+			    const char *link); }
+325	STD		{ int sys_unlinkat(int fd, const char *path, \
+			    int flag); }
+326	OBSOL		t32_utimensat
+327	OBSOL		t32_futimens
+328	OBSOL		__tfork51
+329	STD NOLOCK	{ void sys___set_tcb(void *tcb); }
+330	STD NOLOCK	{ void *sys___get_tcb(void); }
--- /dev/null
+++ b/support/syscall-gen/types+freebsd-x64.frag
@@ -1,0 +1,793 @@
+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	= int		/* process id */
+type scno	= int64		/*syscall*/
+type fdopt	= int64		/* fd options */
+type fd		= int32		/* fd */
+type whence	= uint64	/* seek from whence */
+type mprot	= int64		/* memory protection */
+type mopt	= int64		/* memory mapping options */
+type socktype	= int64		/* socket type */
+type sockopt	= int64		/* socket option */
+type sockproto	= int64		/* socket protocol */
+type sockfam	= uint8		/* socket family */
+type filemode	= uint16
+type filetype	= uint8
+type fcntlcmd	= int64
+type umtxop	= int32
+type signo	= int32
+type sigflags	= int32
+type gid	= int32
+type uid	= int32
+type ffcounter	= int64
+type register	= int64
+type lwpid	= int32
+type rlim	= int64
+type socklen	= int32
+type cpuwhich	= int32
+type id		= int64
+type cpulevel	= int
+type cpusetid	= int
+type idtype	= int
+
+type acltype	= int
+type acltag	= uint32
+type aclperm	= uint32
+type aclenttype	= uint16
+type aclflag	= uint16
+type aclpermset = int#
+type aclflagset	= uint16#
+type clockid	= int32
+type dev	= int32
+
+type caddr	= byte#
+
+type clock = union
+	`Clockrealtime
+	`Clockrealtime_precise
+	`Clockrealtime_fast
+	`Clockmonotonic
+	`Clockmonotonic_precise     
+	`Clockmonotonic_fast
+	`Clockuptime
+	`Clockuptime_precise
+	`Clockuptime_fast
+	`Clockvirtual
+	`Clockprof
+	`Clocksecond
+;;
+
+type kevent = struct
+	ident	: intptr	/* identifier for this event */
+	filter	: int16		/* filter for event */
+	flags	: uint16
+	fflags	: int32
+	data	: intptr
+	udata	: void#		/* user : opaque data identifier */
+;;
+
+type pollfd = struct
+	fd	: fd
+	events	: uint16
+	revents	: uint16
+;;
+
+const Fdsetsize = 1024
+type fdset = struct
+	_mask	: uint64[Fdsetsize/64]
+;;
+
+type bintime = struct
+	sec	: time
+	frac	: uint64
+;;
+
+type mac = struct
+	buflen	: size
+	string	: byte#
+;;
+
+const Aclmaxent = 254
+type acl = struct
+	maxcnt	: uint
+	cnt	: uint
+	/* Will be required e.g. to implement NFSv4.1 ACL inheritance. */
+	spare	: int[4];
+	entry	: aclentry[Aclmaxent];
+;;
+
+type aclentry = struct
+	tag	: acltag
+	id	: uid
+	perm	: aclperm
+	/* NFSv4 entry type, "allow" or "deny".  Unused in POSIX.1e ACLs. */
+	etype	: aclenttype
+	/* NFSv4 ACL inheritance.  Unused in POSIX.1e ACLs. */
+	flags	: aclflag
+;;
+
+const _MC_FPFMT_NODEV	: int64 = 0x10000	/* device not present or configured */
+const _MC_FPFMT_XMM	: int64 = 0x10002
+const _MC_FPOWNED_NONE	: int64 = 0x20000	/* FP state not used */
+const _MC_FPOWNED_FPU	: int64 = 0x20001	/* FP state came from FPU */
+const _MC_FPOWNED_PCB	: int64 = 0x20002	/* FP state came from PCB */
+
+type mcontext = struct
+	/*
+	 * The definition of mcontext must match the layout of
+	 * struct sigcontext after the sc_mask member.  This is so
+	 * that we can support sigcontext and ucontext at the same
+	 * time.
+	 */
+	onstack	: register	/* XXX - sigcontext compat. */
+	rdi	: register		/* machine state (struct trapframe) */
+	rsi	: register
+	rdx	: register
+	rcx	: register
+	r8	: register
+	r9	: register
+	rax	: register
+	rbx	: register
+	rbp	: register
+	r10	: register
+	r11	: register
+	r12	: register
+	r13	: register
+	r14	: register
+	r15	: register
+	trapno	: uint32
+	fs	: uint16
+	gs	: uint16
+	addr	: register
+	flags	: uint32
+	es	: uint16
+	ds	: uint16
+	err	: register
+	rip	: register
+	cs	: register
+	rflags	: register
+	rsp	: register
+	ss	: register
+
+	len	: int64			/* sizeof(mcontext) */
+
+	fpfmt	: int64
+	ownedfp	: int64
+	/*
+	 * See <machine/fpu.h> for the internals of mc_fpstate[].
+	 */
+	/* FIXME: needs padding? */
+	fpstate	: uint64[64]// __aligned(16);
+
+	fsbase	: register
+	gsbase	: register
+
+	xfpustate	: register
+	xfpustate_len	: register
+
+	mc_spare : int64[4];
+;;
+
+type ucontext = struct
+	/*
+	 * Keep the order of the first two fields. Also,
+	 * keep them the first two fields in the structure.
+	 * This way we can have a union with struct
+	 * sigcontext and ucontext. This allows us to
+	 * support them both at the same time.
+	 * note: the union is not defined, though.
+	 */
+	sigmask		: sigset
+	mcontext	: mcontext
+	link		: ucontext#
+	sigstack	: sigstack
+
+	flags		: int
+	spare		: int[4]
+;;
+
+type ffclock_estimate = struct
+	update_time	: bintime	/* Time of last estimates update. */
+	update_ffcount	: ffcounter	/* Counter value at last update. */
+	leapsec_next	: ffcounter	/* Counter value of next leap second. */
+	period		: uint64	/* Estimate of counter period. */
+	errb_abs	: uint32	/* Bound on absolute clock error [ns]. */
+	errb_rate	: uint32	/* Bound on counter rate error [ps/s]. */
+	status		: uint32	/* Clock status. */
+	leapsec_total	: int16		/* All leap seconds seen so far. */
+	leapsec		: int8		/* Next leap second (in {-1,0,1}). */
+;;
+
+type sigset = struct
+	bits	: uint32[4]
+;;
+
+type sigaction = struct
+	handler	: byte#	/* code pointer */
+	flags	: sigflags
+	mask	: sigset
+;;
+
+type sigstack = struct
+	sp	: void#	/* signal stack base */
+	size	: size 	/* signal stack length */
+	flags	: int  	/* SS_DISABLE and/or SS_ONSTACK */
+;;
+
+type sigevent = struct
+	notify	: int;		/* Notification type */
+	signo	: int;		/* Signal number */
+	value	: uint64
+	_union	: uint64[8]	/* FIXME: replace with actual type */
+;;
+
+type siginfo = struct
+	signo	: int		/* signal number */
+	errno	: int		/* errno association */
+	/*
+	 * Cause of signal, one of the SI_ macros or signal-specific
+	 * values, i.e. one of the FPE_... values for SIGFPE.  This
+	 * value is equivalent to the second argument to an old-style
+	 * FreeBSD signal handler.
+	 */
+	code	: int		/* signal code */
+	pid	: pid			/* sending process */
+	uid	: uid			/* sender's ruid */
+	status	: int		/* exit value */
+	addr	: void#		/* faulting instruction */
+	val	: uint64
+	_spare1	: int64	/* FIXME: abi */
+	_spare2	: int[7]
+;;
+
+type waitstatus = union
+	`Waitfail int32
+	`Waitexit int32
+	`Waitsig  int32
+	`Waitstop int32
+;;
+
+type timezone = struct
+	minswest	: int	/* minutes west of Greenwich */
+	dsttime		: int	/* type of dst correction */
+;;
+
+type timespec = struct
+	sec	: uint64
+	nsec	: uint64 
+;;
+
+type timeval = struct
+	sec	: uint64
+	usec	: uint64
+;;
+
+type itimerval = struct
+	interval	: timeval
+	value		: timeval
+;;
+
+type itimerspec = struct
+	interval	: timespec
+	value		: timespec
+;;
+
+/*
+ * NTP daemon interface -- ntp_adjtime(2) -- used to discipline CPU clock
+ * oscillator and control/determine status.
+ *
+ * Note: The offset, precision and jitter members are in microseconds if
+ * STA_NANO is zero and nanoseconds if not.
+ */
+type timex = struct
+	modes 		: uint	/* clock mode bits (wo) */
+	offset		: int64			/* time offset (ns/us) (rw) */
+	freq		: int64			/* frequency offset (scaled PPM) (rw) */
+	maxerror	: int64		/* maximum error (us) (rw) */
+	esterror	: int64		/* estimated error (us) (rw) */
+	status		: int	   	/* clock status bits (rw) */
+	constant	: int64		/* poll interval (log2 s) (rw) */
+	precision	: int64		/* clock precision (ns/us) (ro) */
+	tolerance	: int64		/* clock frequency tolerance (scaled
+				 	 * PPM) (ro) */
+	/*
+	 * following : The read-only structure members are implemented
+	 * if : only the PPS signal discipline is configured in the
+	 * kernel. are : They included in all configurations to insure
+	 * portability.
+	 */
+	ppsfreq	: int64		/* PPS frequency (scaled PPM) (ro) */
+	jitter	: int64			/* PPS jitter (ns/us) (ro) */
+	shift	: int			/* interval duration (s) (shift) (ro) */
+	stabil	: int64			/* PPS stability (scaled PPM) (ro) */
+	jitcnt	: int64			/* jitter limit exceeded (ro) */
+	calcnt	: int64			/* calibration intervals (ro) */
+	errcnt	: int64			/* calibration errors (ro) */
+	stbcnt	: int64			/* stability limit exceeded (ro) */
+;;
+
+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 wrusage = struct
+	self	: rusage
+	child	: rusage
+;;
+
+type rlimit = struct
+	cur	: rlim
+	max	: rlim
+;;
+
+const Caprightsversion	= 0
+type caprights = struct
+	rights	: uint64[Caprightsversion + 2]
+;;
+
+type statbuf = struct
+	dev	: uint32 
+	ino	: uint32 
+	mode	: filemode
+	nlink	: uint16
+	uid	: uint32
+	gid	: uint32
+	rdev	: uint32
+	atime	: timespec
+	mtime	: timespec
+	ctime	: timespec
+	size	: int64
+	blocks	: int64
+	blksize	: uint32
+	flags	: uint32
+	gen	: uint32
+	lspare	: int32
+	birthtim	: timespec 
+;;
+
+const Mfsnamelen	= 16		/* length of type name including null */
+const Mnamelen		= 88		/* size of on/from name bufs */
+const Statfs_version	= 0x20030518	/* current version number */
+type statfs = struct
+	version		: uint32	/* structure version number */
+	kind		: uint32	/* type of filesystem */
+	flags		: uint64	/* copy of mount exported flags */
+	bsize		: uint64	/* filesystem fragment size */
+	iosize		: uint64	/* optimal transfer block size */
+	blocks		: uint64	/* total data blocks in filesystem */
+	bfree		: uint64	/* free blocks in filesystem */
+	bavail		: int64		/* free blocks avail to non-superuser */
+	files		: uint64	/* total file nodes in filesystem */
+	ffree		: int64		/* free nodes avail to non-superuser */
+	syncwrites	: uint64	/* count of sync writes since mount */
+	asyncwrites	: uint64	/* count of async writes since mount */
+	syncreads	: uint64	/* count of sync reads since mount */
+	asyncreads	: uint64	/* count of async reads since mount */
+	spare		: uint64[10]	/* unused spare */
+	namemax		: uint32	/* maximum filename length */
+	owner	  	: uid		/* user that mounted the filesystem */
+	fsid	  	: fsid		/* filesystem id */
+	charspare	: byte[80]	/* spare string space */
+	fstypename	: byte[Mfsnamelen]	/* filesystem type name */
+	mntfromname	: byte[Mnamelen]	/* mounted filesystem */
+	mntonname	: byte[Mnamelen]	/* directory on which mounted */
+;;
+
+type fhandle = struct
+	fsid	: fsid
+	fid	: fid
+;;
+
+type fsid = struct
+	val	: int32[2]
+;;
+
+const Maxfidsz = 16
+type fid = struct
+	len	: int16		/* length of data in bytes */
+	data0	: int16	/* force longword alignment */
+	data	: byte[Maxfidsz];	/* data (variable length) */
+;;
+
+type utsname = struct
+	system	: byte[256]
+	node	: byte[256] 
+	release	: byte[256]
+	version	: byte[256]
+	machine	: byte[256]
+;;
+
+
+type inaddr = struct
+	addr	: byte[4]
+;;
+
+type in6addr = struct
+	addr	: byte[16]
+;;
+
+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[112]
+;;	
+
+type dirent = struct
+	fileno	: uint32
+	reclen	: uint16
+	ftype	: filetype
+	namelen	: uint8
+	name	: byte[256]	
+;;	
+
+type rtprio = struct
+	rttype	: uint16
+	rtprio	: uint16
+;;
+
+type thrparam = struct
+	startfn	: void#	/* pointer to code for thread entry */
+	arg	: void#	/* pointer argument for thread entry */
+	stkbase	: byte#	/* stack base address */
+	stksz	: size	/* size of stack */
+	tlsbase	: byte#	/* base of thread local storage */
+	tlssz	: size	/* size of tls */
+	tid	: uint64#	/* place to store new tid */
+	ptid	: uint64#	/* place to store parent tid */
+	flags	: int32	/* flags for the thread */
+	rtp	: rtprio#	/* realtime priority */
+	spare	: void#[3]	/* padding */
+;;
+
+type iovec = struct
+	base	: byte#
+	len	: uint64
+;;
+
+const Maxcpu = 256
+type cpuset = struct
+	bits	: uint64[Maxcpu/64]
+;;
+
+type sched_param = struct
+	priority	: int
+;;
+
+const Jailapi =	2
+type jail =  struct
+	version	: uint32;
+	path	: byte#
+	hostname		: byte#
+	jailname		: byte#
+	ip4s	: uint32
+	ip6s	: uint32
+	ip4	: inaddr#
+	ip6	: in6addr#
+;;
+
+const Msgoob		= 0x1		/* process out-of-band data */
+const Msgpeek		= 0x2		/* peek at incoming message */
+const Msgdontroute	= 0x4		/* send without using routing tables */
+const Msgeor		= 0x8		/* data completes record */
+const Msgtrunc		= 0x10		/* data discarded before delivery */
+const Msgctrunc		= 0x20		/* control data lost before delivery */
+const Msgwaitall	= 0x40		/* wait for full request or error */
+const Msgnosignal	= 0x20000	/* do not generate SIGPIPE on EOF */
+const Msgdontwait	= 0x80		/* this message should be nonblocking */
+const Msgeof		= 0x100		/* data completes connection */
+const Msgnotification	= 0x2000        /* SCTP notification */
+const Msgnbio		= 0x4000	/* FIONBIO mode, used by fifofs */
+const Msgcompat      	= 0x8000	/* used in sendit() */
+const Msgcmsg_cloexec 	= 0x40000	/* make received fds close-on-exec */
+const Msgwaitforone	= 0x80000	/* for recvmmsg() */
+type msghdr = struct
+	name	: void#	/* optional address */
+	namelen	: int32	/* size of address */
+	iov	: iovec	/* scatter/gather array */
+	iovlen	: int	/* # elements in msg_iov */
+	ctl	: void#	/* ancillary data, see below */
+	ctllen	: int32	/* ancillary data buffer len */
+	flags	: int	/* flags on received message */
+;;
+
+type sf_hdtr = struct
+	hdr	: iovec#
+	hdrcnt	: int
+	trl	: iovec#
+	trlcnt	: int
+;;
+
+type aiocb = struct
+	fildes	: int		/* File descriptor */
+	offset	: off		/* File offset for I/O */
+	buf	: void# 	/* I/O buffer in process space */
+	nbytes	: size		/* Number of bytes for I/O */
+	__spare__ 	: int[2]
+	__spare2__	: void#
+	lio_opcode	: int		/* LIO opcode */
+	reqprio		: int		/* Request priority -- ignored */
+	_aiocb_private	: __aiocb_private
+	sigevent	: sigevent	/* Signal to deliver */
+;;
+
+type __aiocb_private = struct
+	status	: int64
+	error	: int64
+	kinfo	: void#
+;;
+
+const _Uuidnodesz = 6
+type uuid = struct
+	time_low			: uint32
+	time_mid			: uint16
+	time_hi_and_version		: uint16
+	clock_seq_hi_and_reserved	: uint8
+	clock_seq_low			: uint8
+	node				: uint8[_Uuidnodesz];
+;;
+
+/* 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
+
+const Oshlock	: fdopt = 0x0010	/* open with shared file lock */
+const Oexlock	: fdopt = 0x0020	/* open with exclusive file lock */
+const Oasync	: fdopt = 0x0040	/* signal pgrp when data ready */
+const Ofsync	: fdopt = 0x0080	/* synchronous writes */
+const Oexcl	: fdopt = 0x0800	/* error if already exists */
+const Ocloexec	: fdopt = 0x00100000
+
+/* 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
+
+/* 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 = 0x0400	/* timestamp received dgram traffic */
+const Sonosigpipe	: sockopt = 0x0800	/* no SIGPIPE from EPIPE */
+const Soacceptfilter	: sockopt = 0x1000	/* there is an accept filter */
+const Sobintime		: sockopt = 0x2000	/* timestamp received dgram traffic */
+const Sonooffload	: sockopt = 0x4000	/* socket cannot be offloaded */
+const Sonoddp		: sockopt = 0x8000	/* disable direct data placement */
+
+/* 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
+
+/* poll options */
+const Pollin		: uint16 = 0x0001	/* any readable data available */
+const Pollpri		: uint16 = 0x0002	/* OOB/Urgent readable data */
+const Pollout		: uint16 = 0x0004	/* file descriptor is writeable */
+const Pollrdnorm	: uint16 = 0x0040	/* non-OOB/URG data available */
+const Pollwrnorm	: uint16 = Pollout	/* no write type differentiation */
+const Pollrdband	: uint16 = 0x0080	/* OOB/Urgent readable data */
+const Pollwrband	: uint16 = 0x0100	/* OOB/Urgent data can be written */
+/* General FreeBSD extension (currently only supported for sockets): */
+const Pollinigneof	: uint16 = 0x2000	/* like POLLIN, except ignore EOF */
+/*
+* These events are set if they occur regardless of whether they were
+* requested.
+*/
+const Pollerr		: uint16 = 0x0008		/* some poll error occurred */
+const Pollhup		: uint16 = 0x0010		/* file descriptor was "hung up" */
+const Pollnval		: uint16 = 0x0020		/* requested events "invalid" */
+
+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 */
+const Fosetlkw	: fcntlcmd = 9		/* F_SETLK; wait if blocked */
+const Fdup2fd	: fcntlcmd = 10		/* duplicate file descriptor to arg */
+const Fgetlk	: fcntlcmd = 11		/* get record locking information */
+const Fsetlk	: fcntlcmd = 12		/* set record locking information */
+const Fsetlkw	: fcntlcmd = 13		/* F_SETLK; wait if blocked */
+const Fsetlk_remote	: fcntlcmd = 14		/* debugging support for remote locks */
+const Freadahead	: fcntlcmd = 15		/* read ahead */
+const Frdahead	: fcntlcmd = 16		/* Darwin compatible read ahead */
+const Fdupfd_cloexec	: fcntlcmd = 17		/* Like F_DUPFD, but FD_CLOEXEC is set */
+const Fdup2fd_cloexec	: fcntlcmd = 18		/* Like F_DUP2FD, but FD_CLOEXEC is set */
+
+/* return value for a failed mapping */
+const Mapbad	: byte# = (-1 : byte#)
+
+/* umtx ops */
+const Umtxlock	: umtxop = 0
+const Umtxunlock	: umtxop = 1
+const Umtxwait	: umtxop = 2
+const Umtxwake	: umtxop = 3
+const UmtxmtxTrylock	: umtxop = 4
+const Umtxmtxlock	: umtxop = 5
+const Umtxmtxunlock	: umtxop = 6
+const Umtxsetceiling	: umtxop = 7
+const Umtxcvwait	: umtxop = 8
+const Umtxcvsignal	: umtxop = 9
+const Umtxcvbroadcast	: umtxop = 10
+const Umtxwaituint	: umtxop = 11
+const Umtxrwrdlock	: umtxop = 12
+const Umtxrwwrlock	: umtxop = 13
+const Umtxrwunlock	: umtxop = 14
+const Umtxwaituintpriv	: umtxop = 15
+const Umtxwakepriv	: umtxop = 16
+const Umtxmutexwait	: umtxop = 17
+const Umtxsemwait	: umtxop = 19
+const Umtxsemwake	: umtxop = 20
+const Umtxnwakepriv	: umtxop = 21
+const Umtxmtxwake2	: umtxop = 22
+const Umtxmax	: umtxop = 23
+
+/* signal actions */
+const Saonstack		: sigflags = 0x0001	/* take signal on signal stack */
+const Sarestart		: sigflags = 0x0002	/* restart system call 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 keep zombies around */
+const Sasiginfo		: sigflags = 0x0040	/* signal handler with SA_SIGINFO args */
+
+/* signal numbers */
+const Sighup	: signo = 1	/* hangup */
+const Sigint	: signo = 2	/* interrupt */
+const Sigquit	: signo = 3	/* quit */
+const Sigill	: signo = 4	/* illegal instr. (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	/* non-existent system call invoked */
+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 if (tp->t_local&LTOSTOP) */
+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	/* reserved by thread library. */
+const Siglwp	: signo = Sigthr
+const Siglibrt	: signo = 33	/* reserved by real-time library. */
+
+extern const syscall : (sc:scno, args:... -> int64)
+extern var __cenvp : byte##
--- /dev/null
+++ b/support/syscall-gen/types+linux-x64.frag
@@ -1,0 +1,498 @@
+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 scno	= int64		/* syscall */
+
+/* processes/threads */
+type pid	= int	/* process id */
+type tid	= int	/* thread id */
+type cloneopt	= int64	/* options for clone(2) */
+
+/* file descriptor manipulation */
+type fdopt	= int64	/* fd options */
+type fd		= int32	/* fd */
+type whence	= uint64	/* seek from whence */
+type filemode	= uint32	/* file open mode */
+
+type mprot	= int64	/* memory protection */
+type mopt	= int64	/* memory mapping options */
+type socktype	= int64	/* socket type */
+type sockproto	= int32	/* socket protocol */
+type sockfam	= uint16	/* socket family */
+type sockopt	= int64
+type msgflags	= uint32
+type cmsgtype	= uint32
+
+type epollflags	= uint32
+type epollop	= uint32
+type epollevttype	= uint32
+
+type pollevt	= uint16
+
+type futexop	= uint32
+type signo	= int32
+type sigflags	= int64
+
+type fallocmode	= uint32
+
+type mfdflags	= uint32
+
+type clock = union
+	`Clockrealtime
+	`Clockmonotonic
+	`Clockproccpu
+	`Clockthreadcpu
+	`Clockmonotonicraw
+	`Clockrealtimecoarse
+	`Clockmonotoniccoarse
+	`Clockboottime
+	`Clockrealtimealarm
+	`Clockboottimealarm
+;;
+
+type waitstatus = union
+	`Waitexit int32
+	`Waitsig  int32
+	`Waitstop int32
+	`Waitfail int32
+;;
+
+type sigset = struct
+	bits	: uint32[2]
+;;
+
+type sigaction = struct
+	handler	: byte#	/* code pointer */
+	flags	: sigflags
+	restore	: byte#	/* code pointer */
+	mask	: sigset
+;;
+
+const Sipadsz = 128
+type siginfo = struct
+	signo	: int
+	errno	: int
+	code	: int
+
+	_pad	: int[Sipadsz]
+;;
+
+/* union { int, void* } */
+type sigval = struct
+	_pad	: void#
+;;
+
+const Sigevmaxsz = 64
+const Sigevpadsz = Sigevmaxsz / sizeof(int) - 4
+type sigevent = struct
+	value	: sigval
+	signo	: int
+	notify	: int
+	_pad	: int[Sigevpadsz]
+;;
+
+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 sched_param = struct
+	priority	: int
+;;
+
+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[...]	/* special case; zero length => unchecked indexing */
+;;
+
+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_in6 = struct
+	fam	: sockfam
+	port	: uint16
+	addr	: byte[16]
+	scope	: uint32
+;;
+
+type sockaddr_un = struct
+	fam	: sockfam
+	path	: byte[108]
+;;
+
+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
+;;
+
+type iovec = struct
+	base	: byte#
+	len	: uint64
+;;
+
+type semun = struct
+	__pad	: void#
+;;
+
+type msgbuf = struct
+	mtype	: int64
+	buf	: byte[...]
+;;
+
+type msghdr = struct
+	name		: sockaddr#
+	namelen		: int32
+	iov		: iovec#
+	iovlen		: uint64
+	control		: byte#
+	controllen	: uint64
+	flags		: msgflags
+;;
+
+type mmsghdr = struct
+	hdr	: msghdr
+	len	: uint32
+;;
+
+type cmsghdr = struct
+	len	: uint64
+	level	: sockproto
+	cmtype	: cmsgtype
+	data	: byte[...]
+;;
+
+type capuserheader = struct
+	version	: uint32
+	pid	: int
+;;
+
+type capuserdata = struct
+	effective	: uint32
+	permitted	: uint32
+	inheritable	: uint32
+;;
+
+/* clone options */
+const Clonesignal	: cloneopt = 0xff
+const Clonevm		: cloneopt = 0x100
+const Clonefs		: cloneopt = 0x200
+const Clonefiles	: cloneopt = 0x400
+const Clonesighand	: cloneopt = 0x800
+const Cloneptrace	: cloneopt = 0x2000
+const Clonevfork	: cloneopt = 0x4000
+const Cloneparent	: cloneopt = 0x8000
+const Clonethread	: cloneopt = 0x10000
+const Clonenewns	: cloneopt = 0x20000
+const Clonesysvsem	: cloneopt = 0x40000
+const Clonesettls	: cloneopt = 0x80000
+const Cloneparentsettid	: cloneopt = 0x100000
+const Clonechildcleartid: cloneopt = 0x200000
+const Clonedetached	: cloneopt = 0x400000
+const Cloneuntraced	: cloneopt = 0x800000
+const Clonechildsettid	: cloneopt = 0x1000000
+const Clonenewuts	: cloneopt = 0x4000000
+const Clonenewipc	: cloneopt = 0x8000000
+const Clonenewuser	: cloneopt = 0x10000000
+const Clonenewpid	: cloneopt = 0x20000000
+const Clonenewnet	: cloneopt = 0x40000000
+const Cloneio		: cloneopt = 0x80000000
+
+type ptregs = struct
+;;
+
+/* 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 Olarge	: fdopt = 0x8000
+const Odir	: fdopt = 0x10000
+const Onofollow	: fdopt = 0x20000
+const Onoatime	: fdopt = 0x40000
+const Ocloexec	: fdopt = 0x80000
+
+/* 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 */
+
+/* socket options */
+const Sodebug		: sockopt = 1
+const Soreuseaddr	: sockopt = 2
+const Sotype		: sockopt = 3
+const Soerror		: sockopt = 4
+const Sodontroute	: sockopt = 5
+const Sobroadcast	: sockopt = 6
+const Sosndbuf		: sockopt = 7
+const Sorcvbuf		: sockopt = 8
+const Sosndbufforce	: sockopt = 32
+const Sorcvbufforce	: sockopt = 33
+const Sokeepalive	: sockopt = 9
+const Sooobinline	: sockopt = 10
+const Sono_check	: sockopt = 11
+const Sopriority	: sockopt = 12
+const Solinger		: sockopt = 13
+const Sobsdcompat	: sockopt = 14
+const Soreuseport	: sockopt = 15
+const Sopasscred	: sockopt = 16
+const Sopeercred	: sockopt = 17
+const Sorcvlowat	: sockopt = 18
+const Sosndlowat	: sockopt = 19
+const Sorcvtimeo	: sockopt = 20
+const Sosndtimeo	: sockopt = 21
+
+/* socket option levels */
+const Solsocket		: sockproto = 1
+
+/* 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
+
+/* message flags */
+const Msgoob		: msgflags = 0x0001
+const Msgpeek		: msgflags = 0x0002
+const Msgdontroute	: msgflags = 0x0004
+const Msgctrunc		: msgflags = 0x0008
+const Msgtrunc		: msgflags = 0x0020
+const Msgeor		: msgflags = 0x0080
+const Msgwaitall	: msgflags = 0x0100
+const Msgnosignal	: msgflags = 0x4000
+
+/* ancillary data */
+const Scmrights		: cmsgtype = 1
+
+/* epoll flags */
+const Epollcloexec	: epollflags	= 0o2000000
+
+/* epoll ops */
+const Epollctladd	: epollop	= 1
+const Epollctlmod	: epollop	= 2
+const Epollctldel	: epollop	= 3
+
+/* 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
+
+/* futex ops */
+const Futexwait	: futexop = 0
+const Futexwake	: futexop = 1
+/* Futexfd: removed */
+const Futexrequeue	: futexop = 3
+const Futexcmprequeue	: futexop = 4
+const Futexwakeop	: futexop = 5
+const Futexlockpi	: futexop = 6
+const Futexunlockpi	: futexop = 7
+const Futextrylockpi	: futexop = 8
+const Futexwaitbitset	: futexop = 9
+const Futexwakebitset	: futexop = 10
+const Futexwaitrequeuepi	: futexop = 11
+const Futexcmprequeuepi	: futexop = 12
+
+const Futexpriv	: futexop = 128
+const Futexclockrt	: futexop = 256
+
+/* 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.  */
+const Pollerr	: pollevt = 0x008           /* Error condition.  */
+const Pollhup	: pollevt = 0x010           /* Hung up.  */
+const Pollnval	: pollevt = 0x020           /* Invalid polling request.  */
+
+/* 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 : byte#)
+
+/* signal flags */
+const Sanocldstop	: sigflags = 0x00000001
+const Sanocldwait	: sigflags = 0x00000002
+const Sasiginfo		: sigflags = 0x00000004
+const Sarestorer	: sigflags = 0x04000000
+const Saonstack		: sigflags = 0x08000000
+const Sarestart		: sigflags = 0x10000000
+const Sanodefer		: sigflags = 0x40000000
+const Saresethand	: sigflags = 0x80000000
+const Sanomask		: sigflags = Sanodefer
+const Saoneshot		: sigflags = Saresethand
+
+/* signal numbers */
+const Sighup	: signo = 1
+const Sigint	: signo = 2
+const Sigquit	: signo = 3
+const Sigill	: signo = 4
+const Sigtrap	: signo = 5
+const Sigabrt	: signo = 6
+const Sigiot	: signo = 6
+const Sigbus	: signo = 7
+const Sigfpe	: signo = 8
+const Sigkill	: signo = 9
+const Sigusr1	: signo = 10
+const Sigsegv	: signo = 11
+const Sigusr2	: signo = 12
+const Sigpipe	: signo = 13
+const Sigalrm	: signo = 14
+const Sigterm	: signo = 15
+const Sigstkflt	: signo = 16
+const Sigchld	: signo = 17
+const Sigcont	: signo = 18
+const Sigstop	: signo = 19
+const Sigtstp	: signo = 20
+const Sigttin	: signo = 21
+const Sigttou	: signo = 22
+const Sigurg	: signo = 23
+const Sigxcpu	: signo = 24
+const Sigxfsz	: signo = 25
+const Sigvtalrm	: signo = 26
+const Sigprof	: signo = 27
+const Sigwinch	: signo = 28
+const Sigio	: signo = 29
+const Sigpoll	: signo = Sigio
+
+/* fallocate mode */
+const Fallockeepsize		: fallocmode = 0x01
+const Fallocpunchhole		: fallocmode = 0x02
+const Fallocnohidestale		: fallocmode = 0x04
+const Falloccollapserange	: fallocmode = 0x08
+const Falloczerorange		: fallocmode = 0x10
+const Fallocinsertrange		: fallocmode = 0x20
+
+/* memfd flags */
+const Mfdcloexec	: mfdflags = 0x01
+const Mfdallowsealing	: mfdflags = 0x02
+
+/* exported values: initialized by start code */
+extern var __cenvp : byte##
+
--- /dev/null
+++ b/support/syscall-gen/types+openbsd:6.1-x64.frag
@@ -1,0 +1,396 @@
+type size	= int64	/* spans entire address space */
+type usize	= uint64	/* unsigned size */
+type off	= int64	/* file offsets */
+type intptr	= uint64/* can hold any pointer losslessly */
+type time	= int64	/* milliseconds since epoch */
+type pid	= int32	/* process id */
+type scno	= int64	/*syscall*/
+type fdopt	= int64	/* fd options */
+type fd		= int32	/* fd */
+type whence	= uint64	/* seek from whence */
+type mprot	= int64	/* memory protection */
+type mopt	= int64	/* memory mapping options */
+type socktype	= int64	/* socket type */
+type sockproto	= int64	/* socket protocol */
+type sockopt	= int32	/* socket option */
+type sockfam	= uint8	/* socket family */
+type filemode	= uint32
+type filetype	= uint8
+type fcntlcmd	= int64
+type signo	= int32
+type sigflags	= int32
+type sigset	= uint32
+type msg	= void
+
+type clock = union
+	`Clockrealtime
+	`Clockmonotonic
+	`Clockproccputime
+	`Clockthreadcputime
+	`Clockuptime
+;;
+
+type waitstatus = union
+	`Waitfail int32
+	`Waitexit int32
+	`Waitsig  int32
+	`Waitstop int32
+;;
+
+type timespec = struct
+	sec	: uint64
+	nsec	: uint64 
+;;
+
+type timeval = struct
+	sec	: uint64
+	usec	: uint64
+;;
+
+
+type pollfd = struct
+	fd      : fd
+	events  : uint16
+	revents : uint16
+;;
+
+type sigaction = struct
+	handler	: byte#	/* code pointer */
+	mask	: sigset
+	flags	: sigflags
+;;
+
+const Simaxsz	= 128
+const Sipad	= (Simaxsz / 4) - 3
+type siginfo = struct
+	signo	: int
+	code	: int
+	errno	: int
+	pad	: int[Sipad]
+;;
+
+type rusage = struct
+	utime	: timeval /* user time */
+	stime	: timeval /* system time */
+	maxrss	: uint64 /* max resident set size*/
+	ixrss	: uint64 /* shared text size */
+	idrss	: uint64 /* unshared data size */
+	isrss	: uint64 /* unshared stack size */
+	minflt	: uint64 /* page reclaims */
+	majflt	: uint64 /* page faults */
+	nswap	: uint64 /* swaps */
+	inblock	: uint64 /* block input ops */
+	oublock	: uint64 /* block output ops */
+	msgsnd	: uint64 /* messages sent */	
+	msgrcv	: uint64 /* messages received */
+	nsignals : uint64 /* signals received */
+	nvcsw	: uint64 /* voluntary context switches */
+	nivcsw	: uint64 /* involuntary context switches */
+;;
+
+type tforkparams = struct
+	tcb	: void#
+	tid	: pid#
+	stk	: byte#
+;;
+
+type statbuf = struct
+	mode	: filemode
+	dev	: uint32 
+	ino	: uint64
+	nlink	: uint32
+	uid	: uint32
+	gid	: uint32
+	rdev	: uint32
+	atime	: timespec
+	mtime	: timespec
+	ctime	: timespec
+	size	: off
+	blocks	: int64
+	blksize	: uint32
+	flags	: uint32
+	gen	: uint32
+	birthtim	: timespec 
+;;
+
+type semun = struct
+	semarr	: void#
+;;
+
+const Mfsnamelen 	= 16	/* length of fs type name, including nul */
+const Mnamelen		= 90	/* length of buffer for returned name */
+
+type statfs = struct
+	flags	: uint32	/* copy of mount flags */
+	bsize	: uint32	/* file system block size */
+	iosize	: uint32	/* optimal transfer block size */
+
+		        	/* unit is f_bsize */
+	blocks	: uint64	/* total data blocks in file system */
+	bfree	: uint64	/* free blocks in fs */
+	bavail	: int64		/* free blocks avail to non-superuser */
+
+	files	: int64		/* total file nodes in file system */
+	ffree	: int64		/* free file nodes in fs */
+	favail	: int64		/* free file nodes avail to non-root */
+
+	syncwr	: int64		/* count of sync writes since mount */
+	syncrd	: int64		/* count of sync reads since mount */
+	asyncwr	: int64		/* count of async writes since mount */
+	asyncrd	: int64		/* count of async reads since mount */
+
+	fsid	: fsid		/* file system id */
+	namemax	: uint32	/* maximum filename length */
+	owner	: uid		/* user that mounted the file system */
+	ctime	: uint64	/* last mount [-u] time */
+
+	fstypename	: byte[Mfsnamelen];	/* fs type name */
+	mntonname	: byte[Mnamelen];	/* directory on which mounted */
+	mntfromname	: byte[Mnamelen];	/* mounted file system */
+	mntfromspec	: byte[Mnamelen];	/* special for mount request */
+	///union mount_info mount_info;	/* per-filesystem mount options */
+	__mountinfo	: byte[160];	/* storage for 'union mount_info' */
+;;
+
+type utsname = struct
+	system	: byte[32]
+	node : byte[32] 
+	release : byte[32]
+	version : byte[32]
+	machine : byte[32]
+;;
+
+type sockaddr = struct
+	len	: byte
+	fam	: sockfam
+	data	: byte[14] /* what is the *actual* length? */
+;;
+
+type sockaddr_in = struct
+	len	: byte
+	fam	: sockfam
+	port	: uint16
+	addr	: byte[4]
+	zero	: byte[8]
+;;
+
+type sockaddr_in6 = struct
+	len	: byte
+	fam	: sockfam
+	port	: uint16
+	flow	: uint32
+	addr	: byte[16]
+	scope	: uint32
+;;
+
+type sockaddr_un = struct
+	len	: uint8
+	fam	: sockfam
+	path	: byte[104]
+;;
+
+type sockaddr_storage = struct
+	len	: byte
+	fam	: sockfam
+	__pad1  : byte[6]
+	__align : int64
+	__pad2  : byte[240]
+;;	
+
+type dirent = struct
+	fileno	: uint64
+	off	: uint64
+	reclen	: uint16
+	ftype	: uint8
+	namlen	: uint8
+	__pad	: byte[4]
+	name	: byte[256]	
+;;
+
+type iovec = struct
+	base	: byte#
+	len	: uint64
+;;
+
+/* open options */
+const Ordonly  	: fdopt = 0x0
+const Owronly  	: fdopt = 0x1
+const Ordwr    	: fdopt = 0x2
+const Oappend  	: fdopt = 0x8
+const Ondelay  	: fdopt = 0x4
+const Oshlock	: fdopt = 0x10		/* open with shared file lock */
+const Oexlock	: fdopt = 0x20		/* open with exclusive file lock */
+const Oasync	: fdopt = 0x40		/* signal pgrp when data ready */
+const Osync	: fdopt = 0x80		/* backwards compatibility */
+const Onofollow	: fdopt = 0x100
+const Ocreat   	: fdopt = 0x200
+const Otrunc   	: fdopt = 0x400
+const Oexcl   	: fdopt = 0x800
+const Ocloexec	: fdopt = 0x10000
+const Odsync	: fdopt = Osync		/* synchronous data writes */
+const Orsync	: fdopt = Osync		/* synchronous reads */
+const Odir	: fdopt = 0x20000
+
+/* poll options */
+const Pollin	: uint16 = 0x0001
+const Pollpri	: uint16 = 0x0002
+const Pollout	: uint16 = 0x0004
+const Pollerr	: uint16 = 0x0008
+const Pollhup	: uint16 = 0x0010
+const Pollnval	: uint16 = 0x0020
+const Pollnorm	: uint16 = 0x0040
+const Pollrdband: uint16 = 0x0080
+const Pollwrband: uint16 = 0x0100
+
+/* stat modes */	
+const Sifmt	: filemode = 0xf000
+const Sififo	: filemode = 0x1000
+const Sifchr	: filemode = 0x2000
+const Sifdir	: filemode = 0x4000
+const Sifblk	: filemode = 0x6000
+const Sifreg	: filemode = 0x8000
+const Siflnk	: filemode = 0xa000
+const Sifsock 	: filemode = 0xc000
+const Sisvtx 	: filemode = 0x0200
+
+/* mmap protection */
+const Mprotnone	: mprot = 0x0
+const Mprotrd	: mprot = 0x1
+const Mprotwr	: mprot = 0x2
+const Mprotexec	: mprot = 0x4
+const Mprotrw	: mprot = 0x3
+
+/* mmap options */
+const Mshared	: mopt = 0x1
+const Mpriv	: mopt = 0x2
+const Mfixed	: mopt = 0x10
+const Mfile	: mopt = 0x0
+const Manon	: mopt = 0x1000
+const Mnoreplace	: mopt = 0x0800
+
+/* file types */
+const Dtunknown	: filetype = 0
+const Dtfifo	: filetype = 1
+const Dtchr	: filetype = 2
+const Dtdir	: filetype = 4
+const Dtblk	: filetype = 6
+const Dtreg	: filetype = 8
+const Dtlnk	: filetype = 10
+const Dtsock	: filetype = 12
+
+/* socket families. INCOMPLETE. */
+const Afunspec	: sockfam = 0
+const Afunix	: sockfam = 1
+const Afinet	: sockfam = 2
+const Afinet6	: sockfam = 24
+
+/* socket types. */
+const Sockstream	: socktype = 1
+const Sockdgram		: socktype = 2
+const Sockraw		: socktype = 3
+const Sockrdm		: socktype = 4
+const Sockseqpacket	: socktype = 5
+
+/* socket options */
+const Sodebug		: sockopt = 0x0001	/* turn on debugging info recording */
+const Soacceptconn	: sockopt = 0x0002	/* socket has had listen() */
+const Soreuseaddr	: sockopt = 0x0004	/* allow local address reuse */
+const Sokeepalive	: sockopt = 0x0008	/* keep connections alive */
+const Sodontroute	: sockopt = 0x0010	/* just use interface addresses */
+const Sobroadcast	: sockopt = 0x0020	/* permit sending of broadcast msgs */
+const Souseloopback	: sockopt = 0x0040	/* bypass hardware when possible */
+const Solinger		: sockopt = 0x0080	/* linger on close if data present */
+const Sooobinline	: sockopt = 0x0100	/* leave received OOB data in line */
+const Soreuseport	: sockopt = 0x0200	/* allow local address & port reuse */
+const Sotimestamp	: sockopt = 0x0800	/* timestamp received dgram traffic */
+const Sobindany		: sockopt = 0x1000	/* allow bind to any address */
+const Sosndbuf		: sockopt = 0x1001	/* send buffer size */
+const Sorcvbuf		: sockopt = 0x1002	/* receive buffer size */
+const Sosndlowat	: sockopt = 0x1003	/* send low-water mark */
+const Sorcvlowat	: sockopt = 0x1004	/* receive low-water mark */
+const Sosndtimeo	: sockopt = 0x1005	/* send timeout */
+const Sorcvtimeo	: sockopt = 0x1006	/* receive timeout */
+const Soerror		: sockopt = 0x1007	/* get error status and clear */
+const Sotype		: sockopt = 0x1008	/* get socket type */
+const Sonetproc		: sockopt = 0x1020	/* multiplex; network processing */
+const Sortable		: sockopt = 0x1021	/* routing table to be used */
+const Sopeercred	: sockopt = 0x1022	/* get connect-time credentials */
+const Sosplice		: sockopt = 0x1023	/* splice data to other socket */
+
+/* socket option levels */
+const Solsocket		: sockproto = 0xffff
+
+/* network protocols */
+const Ipproto_ip	: sockproto = 0
+const Ipproto_icmp	: sockproto = 1
+const Ipproto_tcp	: sockproto = 6
+const Ipproto_udp	: sockproto = 17
+const Ipproto_raw	: sockproto = 255
+
+const Seekset	: whence = 0
+const Seekcur	: whence = 1
+const Seekend	: whence = 2
+
+/* system specific constants */
+const Maxpathlen	: size = 1024
+
+/* fcntl constants */
+const Fdupfd	 : fcntlcmd = 0		/* duplicate file descriptor */
+const Fgetfd	 : fcntlcmd = 1		/* get file descriptor flags */
+const Fsetfd	 : fcntlcmd = 2		/* set file descriptor flags */
+const Fgetfl	 : fcntlcmd = 3		/* get file status flags */
+const Fsetfl	 : fcntlcmd = 4		/* set file status flags */
+const Fgetown	 : fcntlcmd = 5		/* get SIGIO/SIGURG proc/pgrp */
+const Fsetown	 : fcntlcmd = 6		/* set SIGIO/SIGURG proc/pgrp */
+const Fogetlk	 : fcntlcmd = 7		/* get record locking information */
+const Fosetlk	 : fcntlcmd = 8		/* set record locking information */
+
+/* return value for a failed mapping */
+const Mapbad	: byte# = (-1 : byte#)
+
+/* signal flags */
+const Saonstack		: sigflags = 0x0001	/* take signal on signal stack */
+const Sarestart		: sigflags = 0x0002	/* restart system on signal return */
+const Saresethand	: sigflags = 0x0004	/* reset to SIG_DFL when taking signal */
+const Sanodefer		: sigflags = 0x0010	/* don't mask the signal we're delivering */
+const Sanocldwait	: sigflags = 0x0020	/* don't create zombies (assign to pid 1) */
+const Sanocldstop	: sigflags = 0x0008	/* do not generate SIGCHLD on child stop */
+const Sasiginfo		: sigflags = 0x0040	/* generate siginfo_t */
+
+/* signals */
+const Sighup	: signo = 1	/* hangup */
+const Sigint	: signo = 2	/* interrupt */
+const Sigquit	: signo = 3	/* quit */
+const Sigill	: signo = 4	/* illegal instruction (not reset when caught) */
+const Sigtrap	: signo = 5	/* trace trap (not reset when caught) */
+const Sigabrt	: signo = 6	/* abort() */
+const Sigiot	: signo = Sigabrt	/* compatibility */
+const Sigemt	: signo = 7	/* EMT instruction */
+const Sigfpe	: signo = 8	/* floating point exception */
+const Sigkill	: signo = 9	/* kill (cannot be caught or ignored) */
+const Sigbus	: signo = 10	/* bus error */
+const Sigsegv	: signo = 11	/* segmentation violation */
+const Sigsys	: signo = 12	/* bad argument to system call */
+const Sigpipe	: signo = 13	/* write on a pipe with no one to read it */
+const Sigalrm	: signo = 14	/* alarm clock */
+const Sigterm	: signo = 15	/* software termination signal from kill */
+const Sigurg	: signo = 16	/* urgent condition on IO channel */
+const Sigstop	: signo = 17	/* sendable stop signal not from tty */
+const Sigtstp	: signo = 18	/* stop signal from tty */
+const Sigcont	: signo = 19	/* continue a stopped process */
+const Sigchld	: signo = 20	/* to parent on child stop or exit */
+const Sigttin	: signo = 21	/* to readers pgrp upon background tty read */
+const Sigttou	: signo = 22	/* like TTIN for output if (tp->t_local&LTOSTOP) */
+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##