xref: /csrg-svn/sys/kern/makesyscalls.sh (revision 40180)
137326Skarels#! /bin/sh -
2*40180Smarc#	@(#)makesyscalls.sh	7.3 (Berkeley) 02/20/90
337326Skarels
437326Skarels# name of compat option:
537326Skarelscompat=COMPAT_43
637326Skarels
737326Skarels# output files:
837326Skarelssysnames="syscalls.c"
938668Skarelssyshdr="../sys/syscall.h"
1037326Skarelssyssw="init_sysent.c"
1137326Skarels
1237326Skarels# tmp files:
1337326Skarelssysdcl="sysent.dcl"
1437326Skarelssyscompat="sysent.compat"
1537326Skarelssysent="sysent.switch"
1637326Skarels
1737326Skarelscase $# in
1837326Skarels    0)	echo "Usage: $0 input-file" 1>&2
1937326Skarels	exit 1
2037326Skarels	;;
2137326Skarelsesac
2237326Skarels
2337326Skarelsawk < $1 "
2438668Skarels	BEGIN {
2537326Skarels		sysdcl = \"$sysdcl\"
2637326Skarels		syscompat = \"$syscompat\"
2737326Skarels		sysent = \"$sysent\"
2837326Skarels		sysnames = \"$sysnames\"
2937326Skarels		syshdr = \"$syshdr\"
3037326Skarels		compat = \"$compat\"
3137326Skarels		"'
3237326Skarels
3337326Skarels		printf "/*\n * System call switch table.\n *\n" > sysdcl
3437326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl
3537326Skarels
3637326Skarels		printf "\n#ifdef %s\n", compat > syscompat
3737326Skarels		printf "#define compat(n, name) n, o/**/name\n\n" > syscompat
3837326Skarels
3937326Skarels		printf "/*\n * System call names.\n *\n" > sysnames
4037326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
4137326Skarels
4237326Skarels		printf "/*\n * System call numbers.\n *\n" > syshdr
4337326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
4438668Skarels	}
4537326Skarels	NR == 1 {
4637326Skarels		printf " * created from%s\n */\n\n", $0 > sysdcl
4737326Skarels		printf "#include \"param.h\"\n" > sysdcl
4837326Skarels		printf "#include \"systm.h\"\n\n" > sysdcl
4937326Skarels		printf "int\tnosys();\n\n" > sysdcl
5037326Skarels
5137326Skarels		printf "struct sysent sysent[] = {\n" > sysent
5237326Skarels
5337326Skarels		printf " * created from%s\n */\n\n", $0 > sysnames
5437326Skarels		printf "char *syscallnames[] = {\n" > sysnames
5537326Skarels
5637326Skarels		printf " * created from%s\n */\n\n", $0 > syshdr
5737326Skarels		next
5837326Skarels	}
5938668Skarels	NF == 0 || $1 ~ /^;/ {
6037326Skarels		next
6137326Skarels	}
6238668Skarels	$1 ~ /^#[ 	]*if/ {
6337326Skarels		print > sysent
6437326Skarels		print > sysdcl
6537326Skarels		print > syscompat
6637326Skarels		print > sysnames
6737326Skarels		savesyscall = syscall
6837326Skarels		next
6938668Skarels	}
7038668Skarels	$1 ~ /^#[ 	]*else/ {
7137326Skarels		print > sysent
7237326Skarels		print > sysdcl
7337326Skarels		print > syscompat
7437326Skarels		print > sysnames
7537326Skarels		syscall = savesyscall
7637326Skarels		next
7738668Skarels	}
7838668Skarels	$1 ~ /^#/ {
7937326Skarels		print > sysent
8037326Skarels		print > sysdcl
8137326Skarels		print > syscompat
8237326Skarels		print > sysnames
8337326Skarels		next
8438668Skarels	}
8538668Skarels	syscall != $1 {
8637326Skarels		printf "syscall number out of sync at %d; line is:\n", syscall
8737326Skarels		print
8837326Skarels		exit 1
8938668Skarels	}
9037326Skarels	{	comment = $4
9138668Skarels		for (i = 5; i <= NF; i++)
9237326Skarels			comment = comment " " $i
9338668Skarels		if (NF < 5)
9437326Skarels			$5 = $4
9538668Skarels	}
9638668Skarels	$2 == "STD" {
9737326Skarels		printf("int\t%s();\n", $4) > sysdcl
9837326Skarels		printf("\t%d, %s,\t\t\t/* %d = %s */\n", \
9937326Skarels		    $3, $4, syscall, $5) > sysent
10037326Skarels		printf("\t\"%s\",\t\t\t/* %d = %s */\n", \
10137326Skarels		    $5, syscall, $5) > sysnames
10237326Skarels		printf("#define\tSYS_%s\t%d\n", \
10337326Skarels		    $5, syscall) > syshdr
10438668Skarels	}
10538668Skarels	$2 == "COMPAT" {
10637326Skarels		printf("int\to%s();\n", $4) > syscompat
107*40180Smarc		printf("\tcompat(%d,%s),\t\t/* %d = old_%s */\n", \
10837326Skarels		    $3, $4, syscall, $5) > sysent
109*40180Smarc		printf("\t\"old %s\",\t\t/* %d = old_%s */\n", \
11037326Skarels		    $5, syscall, $5) > sysnames
111*40180Smarc		printf("\t\t\t\t/* %d is old_%s */\n", \
11237326Skarels		    syscall, comment) > syshdr
11338668Skarels	}
11438668Skarels	$2 == "OBSOL" {
11537326Skarels		printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \
11637326Skarels		    syscall, comment) > sysent
117*40180Smarc		printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \
11837326Skarels		    $4, syscall, comment) > sysnames
11937326Skarels		printf("\t\t\t\t/* %d is obsolete %s */\n", \
12037326Skarels		    syscall, comment) > syshdr
12138668Skarels	}
12238668Skarels	$2 == "UNIMPL" {
12337326Skarels		printf("\t0, nosys,\t\t\t/* %d = %s */\n", \
12437326Skarels		    syscall, comment) > sysent
12537326Skarels		printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
12637326Skarels		    syscall, syscall, comment) > sysnames
12738668Skarels	}
12837326Skarels	{ syscall++ }
12938668Skarels	END {
13037326Skarels		printf("\n#else /* %s */\n", compat) > syscompat
13137326Skarels		printf("#define compat(n, name) 0, nosys\n") > syscompat
13237326Skarels		printf("#endif /* %s */\n\n", compat) > syscompat
13337326Skarels
13437326Skarels		printf("};\n\n") > sysent
13537326Skarels		printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent
13637326Skarels
13737326Skarels		printf("};\n") > sysnames
13837326Skarels	} '
13937326Skarels
14037326Skarelscat $sysdcl $syscompat $sysent >$syssw
14137326Skarelsrm $sysdcl $syscompat $sysent
14238668Skarels
14338668Skarelschmod 444 $sysnames $syshdr $syssw
144