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