makesyscalls.sh revision 1.7 1 1.1 glass #! /bin/sh -
2 1.2 cgd # from: @(#)makesyscalls.sh 7.6 (Berkeley) 4/20/91
3 1.7 cgd # $Id: makesyscalls.sh,v 1.7 1994/05/17 00:01:00 cgd Exp $
4 1.1 glass
5 1.1 glass set -e
6 1.1 glass
7 1.1 glass # name of compat option:
8 1.1 glass compat=COMPAT_43
9 1.7 cgd ncompat=COMPAT_09
10 1.1 glass
11 1.1 glass # output files:
12 1.1 glass sysnames="syscalls.c"
13 1.1 glass syshdr="../sys/syscall.h"
14 1.1 glass syssw="init_sysent.c"
15 1.1 glass
16 1.1 glass # tmp files:
17 1.1 glass sysdcl="sysent.dcl"
18 1.1 glass syscompat="sysent.compat"
19 1.7 cgd sysncompat="sysent.ncompat"
20 1.1 glass sysent="sysent.switch"
21 1.1 glass
22 1.7 cgd trap "rm $sysdcl $syscompat $sysncompat $sysent" 0
23 1.1 glass
24 1.1 glass case $# in
25 1.1 glass 0) echo "Usage: $0 input-file" 1>&2
26 1.1 glass exit 1
27 1.1 glass ;;
28 1.1 glass esac
29 1.1 glass
30 1.1 glass awk < $1 "
31 1.1 glass BEGIN {
32 1.1 glass sysdcl = \"$sysdcl\"
33 1.1 glass syscompat = \"$syscompat\"
34 1.7 cgd sysncompat = \"$sysncompat\"
35 1.1 glass sysent = \"$sysent\"
36 1.1 glass sysnames = \"$sysnames\"
37 1.1 glass syshdr = \"$syshdr\"
38 1.1 glass compat = \"$compat\"
39 1.7 cgd ncompat = \"$ncompat\"
40 1.1 glass infile = \"$1\"
41 1.1 glass "'
42 1.1 glass
43 1.1 glass printf "/*\n * System call switch table.\n *\n" > sysdcl
44 1.1 glass printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl
45 1.1 glass
46 1.1 glass printf "\n#ifdef %s\n", compat > syscompat
47 1.1 glass printf "#define compat(n, name) n, __CONCAT(o,name)\n\n" > syscompat
48 1.1 glass
49 1.7 cgd printf "\n#ifdef %s\n", ncompat > sysncompat
50 1.7 cgd printf "#define ncompat(n, name) n, __CONCAT(o,name)\n\n" > sysncompat
51 1.7 cgd
52 1.1 glass printf "/*\n * System call names.\n *\n" > sysnames
53 1.1 glass printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
54 1.1 glass
55 1.1 glass printf "/*\n * System call numbers.\n *\n" > syshdr
56 1.1 glass printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
57 1.1 glass }
58 1.1 glass NR == 1 {
59 1.4 cgd printf " * created from: %s %s %s %s\n */\n\n",$2,$3,$4,$5 > sysdcl
60 1.6 mycroft printf "#include <sys/param.h>\n" > sysdcl
61 1.6 mycroft printf "#include <sys/systm.h>\n\n" > sysdcl
62 1.1 glass printf "int\tnosys();\n\n" > sysdcl
63 1.1 glass
64 1.1 glass printf "struct sysent sysent[] = {\n" > sysent
65 1.1 glass
66 1.4 cgd printf " * created from: %s %s %s %s\n */\n\n",$2,$3,$4,$5 > sysnames
67 1.1 glass printf "char *syscallnames[] = {\n" > sysnames
68 1.1 glass
69 1.4 cgd printf " * created from: %s %s %s %s\n */\n\n",$2,$3,$4,$5 > syshdr
70 1.4 cgd printf "#ifndef _SYS_SYSCALL_H\n" > syshdr
71 1.4 cgd printf "#define _SYS_SYSCALL_H\n" > syshdr
72 1.4 cgd printf "\n" > syshdr
73 1.1 glass next
74 1.1 glass }
75 1.1 glass NF == 0 || $1 ~ /^;/ {
76 1.1 glass next
77 1.1 glass }
78 1.1 glass $1 ~ /^#[ ]*if/ {
79 1.1 glass print > sysent
80 1.1 glass print > sysdcl
81 1.1 glass print > syscompat
82 1.1 glass print > sysnames
83 1.1 glass savesyscall = syscall
84 1.1 glass next
85 1.1 glass }
86 1.1 glass $1 ~ /^#[ ]*else/ {
87 1.1 glass print > sysent
88 1.1 glass print > sysdcl
89 1.1 glass print > syscompat
90 1.1 glass print > sysnames
91 1.1 glass syscall = savesyscall
92 1.1 glass next
93 1.1 glass }
94 1.1 glass $1 ~ /^#/ {
95 1.1 glass print > sysent
96 1.1 glass print > sysdcl
97 1.1 glass print > syscompat
98 1.1 glass print > sysnames
99 1.1 glass next
100 1.1 glass }
101 1.1 glass syscall != $1 {
102 1.1 glass printf "%s: line %d: syscall number out of sync at %d\n", \
103 1.1 glass infile, NR, syscall
104 1.1 glass printf "line is:\n"
105 1.1 glass print
106 1.1 glass exit 1
107 1.1 glass }
108 1.1 glass { comment = $4
109 1.1 glass for (i = 5; i <= NF; i++)
110 1.1 glass comment = comment " " $i
111 1.1 glass if (NF < 5)
112 1.1 glass $5 = $4
113 1.1 glass }
114 1.5 cgd $2 == "STD" || $2 == "NODEF" {
115 1.1 glass printf("int\t%s();\n", $4) > sysdcl
116 1.1 glass printf("\t%d, %s,\t\t\t/* %d = %s */\n", \
117 1.1 glass $3, $4, syscall, $5) > sysent
118 1.1 glass printf("\t\"%s\",\t\t\t/* %d = %s */\n", \
119 1.1 glass $5, syscall, $5) > sysnames
120 1.5 cgd if ($2 == "STD")
121 1.5 cgd printf("#define\tSYS_%s\t%d\n", \
122 1.5 cgd $5, syscall) > syshdr
123 1.1 glass syscall++
124 1.1 glass next
125 1.1 glass }
126 1.1 glass $2 == "COMPAT" {
127 1.1 glass printf("int\to%s();\n", $4) > syscompat
128 1.1 glass printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
129 1.1 glass $3, $4, syscall, $5) > sysent
130 1.1 glass printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
131 1.1 glass $5, syscall, $5) > sysnames
132 1.1 glass printf("\t\t\t\t/* %d is old %s */\n", \
133 1.1 glass syscall, comment) > syshdr
134 1.1 glass syscall++
135 1.1 glass next
136 1.1 glass }
137 1.7 cgd $2 == "NCOMPAT" {
138 1.7 cgd printf("int\to%s();\n", $4) > sysncompat
139 1.7 cgd printf("\tncompat(%d,%s),\t\t/* %d = old %s */\n", \
140 1.7 cgd $3, $4, syscall, $5) > sysent
141 1.7 cgd printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
142 1.7 cgd $5, syscall, $5) > sysnames
143 1.7 cgd printf("\t\t\t\t/* %d is old %s */\n", \
144 1.7 cgd syscall, comment) > syshdr
145 1.7 cgd syscall++
146 1.7 cgd next
147 1.7 cgd }
148 1.1 glass $2 == "LIBCOMPAT" {
149 1.1 glass printf("int\to%s();\n", $4) > syscompat
150 1.1 glass printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
151 1.1 glass $3, $4, syscall, $5) > sysent
152 1.1 glass printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
153 1.1 glass $5, syscall, $5) > sysnames
154 1.1 glass printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \
155 1.1 glass $5, syscall) > syshdr
156 1.1 glass syscall++
157 1.1 glass next
158 1.1 glass }
159 1.1 glass $2 == "OBSOL" {
160 1.1 glass printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \
161 1.1 glass syscall, comment) > sysent
162 1.1 glass printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \
163 1.1 glass $4, syscall, comment) > sysnames
164 1.1 glass printf("\t\t\t\t/* %d is obsolete %s */\n", \
165 1.1 glass syscall, comment) > syshdr
166 1.1 glass syscall++
167 1.1 glass next
168 1.1 glass }
169 1.1 glass $2 == "UNIMPL" {
170 1.1 glass printf("\t0, nosys,\t\t\t/* %d = %s */\n", \
171 1.1 glass syscall, comment) > sysent
172 1.1 glass printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
173 1.1 glass syscall, syscall, comment) > sysnames
174 1.1 glass syscall++
175 1.1 glass next
176 1.1 glass }
177 1.1 glass {
178 1.1 glass printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2
179 1.1 glass exit 1
180 1.1 glass }
181 1.1 glass END {
182 1.1 glass printf("\n#else /* %s */\n", compat) > syscompat
183 1.1 glass printf("#define compat(n, name) 0, nosys\n") > syscompat
184 1.1 glass printf("#endif /* %s */\n\n", compat) > syscompat
185 1.1 glass
186 1.7 cgd printf("\n#else /* %s */\n", compat) > sysncompat
187 1.7 cgd printf("#define ncompat(n, name) 0, nosys\n") > sysncompat
188 1.7 cgd printf("#endif /* %s */\n\n", compat) > sysncompat
189 1.7 cgd
190 1.1 glass printf("};\n\n") > sysent
191 1.1 glass printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent
192 1.1 glass
193 1.1 glass printf("};\n") > sysnames
194 1.4 cgd
195 1.4 cgd printf "\n" > syshdr
196 1.4 cgd printf "#endif /* _SYS_SYSCALL_H */\n" > syshdr
197 1.1 glass } '
198 1.1 glass
199 1.7 cgd cat $sysdcl $syscompat $sysncompat $sysent >$syssw
200 1.1 glass
201 1.3 cgd #chmod 444 $sysnames $syshdr $syssw
202