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