summaryrefslogtreecommitdiffstats
path: root/sys/kern/makesyscalls.sh
diff options
context:
space:
mode:
authorrgrimes <rgrimes@FreeBSD.org>1994-05-24 10:09:53 +0000
committerrgrimes <rgrimes@FreeBSD.org>1994-05-24 10:09:53 +0000
commit8fb65ce818b3e3c6f165b583b910af24000768a5 (patch)
treeba751e4f2166aefec707c9d7401c7ff432506642 /sys/kern/makesyscalls.sh
parenta6ce65d368e623088a4c1a29865889f431b15420 (diff)
downloadFreeBSD-src-8fb65ce818b3e3c6f165b583b910af24000768a5.zip
FreeBSD-src-8fb65ce818b3e3c6f165b583b910af24000768a5.tar.gz
BSD 4.4 Lite Kernel Sources
Diffstat (limited to 'sys/kern/makesyscalls.sh')
-rw-r--r--sys/kern/makesyscalls.sh171
1 files changed, 171 insertions, 0 deletions
diff --git a/sys/kern/makesyscalls.sh b/sys/kern/makesyscalls.sh
new file mode 100644
index 0000000..0ddea0c
--- /dev/null
+++ b/sys/kern/makesyscalls.sh
@@ -0,0 +1,171 @@
+#! /bin/sh -
+# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93
+
+set -e
+
+# name of compat option:
+compat=COMPAT_43
+
+# output files:
+sysnames="syscalls.c"
+syshdr="../sys/syscall.h"
+syssw="init_sysent.c"
+
+# tmp files:
+sysdcl="sysent.dcl"
+syscompat="sysent.compat"
+sysent="sysent.switch"
+
+trap "rm $sysdcl $syscompat $sysent" 0
+
+case $# in
+ 0) echo "Usage: $0 input-file" 1>&2
+ exit 1
+ ;;
+esac
+
+awk < $1 "
+ BEGIN {
+ sysdcl = \"$sysdcl\"
+ syscompat = \"$syscompat\"
+ sysent = \"$sysent\"
+ sysnames = \"$sysnames\"
+ syshdr = \"$syshdr\"
+ compat = \"$compat\"
+ infile = \"$1\"
+ "'
+
+ printf "/*\n * System call switch table.\n *\n" > sysdcl
+ printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl
+
+ printf "\n#ifdef %s\n", compat > syscompat
+ printf "#define compat(n, name) n, __CONCAT(o,name)\n\n" > syscompat
+
+ printf "/*\n * System call names.\n *\n" > sysnames
+ printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
+
+ printf "/*\n * System call numbers.\n *\n" > syshdr
+ printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
+ }
+ NR == 1 {
+ printf " * created from%s\n */\n\n", $0 > sysdcl
+ printf "#include <sys/param.h>\n" > sysdcl
+ printf "#include <sys/systm.h>\n\n" > sysdcl
+ printf "int\tnosys();\n\n" > sysdcl
+
+ printf "struct sysent sysent[] = {\n" > sysent
+
+ printf " * created from%s\n */\n\n", $0 > sysnames
+ printf "char *syscallnames[] = {\n" > sysnames
+
+ printf " * created from%s\n */\n\n", $0 > syshdr
+ next
+ }
+ NF == 0 || $1 ~ /^;/ {
+ next
+ }
+ $1 ~ /^#[ ]*if/ {
+ print > sysent
+ print > sysdcl
+ print > syscompat
+ print > sysnames
+ savesyscall = syscall
+ next
+ }
+ $1 ~ /^#[ ]*else/ {
+ print > sysent
+ print > sysdcl
+ print > syscompat
+ print > sysnames
+ syscall = savesyscall
+ next
+ }
+ $1 ~ /^#/ {
+ print > sysent
+ print > sysdcl
+ print > syscompat
+ print > sysnames
+ next
+ }
+ syscall != $1 {
+ printf "%s: line %d: syscall number out of sync at %d\n", \
+ infile, NR, syscall
+ printf "line is:\n"
+ print
+ exit 1
+ }
+ { comment = $4
+ for (i = 5; i <= NF; i++)
+ comment = comment " " $i
+ if (NF < 5)
+ $5 = $4
+ }
+ $2 == "STD" {
+ printf("int\t%s();\n", $4) > sysdcl
+ printf("\t{ %d, %s },\t\t\t/* %d = %s */\n", \
+ $3, $4, syscall, $5) > sysent
+ printf("\t\"%s\",\t\t\t/* %d = %s */\n", \
+ $5, syscall, $5) > sysnames
+ printf("#define\tSYS_%s\t%d\n", \
+ $5, syscall) > syshdr
+ syscall++
+ next
+ }
+ $2 == "COMPAT" {
+ printf("int\to%s();\n", $4) > syscompat
+ printf("\t{ compat(%d,%s) },\t\t/* %d = old %s */\n", \
+ $3, $4, syscall, $5) > sysent
+ printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
+ $5, syscall, $5) > sysnames
+ printf("\t\t\t\t/* %d is old %s */\n", \
+ syscall, comment) > syshdr
+ syscall++
+ next
+ }
+ $2 == "LIBCOMPAT" {
+ printf("int\to%s();\n", $4) > syscompat
+ printf("\t{ compat(%d,%s) },\t\t/* %d = old %s */\n", \
+ $3, $4, syscall, $5) > sysent
+ printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
+ $5, syscall, $5) > sysnames
+ printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \
+ $5, syscall) > syshdr
+ syscall++
+ next
+ }
+ $2 == "OBSOL" {
+ printf("\t{ 0, nosys },\t\t\t/* %d = obsolete %s */\n", \
+ syscall, comment) > sysent
+ printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \
+ $4, syscall, comment) > sysnames
+ printf("\t\t\t\t/* %d is obsolete %s */\n", \
+ syscall, comment) > syshdr
+ syscall++
+ next
+ }
+ $2 == "UNIMPL" {
+ printf("\t{ 0, nosys },\t\t\t/* %d = %s */\n", \
+ syscall, comment) > sysent
+ printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
+ syscall, syscall, comment) > sysnames
+ syscall++
+ next
+ }
+ {
+ printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2
+ exit 1
+ }
+ END {
+ printf("\n#else /* %s */\n", compat) > syscompat
+ printf("#define compat(n, name) 0, nosys\n") > syscompat
+ printf("#endif /* %s */\n\n", compat) > syscompat
+
+ printf("};\n\n") > sysent
+ printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent
+
+ printf("};\n") > sysnames
+ } '
+
+cat $sysdcl $syscompat $sysent >$syssw
+
+chmod 444 $sysnames $syshdr $syssw
OpenPOWER on IntegriCloud