137326Skarels#! /bin/sh - 2*43399Skarels# @(#)makesyscalls.sh 7.5 (Berkeley) 06/21/90 337326Skarels 4*43399Skarelsset -e 5*43399Skarels 637326Skarels# name of compat option: 737326Skarelscompat=COMPAT_43 837326Skarels 937326Skarels# output files: 1037326Skarelssysnames="syscalls.c" 1138668Skarelssyshdr="../sys/syscall.h" 1237326Skarelssyssw="init_sysent.c" 1337326Skarels 1437326Skarels# tmp files: 1537326Skarelssysdcl="sysent.dcl" 1637326Skarelssyscompat="sysent.compat" 1737326Skarelssysent="sysent.switch" 1837326Skarels 19*43399Skarelstrap "rm $sysdcl $syscompat $sysent" 0 20*43399Skarels 2137326Skarelscase $# in 2237326Skarels 0) echo "Usage: $0 input-file" 1>&2 2337326Skarels exit 1 2437326Skarels ;; 2537326Skarelsesac 2637326Skarels 2737326Skarelsawk < $1 " 2838668Skarels BEGIN { 2937326Skarels sysdcl = \"$sysdcl\" 3037326Skarels syscompat = \"$syscompat\" 3137326Skarels sysent = \"$sysent\" 3237326Skarels sysnames = \"$sysnames\" 3337326Skarels syshdr = \"$syshdr\" 3437326Skarels compat = \"$compat\" 35*43399Skarels infile = \"$1\" 3637326Skarels "' 3737326Skarels 3837326Skarels printf "/*\n * System call switch table.\n *\n" > sysdcl 3937326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl 4037326Skarels 4137326Skarels printf "\n#ifdef %s\n", compat > syscompat 4237326Skarels printf "#define compat(n, name) n, o/**/name\n\n" > syscompat 4337326Skarels 4437326Skarels printf "/*\n * System call names.\n *\n" > sysnames 4537326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 4637326Skarels 4737326Skarels printf "/*\n * System call numbers.\n *\n" > syshdr 4837326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 4938668Skarels } 5037326Skarels NR == 1 { 5137326Skarels printf " * created from%s\n */\n\n", $0 > sysdcl 5237326Skarels printf "#include \"param.h\"\n" > sysdcl 5337326Skarels printf "#include \"systm.h\"\n\n" > sysdcl 5437326Skarels printf "int\tnosys();\n\n" > sysdcl 5537326Skarels 5637326Skarels printf "struct sysent sysent[] = {\n" > sysent 5737326Skarels 5837326Skarels printf " * created from%s\n */\n\n", $0 > sysnames 5937326Skarels printf "char *syscallnames[] = {\n" > sysnames 6037326Skarels 6137326Skarels printf " * created from%s\n */\n\n", $0 > syshdr 6237326Skarels next 6337326Skarels } 6438668Skarels NF == 0 || $1 ~ /^;/ { 6537326Skarels next 6637326Skarels } 6738668Skarels $1 ~ /^#[ ]*if/ { 6837326Skarels print > sysent 6937326Skarels print > sysdcl 7037326Skarels print > syscompat 7137326Skarels print > sysnames 7237326Skarels savesyscall = syscall 7337326Skarels next 7438668Skarels } 7538668Skarels $1 ~ /^#[ ]*else/ { 7637326Skarels print > sysent 7737326Skarels print > sysdcl 7837326Skarels print > syscompat 7937326Skarels print > sysnames 8037326Skarels syscall = savesyscall 8137326Skarels next 8238668Skarels } 8338668Skarels $1 ~ /^#/ { 8437326Skarels print > sysent 8537326Skarels print > sysdcl 8637326Skarels print > syscompat 8737326Skarels print > sysnames 8837326Skarels next 8938668Skarels } 9038668Skarels syscall != $1 { 91*43399Skarels printf "%s: line %d: syscall number out of sync at %d\n", \ 92*43399Skarels infile, NR, syscall 93*43399Skarels printf "line is:\n" 9437326Skarels print 9537326Skarels exit 1 9638668Skarels } 9737326Skarels { comment = $4 9838668Skarels for (i = 5; i <= NF; i++) 9937326Skarels comment = comment " " $i 10038668Skarels if (NF < 5) 10137326Skarels $5 = $4 10238668Skarels } 10338668Skarels $2 == "STD" { 10437326Skarels printf("int\t%s();\n", $4) > sysdcl 10537326Skarels printf("\t%d, %s,\t\t\t/* %d = %s */\n", \ 10637326Skarels $3, $4, syscall, $5) > sysent 10737326Skarels printf("\t\"%s\",\t\t\t/* %d = %s */\n", \ 10837326Skarels $5, syscall, $5) > sysnames 10937326Skarels printf("#define\tSYS_%s\t%d\n", \ 11037326Skarels $5, syscall) > syshdr 111*43399Skarels syscall++ 112*43399Skarels next 11338668Skarels } 11438668Skarels $2 == "COMPAT" { 11537326Skarels printf("int\to%s();\n", $4) > syscompat 11642288Smarc printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \ 11737326Skarels $3, $4, syscall, $5) > sysent 118*43399Skarels printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \ 11937326Skarels $5, syscall, $5) > sysnames 120*43399Skarels printf("\t\t\t\t/* %d is old %s */\n", \ 12137326Skarels syscall, comment) > syshdr 122*43399Skarels syscall++ 123*43399Skarels next 12438668Skarels } 125*43399Skarels $2 == "LIBCOMPAT" { 126*43399Skarels printf("int\to%s();\n", $4) > syscompat 127*43399Skarels printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \ 128*43399Skarels $3, $4, syscall, $5) > sysent 129*43399Skarels printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \ 130*43399Skarels $5, syscall, $5) > sysnames 131*43399Skarels printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \ 132*43399Skarels $5, syscall) > syshdr 133*43399Skarels syscall++ 134*43399Skarels next 135*43399Skarels } 13638668Skarels $2 == "OBSOL" { 13737326Skarels printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \ 13837326Skarels syscall, comment) > sysent 13940180Smarc printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \ 14037326Skarels $4, syscall, comment) > sysnames 14137326Skarels printf("\t\t\t\t/* %d is obsolete %s */\n", \ 14237326Skarels syscall, comment) > syshdr 143*43399Skarels syscall++ 144*43399Skarels next 14538668Skarels } 14638668Skarels $2 == "UNIMPL" { 14737326Skarels printf("\t0, nosys,\t\t\t/* %d = %s */\n", \ 14837326Skarels syscall, comment) > sysent 14937326Skarels printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \ 15037326Skarels syscall, syscall, comment) > sysnames 151*43399Skarels syscall++ 152*43399Skarels next 15338668Skarels } 154*43399Skarels { 155*43399Skarels printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2 156*43399Skarels exit 1 157*43399Skarels } 15838668Skarels END { 15937326Skarels printf("\n#else /* %s */\n", compat) > syscompat 16037326Skarels printf("#define compat(n, name) 0, nosys\n") > syscompat 16137326Skarels printf("#endif /* %s */\n\n", compat) > syscompat 16237326Skarels 16337326Skarels printf("};\n\n") > sysent 16437326Skarels printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent 16537326Skarels 16637326Skarels printf("};\n") > sysnames 16737326Skarels } ' 16837326Skarels 16937326Skarelscat $sysdcl $syscompat $sysent >$syssw 17038668Skarels 17138668Skarelschmod 444 $sysnames $syshdr $syssw 172