makesyscalls.sh revision 177597
11541Srgrimes#! /bin/sh -
21541Srgrimes#	@(#)makesyscalls.sh	8.1 (Berkeley) 6/10/93
350477Speter# $FreeBSD: head/sys/kern/makesyscalls.sh 177597 2008-03-25 09:11:53Z ru $
41541Srgrimes
51541Srgrimesset -e
61541Srgrimes
799854Salfred# name of compat options:
81541Srgrimescompat=COMPAT_43
999854Salfredcompat4=COMPAT_FREEBSD4
10171208Spetercompat6=COMPAT_FREEBSD6
111541Srgrimes
121541Srgrimes# output files:
131541Srgrimessysnames="syscalls.c"
1410905Sbdesysproto="../sys/sysproto.h"
1510905Sbdesysproto_h=_SYS_SYSPROTO_H_
161541Srgrimessyshdr="../sys/syscall.h"
1734354Sjbsysmk="../sys/syscall.mk"
181541Srgrimessyssw="init_sysent.c"
1911294Sswallacesyscallprefix="SYS_"
2011294Sswallaceswitchname="sysent"
2111294Sswallacenamesname="syscallnames"
22160942Sjbsystrace="systrace_args.c"
231541Srgrimes
241541Srgrimes# tmp files:
25161327Sjhbsysaue="sysent.aue.$$"
2631627Sjmgsysdcl="sysent.dcl.$$"
2731627Sjmgsyscompat="sysent.compat.$$"
2831627Sjmgsyscompatdcl="sysent.compatdcl.$$"
2999854Salfredsyscompat4="sysent.compat4.$$"
3099854Salfredsyscompat4dcl="sysent.compat4dcl.$$"
31171208Spetersyscompat6="sysent.compat6.$$"
32171208Spetersyscompat6dcl="sysent.compat6dcl.$$"
3331627Sjmgsysent="sysent.switch.$$"
3431627Sjmgsysinc="sysinc.switch.$$"
3531627Sjmgsysarg="sysarg.switch.$$"
3699854Salfredsysprotoend="sysprotoend.$$"
371541Srgrimes
38171208Spetertrap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend" 0
391541Srgrimes
40171208Spetertouch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend
4124373Speter
421541Srgrimescase $# in
4395258Sdes    0)	echo "usage: $0 input-file <config-file>" 1>&2
441541Srgrimes	exit 1
451541Srgrimes	;;
461541Srgrimesesac
471541Srgrimes
4836735Sdfrif [ -n "$2" -a -f "$2" ]; then
4911294Sswallace	. $2
5011294Sswallacefi
5111294Sswallace
5211294Sswallacesed -e '
5311294Sswallaces/\$//g
5411294Sswallace:join
5511294Sswallace	/\\$/{a\
5611294Sswallace
5711294Sswallace	N
5811294Sswallace	s/\\\n//
5911294Sswallace	b join
6011294Sswallace	}
6111294Sswallace2,${
6211294Sswallace	/^#/!s/\([{}()*,]\)/ \1 /g
6311294Sswallace}
6411294Sswallace' < $1 | awk "
651541Srgrimes	BEGIN {
66161327Sjhb		sysaue = \"$sysaue\"
671541Srgrimes		sysdcl = \"$sysdcl\"
6810905Sbde		sysproto = \"$sysproto\"
6999854Salfred		sysprotoend = \"$sysprotoend\"
7010905Sbde		sysproto_h = \"$sysproto_h\"
711541Srgrimes		syscompat = \"$syscompat\"
7211294Sswallace		syscompatdcl = \"$syscompatdcl\"
7399854Salfred		syscompat4 = \"$syscompat4\"
7499854Salfred		syscompat4dcl = \"$syscompat4dcl\"
75171208Speter		syscompat6 = \"$syscompat6\"
76171208Speter		syscompat6dcl = \"$syscompat6dcl\"
771541Srgrimes		sysent = \"$sysent\"
7836782Sbde		syssw = \"$syssw\"
7911294Sswallace		sysinc = \"$sysinc\"
8011294Sswallace		sysarg = \"$sysarg\"
811541Srgrimes		sysnames = \"$sysnames\"
821541Srgrimes		syshdr = \"$syshdr\"
8334354Sjb		sysmk = \"$sysmk\"
84160942Sjb		systrace = \"$systrace\"
851541Srgrimes		compat = \"$compat\"
8699854Salfred		compat4 = \"$compat4\"
87171208Speter		compat6 = \"$compat6\"
8811294Sswallace		syscallprefix = \"$syscallprefix\"
8911294Sswallace		switchname = \"$switchname\"
9011294Sswallace		namesname = \"$namesname\"
911541Srgrimes		infile = \"$1\"
921541Srgrimes		"'
931541Srgrimes
9436782Sbde		printf "/*\n * System call switch table.\n *\n" > syssw
9536782Sbde		printf " * DO NOT EDIT-- this file is automatically generated.\n" > syssw
9689977Sbde		printf " * $%s$\n", "FreeBSD" > syssw
9710905Sbde
9811294Sswallace		printf "/*\n * System call prototypes.\n *\n" > sysarg
9911294Sswallace		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysarg
10089977Sbde		printf " * $%s$\n", "FreeBSD" > sysarg
1011541Srgrimes
10231785Seivind		printf "\n#ifdef %s\n\n", compat > syscompat
10399854Salfred		printf "\n#ifdef %s\n\n", compat4 > syscompat4
104171208Speter		printf "\n#ifdef %s\n\n", compat6 > syscompat6
1051541Srgrimes
1061541Srgrimes		printf "/*\n * System call names.\n *\n" > sysnames
1071541Srgrimes		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
10889977Sbde		printf " * $%s$\n", "FreeBSD" > sysnames
1091541Srgrimes
1101541Srgrimes		printf "/*\n * System call numbers.\n *\n" > syshdr
1111541Srgrimes		printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
11289977Sbde		printf " * $%s$\n", "FreeBSD" > syshdr
11334354Sjb		printf "# FreeBSD system call names.\n" > sysmk
11434354Sjb		printf "# DO NOT EDIT-- this file is automatically generated.\n" > sysmk
11589984Sbde		printf "# $%s$\n", "FreeBSD" > sysmk
116160942Sjb
117160942Sjb		printf "/*\n * System call argument to DTrace register array converstion.\n *\n" > systrace
118160942Sjb		printf " * DO NOT EDIT-- this file is automatically generated.\n" > systrace
119160942Sjb		printf " * $%s$\n", "FreeBSD" > systrace
1201541Srgrimes	}
1211541Srgrimes	NR == 1 {
12250478Speter		gsub("[$]FreeBSD: ", "", $0)
12310906Sbde		gsub(" [$]", "", $0)
12411294Sswallace
12536782Sbde		printf " * created from%s\n */\n\n", $0 > syssw
12611294Sswallace
12736782Sbde		printf "\n/* The casts are bogus but will do for now. */\n" > sysent
12811294Sswallace		printf "struct sysent %s[] = {\n",switchname > sysent
12910905Sbde
13011294Sswallace		printf " * created from%s\n */\n\n", $0 > sysarg
13133039Sbde		printf "#ifndef %s\n", sysproto_h > sysarg
13233039Sbde		printf "#define\t%s\n\n", sysproto_h > sysarg
133103574Salfred		printf "#include <sys/signal.h>\n" > sysarg
134103574Salfred		printf "#include <sys/acl.h>\n" > sysarg
135177597Sru		printf "#include <sys/cpuset.h>\n" > sysarg
136164184Strhodes		printf "#include <sys/_semaphore.h>\n" > sysarg
137112903Sjeff		printf "#include <sys/ucontext.h>\n\n" > sysarg
138161327Sjhb		printf "#include <bsm/audit_kevents.h>\n\n" > sysarg
13933039Sbde		printf "struct proc;\n\n" > sysarg
14083366Sjulian		printf "struct thread;\n\n" > sysarg
14136770Sbde		printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg
14236770Sbde		printf "\t\t0 : sizeof(register_t) - sizeof(t))\n\n" > sysarg
14382149Stmm		printf "#if BYTE_ORDER == LITTLE_ENDIAN\n"> sysarg
14482149Stmm		printf "#define\tPADL_(t)\t0\n" > sysarg
14582149Stmm		printf "#define\tPADR_(t)\tPAD_(t)\n" > sysarg
14682149Stmm		printf "#else\n" > sysarg
14782149Stmm		printf "#define\tPADL_(t)\tPAD_(t)\n" > sysarg
14882149Stmm		printf "#define\tPADR_(t)\t0\n" > sysarg
14982149Stmm		printf "#endif\n\n" > sysarg
1501541Srgrimes
1511541Srgrimes		printf " * created from%s\n */\n\n", $0 > sysnames
152106149Sdwmalone		printf "const char *%s[] = {\n", namesname > sysnames
1531541Srgrimes
1541541Srgrimes		printf " * created from%s\n */\n\n", $0 > syshdr
1552700Swollman
15634354Sjb		printf "# created from%s\nMIASM = ", $0 > sysmk
15734354Sjb
158160942Sjb		printf " * This file is part of the DTrace syscall provider.\n */\n\n" > systrace
159160942Sjb		printf "static void\nsystrace_args(int sysnum, void *params, u_int64_t *uarg, int *n_args)\n{\n" > systrace
160160942Sjb		printf "\tint64_t *iarg  = (int64_t *) uarg;\n" > systrace
161160942Sjb		printf "\tswitch (sysnum) {\n" > systrace
162160942Sjb
1631541Srgrimes		next
1641541Srgrimes	}
1651541Srgrimes	NF == 0 || $1 ~ /^;/ {
1661541Srgrimes		next
1671541Srgrimes	}
16811294Sswallace	$1 ~ /^#[ 	]*include/ {
16911294Sswallace		print > sysinc
17011294Sswallace		next
17111294Sswallace	}
1721541Srgrimes	$1 ~ /^#[ 	]*if/ {
1731541Srgrimes		print > sysent
1741541Srgrimes		print > sysdcl
17511294Sswallace		print > sysarg
1761541Srgrimes		print > syscompat
17799854Salfred		print > syscompat4
178171208Speter		print > syscompat6
1791541Srgrimes		print > sysnames
1801541Srgrimes		savesyscall = syscall
1811541Srgrimes		next
1821541Srgrimes	}
1831541Srgrimes	$1 ~ /^#[ 	]*else/ {
1841541Srgrimes		print > sysent
1851541Srgrimes		print > sysdcl
18611294Sswallace		print > sysarg
1871541Srgrimes		print > syscompat
18899854Salfred		print > syscompat4
189171208Speter		print > syscompat6
1901541Srgrimes		print > sysnames
1911541Srgrimes		syscall = savesyscall
1921541Srgrimes		next
1931541Srgrimes	}
1941541Srgrimes	$1 ~ /^#/ {
1951541Srgrimes		print > sysent
1961541Srgrimes		print > sysdcl
19711294Sswallace		print > sysarg
1981541Srgrimes		print > syscompat
19999854Salfred		print > syscompat4
200171208Speter		print > syscompat6
2011541Srgrimes		print > sysnames
2021541Srgrimes		next
2031541Srgrimes	}
2041541Srgrimes	syscall != $1 {
20536770Sbde		printf "%s: line %d: syscall number out of sync at %d\n",
20636770Sbde		    infile, NR, syscall
2071541Srgrimes		printf "line is:\n"
2081541Srgrimes		print
2091541Srgrimes		exit 1
2101541Srgrimes	}
21160287Sbde	function align_sysent_comment(column) {
21260287Sbde		printf("\t") > sysent
21360287Sbde		column = column + 8 - column % 8
21460287Sbde		while (column < 56) {
21560287Sbde			printf("\t") > sysent
21660287Sbde			column = column + 8
21760287Sbde		}
21860287Sbde	}
21911294Sswallace	function parserr(was, wanted) {
22036770Sbde		printf "%s: line %d: unexpected %s (expected %s)\n",
22111294Sswallace		    infile, NR, was, wanted
22211294Sswallace		exit 1
22311294Sswallace	}
22411294Sswallace	function parseline() {
225146806Srwatson		f=4			# toss number, type, audit event
22611294Sswallace		argc= 0;
22760287Sbde		argssize = "0"
22811294Sswallace		if ($NF != "}") {
22911294Sswallace			funcalias=$(NF-2)
23011294Sswallace			argalias=$(NF-1)
23111294Sswallace			rettype=$NF
23211294Sswallace			end=NF-3
23311294Sswallace		} else {
23411294Sswallace			funcalias=""
23511294Sswallace			argalias=""
23611294Sswallace			rettype="int"
23711294Sswallace			end=NF
23810905Sbde		}
239146806Srwatson		if ($3 == "NODEF") {
240146806Srwatson			auditev="AUE_NULL"
241146806Srwatson			funcname=$4
242146806Srwatson			argssize = "AS(" $6 ")"
24311294Sswallace			return
24411294Sswallace		}
24511294Sswallace		if ($f != "{")
24611294Sswallace			parserr($f, "{")
24711294Sswallace		f++
24811294Sswallace		if ($end != "}")
24911294Sswallace			parserr($end, "}")
25011294Sswallace		end--
25111294Sswallace		if ($end != ";")
25211294Sswallace			parserr($end, ";")
25311294Sswallace		end--
25411294Sswallace		if ($end != ")")
25511294Sswallace			parserr($end, ")")
25611294Sswallace		end--
25711294Sswallace
25811294Sswallace		f++	#function return type
25911294Sswallace
26011294Sswallace		funcname=$f
26111294Sswallace		if (funcalias == "")
26211294Sswallace			funcalias = funcname
26311294Sswallace		if (argalias == "") {
26411294Sswallace			argalias = funcname "_args"
265146806Srwatson			if ($3 == "COMPAT")
26611330Sswallace				argalias = "o" argalias
267146806Srwatson			if ($3 == "COMPAT4")
26899854Salfred				argalias = "freebsd4_" argalias
269171208Speter			if ($3 == "COMPAT6")
270171208Speter				argalias = "freebsd6_" argalias
27111294Sswallace		}
27211294Sswallace		f++
27311294Sswallace
27411294Sswallace		if ($f != "(")
27511294Sswallace			parserr($f, ")")
27611294Sswallace		f++
27711294Sswallace
27811294Sswallace		if (f == end) {
27911294Sswallace			if ($f != "void")
28011294Sswallace				parserr($f, "argument definition")
28111294Sswallace			return
28211294Sswallace		}
28311294Sswallace
28411294Sswallace		while (f <= end) {
28511294Sswallace			argc++
28611294Sswallace			argtype[argc]=""
28711294Sswallace			oldf=""
28811294Sswallace			while (f < end && $(f+1) != ",") {
28911294Sswallace				if (argtype[argc] != "" && oldf != "*")
29011294Sswallace					argtype[argc] = argtype[argc]" ";
29111294Sswallace				argtype[argc] = argtype[argc]$f;
29211294Sswallace				oldf = $f;
29311294Sswallace				f++
29411294Sswallace			}
29511294Sswallace			if (argtype[argc] == "")
29611294Sswallace				parserr($f, "argument definition")
29711294Sswallace			argname[argc]=$f;
29811294Sswallace			f += 2;			# skip name, and any comma
29911294Sswallace		}
30060287Sbde		if (argc != 0)
30160287Sbde			argssize = "AS(" argalias ")"
3021541Srgrimes	}
303146806Srwatson	{	comment = $4
304146806Srwatson		if (NF < 7)
305146806Srwatson			for (i = 5; i <= NF; i++)
30611294Sswallace				comment = comment " " $i
30711294Sswallace	}
30882585Sdillon
309146806Srwatson	#
310146806Srwatson	# The AUE_ audit event identifier.
311146806Srwatson	#
312146806Srwatson	{
313146806Srwatson		auditev = $2;
314146806Srwatson	}
315146806Srwatson
316146806Srwatson	$3 == "STD" || $3 == "NODEF" || $3 == "NOARGS"  || $3 == "NOPROTO" \
317146806Srwatson	    || $3 == "NOIMPL" || $3 == "NOSTD" {
31811294Sswallace		parseline()
319160942Sjb		printf("\t/* %s */\n\tcase %d: {\n", funcname, syscall) > systrace
320160942Sjb		if (argc > 0) {
321160942Sjb			printf("\t\tstruct %s *p = params;\n", argalias) > systrace
322160942Sjb			for (i = 1; i <= argc; i++) {
323160942Sjb				if (index(argtype[i], "*") > 0 || argtype[i] == "caddr_t")
324160942Sjb					printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \
325160942Sjb					     i - 1, \
326160942Sjb					     argname[i], argtype[i]) > systrace
327160942Sjb				else if (substr(argtype[i], 1, 1) == "u" || argtype[i] == "size_t")
328160942Sjb					printf("\t\tuarg[%d] = p->%s; /* %s */\n", \
329160942Sjb					     i - 1, \
330160942Sjb					     argname[i], argtype[i]) > systrace
331160942Sjb				else
332160942Sjb					printf("\t\tiarg[%d] = p->%s; /* %s */\n", \
333160942Sjb					     i - 1, \
334160942Sjb					     argname[i], argtype[i]) > systrace
335160942Sjb			}
336160942Sjb		}
337160942Sjb		printf("\t\t*n_args = %d;\n\t\tbreak;\n\t}\n", argc) > systrace
33811330Sswallace		if ((!nosys || funcname != "nosys") && \
33969448Salfred		    (funcname != "lkmnosys") && (funcname != "lkmressys")) {
340146806Srwatson			if (argc != 0 && $3 != "NOARGS" && $3 != "NOPROTO") {
34183046Sobrien				printf("struct %s {\n", argalias) > sysarg
34211294Sswallace				for (i = 1; i <= argc; i++)
34382149Stmm					printf("\tchar %s_l_[PADL_(%s)]; " \
34482149Stmm					    "%s %s; char %s_r_[PADR_(%s)];\n",
34582149Stmm					    argname[i], argtype[i],
34636735Sdfr					    argtype[i], argname[i],
34736735Sdfr					    argname[i], argtype[i]) > sysarg
34811294Sswallace				printf("};\n") > sysarg
34911294Sswallace			}
350146806Srwatson			else if ($3 != "NOARGS" && $3 != "NOPROTO" && \
351146806Srwatson			    $3 != "NODEF")
35283046Sobrien				printf("struct %s {\n\tregister_t dummy;\n};\n",
35336770Sbde				    argalias) > sysarg
35410905Sbde		}
355146806Srwatson		if (($3 != "NOPROTO" && $3 != "NODEF" && \
35684600Smarcel		    (funcname != "nosys" || !nosys)) || \
35784600Smarcel		    (funcname == "lkmnosys" && !lkmnosys) || \
35884600Smarcel		    funcname == "lkmressys") {
35992721Salfred			printf("%s\t%s(struct thread *, struct %s *)",
36018277Sbde			    rettype, funcname, argalias) > sysdcl
36118277Sbde			printf(";\n") > sysdcl
362161327Sjhb			printf("#define\t%sAUE_%s\t%s\n", syscallprefix,
363161327Sjhb			    funcalias, auditev) > sysaue
36411330Sswallace		}
36511294Sswallace		if (funcname == "nosys")
3662671Sats			nosys = 1
36711294Sswallace		if (funcname == "lkmnosys")
3684216Sats			lkmnosys = 1
369160798Sjhb		printf("\t{ %s, (sy_call_t *)", argssize) > sysent
370160798Sjhb		column = 8 + 2 + length(argssize) + 15
371146806Srwatson		if ($3 == "NOIMPL") {
372160942Sjb			printf("%s },", "nosys, AUE_NULL, NULL, 0, 0") > sysent
37369445Salfred			column = column + length("nosys") + 3
374146806Srwatson		} else if ($3 == "NOSTD") {
375160942Sjb			printf("%s },", "lkmressys, AUE_NULL, NULL, 0, 0") > sysent
37684600Smarcel			column = column + length("lkmressys") + 3
37769445Salfred		} else {
378160942Sjb			printf("%s, %s, NULL, 0, 0 },", funcname, auditev) > sysent
379146806Srwatson			column = column + length(funcname) + length(auditev) + 3
38069445Salfred		} 
38160287Sbde		align_sysent_comment(column)
38258963Salfred		printf("/* %d = %s */\n", syscall, funcalias) > sysent
38336770Sbde		printf("\t\"%s\",\t\t\t/* %d = %s */\n",
38411294Sswallace		    funcalias, syscall, funcalias) > sysnames
385146806Srwatson		if ($3 != "NODEF") {
38636770Sbde			printf("#define\t%s%s\t%d\n", syscallprefix,
38711294Sswallace		    	    funcalias, syscall) > syshdr
38834354Sjb			printf(" \\\n\t%s.o", funcalias) > sysmk
38934354Sjb		}
3901541Srgrimes		syscall++
3911541Srgrimes		next
3921541Srgrimes	}
393171208Speter	$3 == "COMPAT" || $3 == "COMPAT4" || $3 == "COMPAT6" || $3 == "CPT_NOA" {
394146806Srwatson		if ($3 == "COMPAT" || $3 == "CPT_NOA") {
39599854Salfred			ncompat++
39699854Salfred			out = syscompat
39799854Salfred			outdcl = syscompatdcl
39899854Salfred			wrap = "compat"
39999854Salfred			prefix = "o"
400146806Srwatson		} else if ($3 == "COMPAT4") {
40199854Salfred			ncompat4++
40299854Salfred			out = syscompat4
40399854Salfred			outdcl = syscompat4dcl
40499854Salfred			wrap = "compat4"
40599854Salfred			prefix = "freebsd4_"
406171208Speter		} else if ($3 == "COMPAT6") {
407171208Speter			ncompat6++
408171208Speter			out = syscompat6
409171208Speter			outdcl = syscompat6dcl
410171208Speter			wrap = "compat6"
411171208Speter			prefix = "freebsd6_"
41299854Salfred		}
41311294Sswallace		parseline()
414146806Srwatson		if (argc != 0 && $3 != "CPT_NOA") {
41599854Salfred			printf("struct %s {\n", argalias) > out
41611294Sswallace			for (i = 1; i <= argc; i++)
41782149Stmm				printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \
41882149Stmm				    "char %s_r_[PADR_(%s)];\n",
41982149Stmm				    argname[i], argtype[i],
42036735Sdfr				    argtype[i], argname[i],
42199854Salfred				    argname[i], argtype[i]) > out
42299854Salfred			printf("};\n") > out
42311294Sswallace		}
424146806Srwatson		else if($3 != "CPT_NOA")
42583046Sobrien			printf("struct %s {\n\tregister_t dummy;\n};\n",
42636770Sbde			    argalias) > sysarg
42799854Salfred		printf("%s\t%s%s(struct thread *, struct %s *);\n",
42899854Salfred		    rettype, prefix, funcname, argalias) > outdcl
429160942Sjb		printf("\t{ %s(%s,%s), %s, NULL, 0, 0 },",
430160798Sjhb		    wrap, argssize, funcname, auditev) > sysent
431160798Sjhb		align_sysent_comment(8 + 9 + \
432146806Srwatson		    length(argssize) + 1 + length(funcname) + length(auditev) + 4)
43360287Sbde		printf("/* %d = old %s */\n", syscall, funcalias) > sysent
434171208Speter		printf("\t\"%s.%s\",\t\t/* %d = old %s */\n",
435171208Speter		    wrap, funcalias, syscall, funcalias) > sysnames
436171208Speter		if ($3 == "COMPAT" || $3 == "CPT_NOA") {
437171208Speter			printf("\t\t\t\t/* %d is old %s */\n",
438171208Speter			    syscall, funcalias) > syshdr
439171208Speter		} else {
440171208Speter			printf("#define\t%s%s%s\t%d\n", syscallprefix,
441171208Speter			    prefix, funcalias, syscall) > syshdr
442171208Speter			printf(" \\\n\t%s%s.o", prefix, funcalias) > sysmk
443171208Speter		}
4441541Srgrimes		syscall++
4451541Srgrimes		next
4461541Srgrimes	}
447146806Srwatson	$3 == "LIBCOMPAT" {
44836782Sbde		ncompat++
44911294Sswallace		parseline()
45011294Sswallace		printf("%s\to%s();\n", rettype, funcname) > syscompatdcl
451160942Sjb		printf("\t{ compat(%s,%s), %s, NULL, 0, 0 },",
452160798Sjhb		    argssize, funcname, auditev) > sysent
453160798Sjhb		align_sysent_comment(8 + 9 + \
454146806Srwatson		    length(argssize) + 1 + length(funcname) + length(auditev) + 4)
45560287Sbde		printf("/* %d = old %s */\n", syscall, funcalias) > sysent
45636770Sbde		printf("\t\"old.%s\",\t\t/* %d = old %s */\n",
45711294Sswallace		    funcalias, syscall, funcalias) > sysnames
45836770Sbde		printf("#define\t%s%s\t%d\t/* compatibility; still used by libc */\n",
45911294Sswallace		    syscallprefix, funcalias, syscall) > syshdr
46034354Sjb		printf(" \\\n\t%s.o", funcalias) > sysmk
4611541Srgrimes		syscall++
4621541Srgrimes		next
4631541Srgrimes	}
464146806Srwatson	$3 == "OBSOL" {
465160942Sjb		printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },") > sysent
46660287Sbde		align_sysent_comment(34)
46760287Sbde		printf("/* %d = obsolete %s */\n", syscall, comment) > sysent
46836770Sbde		printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n",
469146806Srwatson		    $4, syscall, comment) > sysnames
47036770Sbde		printf("\t\t\t\t/* %d is obsolete %s */\n",
4711541Srgrimes		    syscall, comment) > syshdr
4721541Srgrimes		syscall++
4731541Srgrimes		next
4741541Srgrimes	}
475146806Srwatson	$3 == "UNIMPL" {
476160942Sjb		printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },\t\t\t/* %d = %s */\n",
4771541Srgrimes		    syscall, comment) > sysent
47836770Sbde		printf("\t\"#%d\",\t\t\t/* %d = %s */\n",
4791541Srgrimes		    syscall, syscall, comment) > sysnames
4801541Srgrimes		syscall++
4811541Srgrimes		next
4821541Srgrimes	}
4831541Srgrimes	{
484146806Srwatson		printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3
4851541Srgrimes		exit 1
4861541Srgrimes	}
4871541Srgrimes	END {
48860287Sbde		printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc
48999854Salfred
490171208Speter		if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0)
49199854Salfred			printf "#include \"opt_compat.h\"\n\n" > syssw
49299854Salfred
49336782Sbde		if (ncompat != 0) {
49436782Sbde			printf "\n#ifdef %s\n", compat > sysinc
49536782Sbde			printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc
49636782Sbde			printf "#else\n" > sysinc
49736782Sbde			printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc
49836782Sbde			printf "#endif\n" > sysinc
49936782Sbde		}
50036782Sbde
50199854Salfred		if (ncompat4 != 0) {
50299854Salfred			printf "\n#ifdef %s\n", compat4 > sysinc
50399854Salfred			printf "#define compat4(n, name) n, (sy_call_t *)__CONCAT(freebsd4_,name)\n" > sysinc
50499854Salfred			printf "#else\n" > sysinc
50599854Salfred			printf "#define compat4(n, name) 0, (sy_call_t *)nosys\n" > sysinc
50699854Salfred			printf "#endif\n" > sysinc
50799854Salfred		}
50899854Salfred
509171208Speter		if (ncompat6 != 0) {
510171208Speter			printf "\n#ifdef %s\n", compat6 > sysinc
511171208Speter			printf "#define compat6(n, name) n, (sy_call_t *)__CONCAT(freebsd6_,name)\n" > sysinc
512171208Speter			printf "#else\n" > sysinc
513171208Speter			printf "#define compat6(n, name) 0, (sy_call_t *)nosys\n" > sysinc
514171208Speter			printf "#endif\n" > sysinc
515171208Speter		}
516171208Speter
51736735Sdfr		printf("\n#endif /* %s */\n\n", compat) > syscompatdcl
51899854Salfred		printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl
519171208Speter		printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl
52099854Salfred
521161327Sjhb		printf("\n#undef PAD_\n") > sysprotoend
52299854Salfred		printf("#undef PADL_\n") > sysprotoend
52399854Salfred		printf("#undef PADR_\n") > sysprotoend
52499854Salfred		printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend
52599854Salfred
52637227Sphk		printf("\n") > sysmk
52714331Speter		printf("};\n") > sysent
5281541Srgrimes		printf("};\n") > sysnames
52911294Sswallace		printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \
53036770Sbde		    > syshdr
531160942Sjb		printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace
5321541Srgrimes	} '
5331541Srgrimes
53436782Sbdecat $sysinc $sysent >> $syssw
53599854Salfredcat $sysarg $sysdcl \
53699854Salfred	$syscompat $syscompatdcl \
53799854Salfred	$syscompat4 $syscompat4dcl \
538171208Speter	$syscompat6 $syscompat6dcl \
539161327Sjhb	$sysaue $sysprotoend > $sysproto
54099854Salfred
541