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