xref: /csrg-svn/sys/kern/makesyscalls.sh (revision 37326)
1*37326Skarels#! /bin/sh -
2*37326Skarels#	@(#)makesyscalls.sh	1.1 (Berkeley) 04/08/89
3*37326Skarels
4*37326Skarels# name of compat option:
5*37326Skarelscompat=COMPAT_43
6*37326Skarels
7*37326Skarels# output files:
8*37326Skarelssysnames="syscalls.c"
9*37326Skarelssyshdr="syscall.h"
10*37326Skarelssyssw="init_sysent.c"
11*37326Skarels
12*37326Skarels# tmp files:
13*37326Skarelssysdcl="sysent.dcl"
14*37326Skarelssyscompat="sysent.compat"
15*37326Skarelssysent="sysent.switch"
16*37326Skarels
17*37326Skarelscase $# in
18*37326Skarels    0)	echo "Usage: $0 input-file" 1>&2
19*37326Skarels	exit 1
20*37326Skarels	;;
21*37326Skarelsesac
22*37326Skarels
23*37326Skarelsawk < $1 "
24*37326Skarels	BEGIN {
25*37326Skarels		sysdcl = \"$sysdcl\"
26*37326Skarels		syscompat = \"$syscompat\"
27*37326Skarels		sysent = \"$sysent\"
28*37326Skarels		sysnames = \"$sysnames\"
29*37326Skarels		syshdr = \"$syshdr\"
30*37326Skarels		compat = \"$compat\"
31*37326Skarels		"'
32*37326Skarels
33*37326Skarels		printf "/*\n * System call switch table.\n *\n" > sysdcl
34*37326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl
35*37326Skarels
36*37326Skarels		printf "\n#ifdef %s\n", compat > syscompat
37*37326Skarels		printf "#define compat(n, name) n, o/**/name\n\n" > syscompat
38*37326Skarels
39*37326Skarels		printf "/*\n * System call names.\n *\n" > sysnames
40*37326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
41*37326Skarels
42*37326Skarels		printf "/*\n * System call numbers.\n *\n" > syshdr
43*37326Skarels		printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
44*37326Skarels	}
45*37326Skarels	NR == 1 {
46*37326Skarels		printf " * created from%s\n */\n\n", $0 > sysdcl
47*37326Skarels		printf "#include \"param.h\"\n" > sysdcl
48*37326Skarels		printf "#include \"systm.h\"\n\n" > sysdcl
49*37326Skarels		printf "int\tnosys();\n\n" > sysdcl
50*37326Skarels
51*37326Skarels		printf "struct sysent sysent[] = {\n" > sysent
52*37326Skarels
53*37326Skarels		printf " * created from%s\n */\n\n", $0 > sysnames
54*37326Skarels		printf "char *syscallnames[] = {\n" > sysnames
55*37326Skarels
56*37326Skarels		printf " * created from%s\n */\n\n", $0 > syshdr
57*37326Skarels		next
58*37326Skarels	}
59*37326Skarels	NF == 0 || $1 ~ /^;/ {
60*37326Skarels		next
61*37326Skarels	}
62*37326Skarels	$1 ~ /^#[ 	]*if/ {
63*37326Skarels		print > sysent
64*37326Skarels		print > sysdcl
65*37326Skarels		print > syscompat
66*37326Skarels		print > sysnames
67*37326Skarels		savesyscall = syscall
68*37326Skarels		next
69*37326Skarels	}
70*37326Skarels	$1 ~ /^#[ 	]*else/ {
71*37326Skarels		print > sysent
72*37326Skarels		print > sysdcl
73*37326Skarels		print > syscompat
74*37326Skarels		print > sysnames
75*37326Skarels		syscall = savesyscall
76*37326Skarels		next
77*37326Skarels	}
78*37326Skarels	$1 ~ /^#/ {
79*37326Skarels		print > sysent
80*37326Skarels		print > sysdcl
81*37326Skarels		print > syscompat
82*37326Skarels		print > sysnames
83*37326Skarels		next
84*37326Skarels	}
85*37326Skarels	syscall != $1 {
86*37326Skarels		printf "syscall number out of sync at %d; line is:\n", syscall
87*37326Skarels		print
88*37326Skarels		exit 1
89*37326Skarels	}
90*37326Skarels	{	comment = $4
91*37326Skarels		for (i = 5; i <= NF; i++)
92*37326Skarels			comment = comment " " $i
93*37326Skarels		if (NF < 5)
94*37326Skarels			$5 = $4
95*37326Skarels	}
96*37326Skarels	$2 == "STD" {
97*37326Skarels		printf("int\t%s();\n", $4) > sysdcl
98*37326Skarels		printf("\t%d, %s,\t\t\t/* %d = %s */\n", \
99*37326Skarels		    $3, $4, syscall, $5) > sysent
100*37326Skarels		printf("\t\"%s\",\t\t\t/* %d = %s */\n", \
101*37326Skarels		    $5, syscall, $5) > sysnames
102*37326Skarels		printf("#define\tSYS_%s\t%d\n", \
103*37326Skarels		    $5, syscall) > syshdr
104*37326Skarels	}
105*37326Skarels	$2 == "COMPAT" {
106*37326Skarels		printf("int\to%s();\n", $4) > syscompat
107*37326Skarels		printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
108*37326Skarels		    $3, $4, syscall, $5) > sysent
109*37326Skarels		printf("\t\"old %s\",\t\t/* %d = old %s */\n", \
110*37326Skarels		    $5, syscall, $5) > sysnames
111*37326Skarels		printf("\t\t\t\t/* %d is old %s */\n", \
112*37326Skarels		    syscall, comment) > syshdr
113*37326Skarels	}
114*37326Skarels	$2 == "OBSOL" {
115*37326Skarels		printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \
116*37326Skarels		    syscall, comment) > sysent
117*37326Skarels		printf("\t\"obs %s\",\t\t\t/* %d = obsolete %s */\n", \
118*37326Skarels		    $4, syscall, comment) > sysnames
119*37326Skarels		printf("\t\t\t\t/* %d is obsolete %s */\n", \
120*37326Skarels		    syscall, comment) > syshdr
121*37326Skarels	}
122*37326Skarels	$2 == "UNIMPL" {
123*37326Skarels		printf("\t0, nosys,\t\t\t/* %d = %s */\n", \
124*37326Skarels		    syscall, comment) > sysent
125*37326Skarels		printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
126*37326Skarels		    syscall, syscall, comment) > sysnames
127*37326Skarels	}
128*37326Skarels	{ syscall++ }
129*37326Skarels	END {
130*37326Skarels		printf("\n#else /* %s */\n", compat) > syscompat
131*37326Skarels		printf("#define compat(n, name) 0, nosys\n") > syscompat
132*37326Skarels		printf("#endif /* %s */\n\n", compat) > syscompat
133*37326Skarels
134*37326Skarels		printf("};\n\n") > sysent
135*37326Skarels		printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent
136*37326Skarels
137*37326Skarels		printf("};\n") > sysnames
138*37326Skarels	} '
139*37326Skarels
140*37326Skarelscat $sysdcl $syscompat $sysent >$syssw
141*37326Skarelsrm $sysdcl $syscompat $sysent
142