makesyscalls.sh revision 164184
11541Srgrimes#! /bin/sh -
21541Srgrimes#	@(#)makesyscalls.sh	8.1 (Berkeley) 6/10/93
350477Speter# $FreeBSD: head/sys/kern/makesyscalls.sh 164184 2006-11-11 16:26:58Z trhodes $
41541Srgrimes
51541Srgrimesset -e
61541Srgrimes
799854Salfred# name of compat options:
81541Srgrimescompat=COMPAT_43
999854Salfredcompat4=COMPAT_FREEBSD4
101541Srgrimes
111541Srgrimes# output files:
121541Srgrimessysnames="syscalls.c"
1310905Sbdesysproto="../sys/sysproto.h"
1410905Sbdesysproto_h=_SYS_SYSPROTO_H_
151541Srgrimessyshdr="../sys/syscall.h"
1634354Sjbsysmk="../sys/syscall.mk"
171541Srgrimessyssw="init_sysent.c"
1811294Sswallacesyscallprefix="SYS_"
1911294Sswallaceswitchname="sysent"
2011294Sswallacenamesname="syscallnames"
21160942Sjbsystrace="systrace_args.c"
221541Srgrimes
231541Srgrimes# tmp files:
24161327Sjhbsysaue="sysent.aue.$$"
2531627Sjmgsysdcl="sysent.dcl.$$"
2631627Sjmgsyscompat="sysent.compat.$$"
2731627Sjmgsyscompatdcl="sysent.compatdcl.$$"
2899854Salfredsyscompat4="sysent.compat4.$$"
2999854Salfredsyscompat4dcl="sysent.compat4dcl.$$"
3031627Sjmgsysent="sysent.switch.$$"
3131627Sjmgsysinc="sysinc.switch.$$"
3231627Sjmgsysarg="sysarg.switch.$$"
3399854Salfredsysprotoend="sysprotoend.$$"
341541Srgrimes
35161327Sjhbtrap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $sysent $sysinc $sysarg $sysprotoend" 0
361541Srgrimes
37161327Sjhbtouch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $sysent $sysinc $sysarg $sysprotoend
3824373Speter
391541Srgrimescase $# in
4095258Sdes    0)	echo "usage: $0 input-file <config-file>" 1>&2
411541Srgrimes	exit 1
421541Srgrimes	;;
431541Srgrimesesac
441541Srgrimes
4536735Sdfrif [ -n "$2" -a -f "$2" ]; then
4611294Sswallace	. $2
4711294Sswallacefi
4811294Sswallace
4911294Sswallacesed -e '
5011294Sswallaces/\$//g
5111294Sswallace:join
5211294Sswallace	/\\$/{a\
5311294Sswallace
5411294Sswallace	N
5511294Sswallace	s/\\\n//
5611294Sswallace	b join
5711294Sswallace	}
5811294Sswallace2,${
5911294Sswallace	/^#/!s/\([{}()*,]\)/ \1 /g
6011294Sswallace}
6111294Sswallace' < $1 | awk "
621541Srgrimes	BEGIN {
63161327Sjhb		sysaue = \"$sysaue\"
641541Srgrimes		sysdcl = \"$sysdcl\"
6510905Sbde		sysproto = \"$sysproto\"
6699854Salfred		sysprotoend = \"$sysprotoend\"
6710905Sbde		sysproto_h = \"$sysproto_h\"
681541Srgrimes		syscompat = \"$syscompat\"
6911294Sswallace		syscompatdcl = \"$syscompatdcl\"
7099854Salfred		syscompat4 = \"$syscompat4\"
7199854Salfred		syscompat4dcl = \"$syscompat4dcl\"
721541Srgrimes		sysent = \"$sysent\"
7336782Sbde		syssw = \"$syssw\"
7411294Sswallace		sysinc = \"$sysinc\"
7511294Sswallace		sysarg = \"$sysarg\"
761541Srgrimes		sysnames = \"$sysnames\"
771541Srgrimes		syshdr = \"$syshdr\"
7834354Sjb		sysmk = \"$sysmk\"
79160942Sjb		systrace = \"$systrace\"
801541Srgrimes		compat = \"$compat\"
8199854Salfred		compat4 = \"$compat4\"
8211294Sswallace		syscallprefix = \"$syscallprefix\"
8311294Sswallace		switchname = \"$switchname\"
8411294Sswallace		namesname = \"$namesname\"
851541Srgrimes		infile = \"$1\"
861541Srgrimes		"'
871541Srgrimes
8836782Sbde		printf "/*\n * System call switch table.\n *\n" > syssw
8936782Sbde		printf " * DO NOT EDIT-- this file is automatically generated.\n" > syssw
9089977Sbde		printf " * $%s$\n", "FreeBSD" > syssw
9110905Sbde
9211294Sswallace		printf "/*\n * System call prototypes.\n *\n" > sysarg
9311294Sswallace		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysarg
9489977Sbde		printf " * $%s$\n", "FreeBSD" > sysarg
951541Srgrimes
9631785Seivind		printf "\n#ifdef %s\n\n", compat > syscompat
9799854Salfred		printf "\n#ifdef %s\n\n", compat4 > syscompat4
981541Srgrimes
991541Srgrimes		printf "/*\n * System call names.\n *\n" > sysnames
1001541Srgrimes		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
10189977Sbde		printf " * $%s$\n", "FreeBSD" > sysnames
1021541Srgrimes
1031541Srgrimes		printf "/*\n * System call numbers.\n *\n" > syshdr
1041541Srgrimes		printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
10589977Sbde		printf " * $%s$\n", "FreeBSD" > syshdr
10634354Sjb		printf "# FreeBSD system call names.\n" > sysmk
10734354Sjb		printf "# DO NOT EDIT-- this file is automatically generated.\n" > sysmk
10889984Sbde		printf "# $%s$\n", "FreeBSD" > sysmk
109160942Sjb
110160942Sjb		printf "/*\n * System call argument to DTrace register array converstion.\n *\n" > systrace
111160942Sjb		printf " * DO NOT EDIT-- this file is automatically generated.\n" > systrace
112160942Sjb		printf " * $%s$\n", "FreeBSD" > systrace
1131541Srgrimes	}
1141541Srgrimes	NR == 1 {
11550478Speter		gsub("[$]FreeBSD: ", "", $0)
11610906Sbde		gsub(" [$]", "", $0)
11711294Sswallace
11836782Sbde		printf " * created from%s\n */\n\n", $0 > syssw
11911294Sswallace
12036782Sbde		printf "\n/* The casts are bogus but will do for now. */\n" > sysent
12111294Sswallace		printf "struct sysent %s[] = {\n",switchname > sysent
12210905Sbde
12311294Sswallace		printf " * created from%s\n */\n\n", $0 > sysarg
12433039Sbde		printf "#ifndef %s\n", sysproto_h > sysarg
12533039Sbde		printf "#define\t%s\n\n", sysproto_h > sysarg
126103574Salfred		printf "#include <sys/signal.h>\n" > sysarg
127103574Salfred		printf "#include <sys/acl.h>\n" > sysarg
128164184Strhodes		printf "#include <sys/_semaphore.h>\n" > sysarg
129112903Sjeff		printf "#include <sys/ucontext.h>\n\n" > sysarg
130161327Sjhb		printf "#include <bsm/audit_kevents.h>\n\n" > sysarg
13133039Sbde		printf "struct proc;\n\n" > sysarg
13283366Sjulian		printf "struct thread;\n\n" > sysarg
13336770Sbde		printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg
13436770Sbde		printf "\t\t0 : sizeof(register_t) - sizeof(t))\n\n" > sysarg
13582149Stmm		printf "#if BYTE_ORDER == LITTLE_ENDIAN\n"> sysarg
13682149Stmm		printf "#define\tPADL_(t)\t0\n" > sysarg
13782149Stmm		printf "#define\tPADR_(t)\tPAD_(t)\n" > sysarg
13882149Stmm		printf "#else\n" > sysarg
13982149Stmm		printf "#define\tPADL_(t)\tPAD_(t)\n" > sysarg
14082149Stmm		printf "#define\tPADR_(t)\t0\n" > sysarg
14182149Stmm		printf "#endif\n\n" > sysarg
1421541Srgrimes
1431541Srgrimes		printf " * created from%s\n */\n\n", $0 > sysnames
144106149Sdwmalone		printf "const char *%s[] = {\n", namesname > sysnames
1451541Srgrimes
1461541Srgrimes		printf " * created from%s\n */\n\n", $0 > syshdr
1472700Swollman
14834354Sjb		printf "# created from%s\nMIASM = ", $0 > sysmk
14934354Sjb
150160942Sjb		printf " * This file is part of the DTrace syscall provider.\n */\n\n" > systrace
151160942Sjb		printf "static void\nsystrace_args(int sysnum, void *params, u_int64_t *uarg, int *n_args)\n{\n" > systrace
152160942Sjb		printf "\tint64_t *iarg  = (int64_t *) uarg;\n" > systrace
153160942Sjb		printf "\tswitch (sysnum) {\n" > systrace
154160942Sjb
1551541Srgrimes		next
1561541Srgrimes	}
1571541Srgrimes	NF == 0 || $1 ~ /^;/ {
1581541Srgrimes		next
1591541Srgrimes	}
16011294Sswallace	$1 ~ /^#[ 	]*include/ {
16111294Sswallace		print > sysinc
16211294Sswallace		next
16311294Sswallace	}
1641541Srgrimes	$1 ~ /^#[ 	]*if/ {
1651541Srgrimes		print > sysent
1661541Srgrimes		print > sysdcl
16711294Sswallace		print > sysarg
1681541Srgrimes		print > syscompat
16999854Salfred		print > syscompat4
1701541Srgrimes		print > sysnames
1711541Srgrimes		savesyscall = syscall
1721541Srgrimes		next
1731541Srgrimes	}
1741541Srgrimes	$1 ~ /^#[ 	]*else/ {
1751541Srgrimes		print > sysent
1761541Srgrimes		print > sysdcl
17711294Sswallace		print > sysarg
1781541Srgrimes		print > syscompat
17999854Salfred		print > syscompat4
1801541Srgrimes		print > sysnames
1811541Srgrimes		syscall = savesyscall
1821541Srgrimes		next
1831541Srgrimes	}
1841541Srgrimes	$1 ~ /^#/ {
1851541Srgrimes		print > sysent
1861541Srgrimes		print > sysdcl
18711294Sswallace		print > sysarg
1881541Srgrimes		print > syscompat
18999854Salfred		print > syscompat4
1901541Srgrimes		print > sysnames
1911541Srgrimes		next
1921541Srgrimes	}
1931541Srgrimes	syscall != $1 {
19436770Sbde		printf "%s: line %d: syscall number out of sync at %d\n",
19536770Sbde		    infile, NR, syscall
1961541Srgrimes		printf "line is:\n"
1971541Srgrimes		print
1981541Srgrimes		exit 1
1991541Srgrimes	}
20060287Sbde	function align_sysent_comment(column) {
20160287Sbde		printf("\t") > sysent
20260287Sbde		column = column + 8 - column % 8
20360287Sbde		while (column < 56) {
20460287Sbde			printf("\t") > sysent
20560287Sbde			column = column + 8
20660287Sbde		}
20760287Sbde	}
20811294Sswallace	function parserr(was, wanted) {
20936770Sbde		printf "%s: line %d: unexpected %s (expected %s)\n",
21011294Sswallace		    infile, NR, was, wanted
21111294Sswallace		exit 1
21211294Sswallace	}
21311294Sswallace	function parseline() {
214146806Srwatson		f=4			# toss number, type, audit event
21511294Sswallace		argc= 0;
21660287Sbde		argssize = "0"
21711294Sswallace		if ($NF != "}") {
21811294Sswallace			funcalias=$(NF-2)
21911294Sswallace			argalias=$(NF-1)
22011294Sswallace			rettype=$NF
22111294Sswallace			end=NF-3
22211294Sswallace		} else {
22311294Sswallace			funcalias=""
22411294Sswallace			argalias=""
22511294Sswallace			rettype="int"
22611294Sswallace			end=NF
22710905Sbde		}
228146806Srwatson		if ($3 == "NODEF") {
229146806Srwatson			auditev="AUE_NULL"
230146806Srwatson			funcname=$4
231146806Srwatson			argssize = "AS(" $6 ")"
23211294Sswallace			return
23311294Sswallace		}
23411294Sswallace		if ($f != "{")
23511294Sswallace			parserr($f, "{")
23611294Sswallace		f++
23711294Sswallace		if ($end != "}")
23811294Sswallace			parserr($end, "}")
23911294Sswallace		end--
24011294Sswallace		if ($end != ";")
24111294Sswallace			parserr($end, ";")
24211294Sswallace		end--
24311294Sswallace		if ($end != ")")
24411294Sswallace			parserr($end, ")")
24511294Sswallace		end--
24611294Sswallace
24711294Sswallace		f++	#function return type
24811294Sswallace
24911294Sswallace		funcname=$f
25011294Sswallace		if (funcalias == "")
25111294Sswallace			funcalias = funcname
25211294Sswallace		if (argalias == "") {
25311294Sswallace			argalias = funcname "_args"
254146806Srwatson			if ($3 == "COMPAT")
25511330Sswallace				argalias = "o" argalias
256146806Srwatson			if ($3 == "COMPAT4")
25799854Salfred				argalias = "freebsd4_" argalias
25811294Sswallace		}
25911294Sswallace		f++
26011294Sswallace
26111294Sswallace		if ($f != "(")
26211294Sswallace			parserr($f, ")")
26311294Sswallace		f++
26411294Sswallace
26511294Sswallace		if (f == end) {
26611294Sswallace			if ($f != "void")
26711294Sswallace				parserr($f, "argument definition")
26811294Sswallace			return
26911294Sswallace		}
27011294Sswallace
27111294Sswallace		while (f <= end) {
27211294Sswallace			argc++
27311294Sswallace			argtype[argc]=""
27411294Sswallace			oldf=""
27511294Sswallace			while (f < end && $(f+1) != ",") {
27611294Sswallace				if (argtype[argc] != "" && oldf != "*")
27711294Sswallace					argtype[argc] = argtype[argc]" ";
27811294Sswallace				argtype[argc] = argtype[argc]$f;
27911294Sswallace				oldf = $f;
28011294Sswallace				f++
28111294Sswallace			}
28211294Sswallace			if (argtype[argc] == "")
28311294Sswallace				parserr($f, "argument definition")
28411294Sswallace			argname[argc]=$f;
28511294Sswallace			f += 2;			# skip name, and any comma
28611294Sswallace		}
28760287Sbde		if (argc != 0)
28860287Sbde			argssize = "AS(" argalias ")"
2891541Srgrimes	}
290146806Srwatson	{	comment = $4
291146806Srwatson		if (NF < 7)
292146806Srwatson			for (i = 5; i <= NF; i++)
29311294Sswallace				comment = comment " " $i
29411294Sswallace	}
29582585Sdillon
296146806Srwatson	#
297146806Srwatson	# The AUE_ audit event identifier.
298146806Srwatson	#
299146806Srwatson	{
300146806Srwatson		auditev = $2;
301146806Srwatson	}
302146806Srwatson
303146806Srwatson	$3 == "STD" || $3 == "NODEF" || $3 == "NOARGS"  || $3 == "NOPROTO" \
304146806Srwatson	    || $3 == "NOIMPL" || $3 == "NOSTD" {
30511294Sswallace		parseline()
306160942Sjb		printf("\t/* %s */\n\tcase %d: {\n", funcname, syscall) > systrace
307160942Sjb		if (argc > 0) {
308160942Sjb			printf("\t\tstruct %s *p = params;\n", argalias) > systrace
309160942Sjb			for (i = 1; i <= argc; i++) {
310160942Sjb				if (index(argtype[i], "*") > 0 || argtype[i] == "caddr_t")
311160942Sjb					printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \
312160942Sjb					     i - 1, \
313160942Sjb					     argname[i], argtype[i]) > systrace
314160942Sjb				else if (substr(argtype[i], 1, 1) == "u" || argtype[i] == "size_t")
315160942Sjb					printf("\t\tuarg[%d] = p->%s; /* %s */\n", \
316160942Sjb					     i - 1, \
317160942Sjb					     argname[i], argtype[i]) > systrace
318160942Sjb				else
319160942Sjb					printf("\t\tiarg[%d] = p->%s; /* %s */\n", \
320160942Sjb					     i - 1, \
321160942Sjb					     argname[i], argtype[i]) > systrace
322160942Sjb			}
323160942Sjb		}
324160942Sjb		printf("\t\t*n_args = %d;\n\t\tbreak;\n\t}\n", argc) > systrace
32511330Sswallace		if ((!nosys || funcname != "nosys") && \
32669448Salfred		    (funcname != "lkmnosys") && (funcname != "lkmressys")) {
327146806Srwatson			if (argc != 0 && $3 != "NOARGS" && $3 != "NOPROTO") {
32883046Sobrien				printf("struct %s {\n", argalias) > sysarg
32911294Sswallace				for (i = 1; i <= argc; i++)
33082149Stmm					printf("\tchar %s_l_[PADL_(%s)]; " \
33182149Stmm					    "%s %s; char %s_r_[PADR_(%s)];\n",
33282149Stmm					    argname[i], argtype[i],
33336735Sdfr					    argtype[i], argname[i],
33436735Sdfr					    argname[i], argtype[i]) > sysarg
33511294Sswallace				printf("};\n") > sysarg
33611294Sswallace			}
337146806Srwatson			else if ($3 != "NOARGS" && $3 != "NOPROTO" && \
338146806Srwatson			    $3 != "NODEF")
33983046Sobrien				printf("struct %s {\n\tregister_t dummy;\n};\n",
34036770Sbde				    argalias) > sysarg
34110905Sbde		}
342146806Srwatson		if (($3 != "NOPROTO" && $3 != "NODEF" && \
34384600Smarcel		    (funcname != "nosys" || !nosys)) || \
34484600Smarcel		    (funcname == "lkmnosys" && !lkmnosys) || \
34584600Smarcel		    funcname == "lkmressys") {
34692721Salfred			printf("%s\t%s(struct thread *, struct %s *)",
34718277Sbde			    rettype, funcname, argalias) > sysdcl
34818277Sbde			printf(";\n") > sysdcl
349161327Sjhb			printf("#define\t%sAUE_%s\t%s\n", syscallprefix,
350161327Sjhb			    funcalias, auditev) > sysaue
35111330Sswallace		}
35211294Sswallace		if (funcname == "nosys")
3532671Sats			nosys = 1
35411294Sswallace		if (funcname == "lkmnosys")
3554216Sats			lkmnosys = 1
356160798Sjhb		printf("\t{ %s, (sy_call_t *)", argssize) > sysent
357160798Sjhb		column = 8 + 2 + length(argssize) + 15
358146806Srwatson		if ($3 == "NOIMPL") {
359160942Sjb			printf("%s },", "nosys, AUE_NULL, NULL, 0, 0") > sysent
36069445Salfred			column = column + length("nosys") + 3
361146806Srwatson		} else if ($3 == "NOSTD") {
362160942Sjb			printf("%s },", "lkmressys, AUE_NULL, NULL, 0, 0") > sysent
36384600Smarcel			column = column + length("lkmressys") + 3
36469445Salfred		} else {
365160942Sjb			printf("%s, %s, NULL, 0, 0 },", funcname, auditev) > sysent
366146806Srwatson			column = column + length(funcname) + length(auditev) + 3
36769445Salfred		} 
36860287Sbde		align_sysent_comment(column)
36958963Salfred		printf("/* %d = %s */\n", syscall, funcalias) > sysent
37036770Sbde		printf("\t\"%s\",\t\t\t/* %d = %s */\n",
37111294Sswallace		    funcalias, syscall, funcalias) > sysnames
372146806Srwatson		if ($3 != "NODEF") {
37336770Sbde			printf("#define\t%s%s\t%d\n", syscallprefix,
37411294Sswallace		    	    funcalias, syscall) > syshdr
37534354Sjb			printf(" \\\n\t%s.o", funcalias) > sysmk
37634354Sjb		}
3771541Srgrimes		syscall++
3781541Srgrimes		next
3791541Srgrimes	}
380146806Srwatson	$3 == "COMPAT" || $3 == "COMPAT4" || $3 == "CPT_NOA" {
381146806Srwatson		if ($3 == "COMPAT" || $3 == "CPT_NOA") {
38299854Salfred			ncompat++
38399854Salfred			out = syscompat
38499854Salfred			outdcl = syscompatdcl
38599854Salfred			wrap = "compat"
38699854Salfred			prefix = "o"
387146806Srwatson		} else if ($3 == "COMPAT4") {
38899854Salfred			ncompat4++
38999854Salfred			out = syscompat4
39099854Salfred			outdcl = syscompat4dcl
39199854Salfred			wrap = "compat4"
39299854Salfred			prefix = "freebsd4_"
39399854Salfred		}
39411294Sswallace		parseline()
395146806Srwatson		if (argc != 0 && $3 != "CPT_NOA") {
39699854Salfred			printf("struct %s {\n", argalias) > out
39711294Sswallace			for (i = 1; i <= argc; i++)
39882149Stmm				printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \
39982149Stmm				    "char %s_r_[PADR_(%s)];\n",
40082149Stmm				    argname[i], argtype[i],
40136735Sdfr				    argtype[i], argname[i],
40299854Salfred				    argname[i], argtype[i]) > out
40399854Salfred			printf("};\n") > out
40411294Sswallace		}
405146806Srwatson		else if($3 != "CPT_NOA")
40683046Sobrien			printf("struct %s {\n\tregister_t dummy;\n};\n",
40736770Sbde			    argalias) > sysarg
40899854Salfred		printf("%s\t%s%s(struct thread *, struct %s *);\n",
40999854Salfred		    rettype, prefix, funcname, argalias) > outdcl
410160942Sjb		printf("\t{ %s(%s,%s), %s, NULL, 0, 0 },",
411160798Sjhb		    wrap, argssize, funcname, auditev) > sysent
412160798Sjhb		align_sysent_comment(8 + 9 + \
413146806Srwatson		    length(argssize) + 1 + length(funcname) + length(auditev) + 4)
41460287Sbde		printf("/* %d = old %s */\n", syscall, funcalias) > sysent
41536770Sbde		printf("\t\"old.%s\",\t\t/* %d = old %s */\n",
41611294Sswallace		    funcalias, syscall, funcalias) > sysnames
41736770Sbde		printf("\t\t\t\t/* %d is old %s */\n",
41811294Sswallace		    syscall, funcalias) > syshdr
4191541Srgrimes		syscall++
4201541Srgrimes		next
4211541Srgrimes	}
422146806Srwatson	$3 == "LIBCOMPAT" {
42336782Sbde		ncompat++
42411294Sswallace		parseline()
42511294Sswallace		printf("%s\to%s();\n", rettype, funcname) > syscompatdcl
426160942Sjb		printf("\t{ compat(%s,%s), %s, NULL, 0, 0 },",
427160798Sjhb		    argssize, funcname, auditev) > sysent
428160798Sjhb		align_sysent_comment(8 + 9 + \
429146806Srwatson		    length(argssize) + 1 + length(funcname) + length(auditev) + 4)
43060287Sbde		printf("/* %d = old %s */\n", syscall, funcalias) > sysent
43136770Sbde		printf("\t\"old.%s\",\t\t/* %d = old %s */\n",
43211294Sswallace		    funcalias, syscall, funcalias) > sysnames
43336770Sbde		printf("#define\t%s%s\t%d\t/* compatibility; still used by libc */\n",
43411294Sswallace		    syscallprefix, funcalias, syscall) > syshdr
43534354Sjb		printf(" \\\n\t%s.o", funcalias) > sysmk
4361541Srgrimes		syscall++
4371541Srgrimes		next
4381541Srgrimes	}
439146806Srwatson	$3 == "OBSOL" {
440160942Sjb		printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },") > sysent
44160287Sbde		align_sysent_comment(34)
44260287Sbde		printf("/* %d = obsolete %s */\n", syscall, comment) > sysent
44336770Sbde		printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n",
444146806Srwatson		    $4, syscall, comment) > sysnames
44536770Sbde		printf("\t\t\t\t/* %d is obsolete %s */\n",
4461541Srgrimes		    syscall, comment) > syshdr
4471541Srgrimes		syscall++
4481541Srgrimes		next
4491541Srgrimes	}
450146806Srwatson	$3 == "UNIMPL" {
451160942Sjb		printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },\t\t\t/* %d = %s */\n",
4521541Srgrimes		    syscall, comment) > sysent
45336770Sbde		printf("\t\"#%d\",\t\t\t/* %d = %s */\n",
4541541Srgrimes		    syscall, syscall, comment) > sysnames
4551541Srgrimes		syscall++
4561541Srgrimes		next
4571541Srgrimes	}
4581541Srgrimes	{
459146806Srwatson		printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3
4601541Srgrimes		exit 1
4611541Srgrimes	}
4621541Srgrimes	END {
46360287Sbde		printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc
46499854Salfred
46599854Salfred		if (ncompat != 0 || ncompat4 != 0)
46699854Salfred			printf "#include \"opt_compat.h\"\n\n" > syssw
467146806Srwatson		printf "#include \<bsm/audit_kevents.h\>\n" > syssw
46899854Salfred
46936782Sbde		if (ncompat != 0) {
47036782Sbde			printf "\n#ifdef %s\n", compat > sysinc
47136782Sbde			printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc
47236782Sbde			printf "#else\n" > sysinc
47336782Sbde			printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc
47436782Sbde			printf "#endif\n" > sysinc
47536782Sbde		}
47636782Sbde
47799854Salfred		if (ncompat4 != 0) {
47899854Salfred			printf "\n#ifdef %s\n", compat4 > sysinc
47999854Salfred			printf "#define compat4(n, name) n, (sy_call_t *)__CONCAT(freebsd4_,name)\n" > sysinc
48099854Salfred			printf "#else\n" > sysinc
48199854Salfred			printf "#define compat4(n, name) 0, (sy_call_t *)nosys\n" > sysinc
48299854Salfred			printf "#endif\n" > sysinc
48399854Salfred		}
48499854Salfred
48536735Sdfr		printf("\n#endif /* %s */\n\n", compat) > syscompatdcl
4861541Srgrimes
48799854Salfred		printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl
48899854Salfred
489161327Sjhb		printf("\n#undef PAD_\n") > sysprotoend
49099854Salfred		printf("#undef PADL_\n") > sysprotoend
49199854Salfred		printf("#undef PADR_\n") > sysprotoend
49299854Salfred		printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend
49399854Salfred
49437227Sphk		printf("\n") > sysmk
49514331Speter		printf("};\n") > sysent
4961541Srgrimes		printf("};\n") > sysnames
49711294Sswallace		printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \
49836770Sbde		    > syshdr
499160942Sjb		printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace
5001541Srgrimes	} '
5011541Srgrimes
50236782Sbdecat $sysinc $sysent >> $syssw
50399854Salfredcat $sysarg $sysdcl \
50499854Salfred	$syscompat $syscompatdcl \
50599854Salfred	$syscompat4 $syscompat4dcl \
506161327Sjhb	$sysaue $sysprotoend > $sysproto
50799854Salfred
508