makesyscalls.sh revision 2671
11541Srgrimes#! /bin/sh - 21541Srgrimes# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93 32671Sats# $Id: makesyscalls.sh,v 1.5 1994/08/26 09:33:36 sos Exp $ 41541Srgrimes 51541Srgrimesset -e 61541Srgrimes 71541Srgrimes# name of compat option: 81541Srgrimescompat=COMPAT_43 91541Srgrimes 101541Srgrimes# output files: 111541Srgrimessysnames="syscalls.c" 121541Srgrimessyshdr="../sys/syscall.h" 131541Srgrimessyssw="init_sysent.c" 141541Srgrimes 151541Srgrimes# tmp files: 161541Srgrimessysdcl="sysent.dcl" 171541Srgrimessyscompat="sysent.compat" 181541Srgrimessysent="sysent.switch" 191541Srgrimes 201541Srgrimestrap "rm $sysdcl $syscompat $sysent" 0 211541Srgrimes 221541Srgrimescase $# in 231541Srgrimes 0) echo "Usage: $0 input-file" 1>&2 241541Srgrimes exit 1 251541Srgrimes ;; 261541Srgrimesesac 271541Srgrimes 281541Srgrimesawk < $1 " 291541Srgrimes BEGIN { 301541Srgrimes sysdcl = \"$sysdcl\" 311541Srgrimes syscompat = \"$syscompat\" 321541Srgrimes sysent = \"$sysent\" 331541Srgrimes sysnames = \"$sysnames\" 341541Srgrimes syshdr = \"$syshdr\" 351541Srgrimes compat = \"$compat\" 361541Srgrimes infile = \"$1\" 371541Srgrimes "' 381541Srgrimes 391541Srgrimes printf "/*\n * System call switch table.\n *\n" > sysdcl 401541Srgrimes printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl 411541Srgrimes 421541Srgrimes printf "\n#ifdef %s\n", compat > syscompat 431541Srgrimes printf "#define compat(n, name) n, __CONCAT(o,name)\n\n" > syscompat 441541Srgrimes 451541Srgrimes printf "/*\n * System call names.\n *\n" > sysnames 461541Srgrimes printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 471541Srgrimes 481541Srgrimes printf "/*\n * System call numbers.\n *\n" > syshdr 491541Srgrimes printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 501541Srgrimes } 511541Srgrimes NR == 1 { 521541Srgrimes printf " * created from%s\n */\n\n", $0 > sysdcl 531541Srgrimes printf "#include <sys/param.h>\n" > sysdcl 542293Ssos printf "#include <sys/systm.h>\n" > sysdcl 552293Ssos printf "#include <sys/sysent.h>\n\n" > sysdcl 561541Srgrimes 571541Srgrimes printf "struct sysent sysent[] = {\n" > sysent 581541Srgrimes 591541Srgrimes printf " * created from%s\n */\n\n", $0 > sysnames 601541Srgrimes printf "char *syscallnames[] = {\n" > sysnames 611541Srgrimes 621541Srgrimes printf " * created from%s\n */\n\n", $0 > syshdr 631541Srgrimes next 641541Srgrimes } 651541Srgrimes NF == 0 || $1 ~ /^;/ { 661541Srgrimes next 671541Srgrimes } 681541Srgrimes $1 ~ /^#[ ]*if/ { 691541Srgrimes print > sysent 701541Srgrimes print > sysdcl 711541Srgrimes print > syscompat 721541Srgrimes print > sysnames 731541Srgrimes savesyscall = syscall 741541Srgrimes next 751541Srgrimes } 761541Srgrimes $1 ~ /^#[ ]*else/ { 771541Srgrimes print > sysent 781541Srgrimes print > sysdcl 791541Srgrimes print > syscompat 801541Srgrimes print > sysnames 811541Srgrimes syscall = savesyscall 821541Srgrimes next 831541Srgrimes } 841541Srgrimes $1 ~ /^#/ { 851541Srgrimes print > sysent 861541Srgrimes print > sysdcl 871541Srgrimes print > syscompat 881541Srgrimes print > sysnames 891541Srgrimes next 901541Srgrimes } 911541Srgrimes syscall != $1 { 921541Srgrimes printf "%s: line %d: syscall number out of sync at %d\n", \ 931541Srgrimes infile, NR, syscall 941541Srgrimes printf "line is:\n" 951541Srgrimes print 961541Srgrimes exit 1 971541Srgrimes } 981541Srgrimes { comment = $4 991541Srgrimes for (i = 5; i <= NF; i++) 1001541Srgrimes comment = comment " " $i 1011541Srgrimes if (NF < 5) 1021541Srgrimes $5 = $4 1031541Srgrimes } 1042124Sdg $2 == "STD" || $2 == "NODEF" { 1052671Sats if (!nosys || $4 != "nosys") 1062671Sats printf("int\t%s();\n", $4) > sysdcl 1072671Sats if ($4 == "nosys") 1082671Sats nosys = 1 1091541Srgrimes printf("\t{ %d, %s },\t\t\t/* %d = %s */\n", \ 1101541Srgrimes $3, $4, syscall, $5) > sysent 1111541Srgrimes printf("\t\"%s\",\t\t\t/* %d = %s */\n", \ 1121541Srgrimes $5, syscall, $5) > sysnames 1132124Sdg if ($2 == "STD") 1142124Sdg printf("#define\tSYS_%s\t%d\n", \ 1152124Sdg $5, syscall) > syshdr 1161541Srgrimes syscall++ 1171541Srgrimes next 1181541Srgrimes } 1191541Srgrimes $2 == "COMPAT" { 1201541Srgrimes printf("int\to%s();\n", $4) > syscompat 1211541Srgrimes printf("\t{ compat(%d,%s) },\t\t/* %d = old %s */\n", \ 1221541Srgrimes $3, $4, syscall, $5) > sysent 1231541Srgrimes printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \ 1241541Srgrimes $5, syscall, $5) > sysnames 1251541Srgrimes printf("\t\t\t\t/* %d is old %s */\n", \ 1261541Srgrimes syscall, comment) > syshdr 1271541Srgrimes syscall++ 1281541Srgrimes next 1291541Srgrimes } 1301541Srgrimes $2 == "LIBCOMPAT" { 1311541Srgrimes printf("int\to%s();\n", $4) > syscompat 1321541Srgrimes printf("\t{ compat(%d,%s) },\t\t/* %d = old %s */\n", \ 1331541Srgrimes $3, $4, syscall, $5) > sysent 1341541Srgrimes printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \ 1351541Srgrimes $5, syscall, $5) > sysnames 1361541Srgrimes printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \ 1371541Srgrimes $5, syscall) > syshdr 1381541Srgrimes syscall++ 1391541Srgrimes next 1401541Srgrimes } 1411541Srgrimes $2 == "OBSOL" { 1421541Srgrimes printf("\t{ 0, nosys },\t\t\t/* %d = obsolete %s */\n", \ 1431541Srgrimes syscall, comment) > sysent 1441541Srgrimes printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \ 1451541Srgrimes $4, syscall, comment) > sysnames 1461541Srgrimes printf("\t\t\t\t/* %d is obsolete %s */\n", \ 1471541Srgrimes syscall, comment) > syshdr 1481541Srgrimes syscall++ 1491541Srgrimes next 1501541Srgrimes } 1511541Srgrimes $2 == "UNIMPL" { 1521541Srgrimes printf("\t{ 0, nosys },\t\t\t/* %d = %s */\n", \ 1531541Srgrimes syscall, comment) > sysent 1541541Srgrimes printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \ 1551541Srgrimes syscall, syscall, comment) > sysnames 1561541Srgrimes syscall++ 1571541Srgrimes next 1581541Srgrimes } 1591541Srgrimes { 1601541Srgrimes printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2 1611541Srgrimes exit 1 1621541Srgrimes } 1631541Srgrimes END { 1641541Srgrimes printf("\n#else /* %s */\n", compat) > syscompat 1651541Srgrimes printf("#define compat(n, name) 0, nosys\n") > syscompat 1661541Srgrimes printf("#endif /* %s */\n\n", compat) > syscompat 1671541Srgrimes 1681541Srgrimes printf("};\n\n") > sysent 1692257Ssos printf ("struct sysentvec aout_sysvec = {\n") > sysent 1702257Ssos printf ("\tsizeof (sysent) / sizeof (sysent[0]),\n") > sysent 1712257Ssos printf ("\tsysent,\n") > sysent 1722257Ssos printf ("\t0,\n\t0,\n\t0\n};") > sysent 1731541Srgrimes printf("};\n") > sysnames 1741541Srgrimes } ' 1751541Srgrimes 1761541Srgrimescat $sysdcl $syscompat $sysent >$syssw 1771541Srgrimes 1781541Srgrimeschmod 444 $sysnames $syshdr $syssw 179