xref: /csrg-svn/sys/kern/makesyscalls.sh (revision 43399)
137326Skarels#! /bin/sh -
2*43399Skarels#	@(#)makesyscalls.sh	7.5 (Berkeley) 06/21/90
337326Skarels
4*43399Skarelsset -e
5*43399Skarels
637326Skarels# name of compat option:
737326Skarelscompat=COMPAT_43
837326Skarels
937326Skarels# output files:
1037326Skarelssysnames="syscalls.c"
1138668Skarelssyshdr="../sys/syscall.h"
1237326Skarelssyssw="init_sysent.c"
1337326Skarels
1437326Skarels# tmp files:
1537326Skarelssysdcl="sysent.dcl"
1637326Skarelssyscompat="sysent.compat"
1737326Skarelssysent="sysent.switch"
1837326Skarels
19*43399Skarelstrap "rm $sysdcl $syscompat $sysent" 0
20*43399Skarels
2137326Skarelscase $# in
2237326Skarels    0)	echo "Usage: $0 input-file" 1>&2
2337326Skarels	exit 1
2437326Skarels	;;
2537326Skarelsesac
2637326Skarels
2737326Skarelsawk < $1 "
2838668Skarels	BEGIN {
2937326Skarels		sysdcl = \"$sysdcl\"
3037326Skarels		syscompat = \"$syscompat\"
3137326Skarels		sysent = \"$sysent\"
3237326Skarels		sysnames = \"$sysnames\"
3337326Skarels		syshdr = \"$syshdr\"
3437326Skarels		compat = \"$compat\"
35*43399Skarels		infile = \"$1\"
3637326Skarels		"'
3737326Skarels
3837326Skarels		printf "/*\n * System call switch table.\n *\n" > sysdcl
3937326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl
4037326Skarels
4137326Skarels		printf "\n#ifdef %s\n", compat > syscompat
4237326Skarels		printf "#define compat(n, name) n, o/**/name\n\n" > syscompat
4337326Skarels
4437326Skarels		printf "/*\n * System call names.\n *\n" > sysnames
4537326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
4637326Skarels
4737326Skarels		printf "/*\n * System call numbers.\n *\n" > syshdr
4837326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
4938668Skarels	}
5037326Skarels	NR == 1 {
5137326Skarels		printf " * created from%s\n */\n\n", $0 > sysdcl
5237326Skarels		printf "#include \"param.h\"\n" > sysdcl
5337326Skarels		printf "#include \"systm.h\"\n\n" > sysdcl
5437326Skarels		printf "int\tnosys();\n\n" > sysdcl
5537326Skarels
5637326Skarels		printf "struct sysent sysent[] = {\n" > sysent
5737326Skarels
5837326Skarels		printf " * created from%s\n */\n\n", $0 > sysnames
5937326Skarels		printf "char *syscallnames[] = {\n" > sysnames
6037326Skarels
6137326Skarels		printf " * created from%s\n */\n\n", $0 > syshdr
6237326Skarels		next
6337326Skarels	}
6438668Skarels	NF == 0 || $1 ~ /^;/ {
6537326Skarels		next
6637326Skarels	}
6738668Skarels	$1 ~ /^#[ 	]*if/ {
6837326Skarels		print > sysent
6937326Skarels		print > sysdcl
7037326Skarels		print > syscompat
7137326Skarels		print > sysnames
7237326Skarels		savesyscall = syscall
7337326Skarels		next
7438668Skarels	}
7538668Skarels	$1 ~ /^#[ 	]*else/ {
7637326Skarels		print > sysent
7737326Skarels		print > sysdcl
7837326Skarels		print > syscompat
7937326Skarels		print > sysnames
8037326Skarels		syscall = savesyscall
8137326Skarels		next
8238668Skarels	}
8338668Skarels	$1 ~ /^#/ {
8437326Skarels		print > sysent
8537326Skarels		print > sysdcl
8637326Skarels		print > syscompat
8737326Skarels		print > sysnames
8837326Skarels		next
8938668Skarels	}
9038668Skarels	syscall != $1 {
91*43399Skarels		printf "%s: line %d: syscall number out of sync at %d\n", \
92*43399Skarels		   infile, NR, syscall
93*43399Skarels		printf "line is:\n"
9437326Skarels		print
9537326Skarels		exit 1
9638668Skarels	}
9737326Skarels	{	comment = $4
9838668Skarels		for (i = 5; i <= NF; i++)
9937326Skarels			comment = comment " " $i
10038668Skarels		if (NF < 5)
10137326Skarels			$5 = $4
10238668Skarels	}
10338668Skarels	$2 == "STD" {
10437326Skarels		printf("int\t%s();\n", $4) > sysdcl
10537326Skarels		printf("\t%d, %s,\t\t\t/* %d = %s */\n", \
10637326Skarels		    $3, $4, syscall, $5) > sysent
10737326Skarels		printf("\t\"%s\",\t\t\t/* %d = %s */\n", \
10837326Skarels		    $5, syscall, $5) > sysnames
10937326Skarels		printf("#define\tSYS_%s\t%d\n", \
11037326Skarels		    $5, syscall) > syshdr
111*43399Skarels		syscall++
112*43399Skarels		next
11338668Skarels	}
11438668Skarels	$2 == "COMPAT" {
11537326Skarels		printf("int\to%s();\n", $4) > syscompat
11642288Smarc		printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
11737326Skarels		    $3, $4, syscall, $5) > sysent
118*43399Skarels		printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
11937326Skarels		    $5, syscall, $5) > sysnames
120*43399Skarels		printf("\t\t\t\t/* %d is old %s */\n", \
12137326Skarels		    syscall, comment) > syshdr
122*43399Skarels		syscall++
123*43399Skarels		next
12438668Skarels	}
125*43399Skarels	$2 == "LIBCOMPAT" {
126*43399Skarels		printf("int\to%s();\n", $4) > syscompat
127*43399Skarels		printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
128*43399Skarels		    $3, $4, syscall, $5) > sysent
129*43399Skarels		printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
130*43399Skarels		    $5, syscall, $5) > sysnames
131*43399Skarels		printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \
132*43399Skarels		    $5, syscall) > syshdr
133*43399Skarels		syscall++
134*43399Skarels		next
135*43399Skarels	}
13638668Skarels	$2 == "OBSOL" {
13737326Skarels		printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \
13837326Skarels		    syscall, comment) > sysent
13940180Smarc		printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \
14037326Skarels		    $4, syscall, comment) > sysnames
14137326Skarels		printf("\t\t\t\t/* %d is obsolete %s */\n", \
14237326Skarels		    syscall, comment) > syshdr
143*43399Skarels		syscall++
144*43399Skarels		next
14538668Skarels	}
14638668Skarels	$2 == "UNIMPL" {
14737326Skarels		printf("\t0, nosys,\t\t\t/* %d = %s */\n", \
14837326Skarels		    syscall, comment) > sysent
14937326Skarels		printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
15037326Skarels		    syscall, syscall, comment) > sysnames
151*43399Skarels		syscall++
152*43399Skarels		next
15338668Skarels	}
154*43399Skarels	{
155*43399Skarels		printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2
156*43399Skarels		exit 1
157*43399Skarels	}
15838668Skarels	END {
15937326Skarels		printf("\n#else /* %s */\n", compat) > syscompat
16037326Skarels		printf("#define compat(n, name) 0, nosys\n") > syscompat
16137326Skarels		printf("#endif /* %s */\n\n", compat) > syscompat
16237326Skarels
16337326Skarels		printf("};\n\n") > sysent
16437326Skarels		printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent
16537326Skarels
16637326Skarels		printf("};\n") > sysnames
16737326Skarels	} '
16837326Skarels
16937326Skarelscat $sysdcl $syscompat $sysent >$syssw
17038668Skarels
17138668Skarelschmod 444 $sysnames $syshdr $syssw
172