137326Skarels#! /bin/sh - 2*40180Smarc# @(#)makesyscalls.sh 7.3 (Berkeley) 02/20/90 337326Skarels 437326Skarels# name of compat option: 537326Skarelscompat=COMPAT_43 637326Skarels 737326Skarels# output files: 837326Skarelssysnames="syscalls.c" 938668Skarelssyshdr="../sys/syscall.h" 1037326Skarelssyssw="init_sysent.c" 1137326Skarels 1237326Skarels# tmp files: 1337326Skarelssysdcl="sysent.dcl" 1437326Skarelssyscompat="sysent.compat" 1537326Skarelssysent="sysent.switch" 1637326Skarels 1737326Skarelscase $# in 1837326Skarels 0) echo "Usage: $0 input-file" 1>&2 1937326Skarels exit 1 2037326Skarels ;; 2137326Skarelsesac 2237326Skarels 2337326Skarelsawk < $1 " 2438668Skarels BEGIN { 2537326Skarels sysdcl = \"$sysdcl\" 2637326Skarels syscompat = \"$syscompat\" 2737326Skarels sysent = \"$sysent\" 2837326Skarels sysnames = \"$sysnames\" 2937326Skarels syshdr = \"$syshdr\" 3037326Skarels compat = \"$compat\" 3137326Skarels "' 3237326Skarels 3337326Skarels printf "/*\n * System call switch table.\n *\n" > sysdcl 3437326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl 3537326Skarels 3637326Skarels printf "\n#ifdef %s\n", compat > syscompat 3737326Skarels printf "#define compat(n, name) n, o/**/name\n\n" > syscompat 3837326Skarels 3937326Skarels printf "/*\n * System call names.\n *\n" > sysnames 4037326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 4137326Skarels 4237326Skarels printf "/*\n * System call numbers.\n *\n" > syshdr 4337326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 4438668Skarels } 4537326Skarels NR == 1 { 4637326Skarels printf " * created from%s\n */\n\n", $0 > sysdcl 4737326Skarels printf "#include \"param.h\"\n" > sysdcl 4837326Skarels printf "#include \"systm.h\"\n\n" > sysdcl 4937326Skarels printf "int\tnosys();\n\n" > sysdcl 5037326Skarels 5137326Skarels printf "struct sysent sysent[] = {\n" > sysent 5237326Skarels 5337326Skarels printf " * created from%s\n */\n\n", $0 > sysnames 5437326Skarels printf "char *syscallnames[] = {\n" > sysnames 5537326Skarels 5637326Skarels printf " * created from%s\n */\n\n", $0 > syshdr 5737326Skarels next 5837326Skarels } 5938668Skarels NF == 0 || $1 ~ /^;/ { 6037326Skarels next 6137326Skarels } 6238668Skarels $1 ~ /^#[ ]*if/ { 6337326Skarels print > sysent 6437326Skarels print > sysdcl 6537326Skarels print > syscompat 6637326Skarels print > sysnames 6737326Skarels savesyscall = syscall 6837326Skarels next 6938668Skarels } 7038668Skarels $1 ~ /^#[ ]*else/ { 7137326Skarels print > sysent 7237326Skarels print > sysdcl 7337326Skarels print > syscompat 7437326Skarels print > sysnames 7537326Skarels syscall = savesyscall 7637326Skarels next 7738668Skarels } 7838668Skarels $1 ~ /^#/ { 7937326Skarels print > sysent 8037326Skarels print > sysdcl 8137326Skarels print > syscompat 8237326Skarels print > sysnames 8337326Skarels next 8438668Skarels } 8538668Skarels syscall != $1 { 8637326Skarels printf "syscall number out of sync at %d; line is:\n", syscall 8737326Skarels print 8837326Skarels exit 1 8938668Skarels } 9037326Skarels { comment = $4 9138668Skarels for (i = 5; i <= NF; i++) 9237326Skarels comment = comment " " $i 9338668Skarels if (NF < 5) 9437326Skarels $5 = $4 9538668Skarels } 9638668Skarels $2 == "STD" { 9737326Skarels printf("int\t%s();\n", $4) > sysdcl 9837326Skarels printf("\t%d, %s,\t\t\t/* %d = %s */\n", \ 9937326Skarels $3, $4, syscall, $5) > sysent 10037326Skarels printf("\t\"%s\",\t\t\t/* %d = %s */\n", \ 10137326Skarels $5, syscall, $5) > sysnames 10237326Skarels printf("#define\tSYS_%s\t%d\n", \ 10337326Skarels $5, syscall) > syshdr 10438668Skarels } 10538668Skarels $2 == "COMPAT" { 10637326Skarels printf("int\to%s();\n", $4) > syscompat 107*40180Smarc printf("\tcompat(%d,%s),\t\t/* %d = old_%s */\n", \ 10837326Skarels $3, $4, syscall, $5) > sysent 109*40180Smarc printf("\t\"old %s\",\t\t/* %d = old_%s */\n", \ 11037326Skarels $5, syscall, $5) > sysnames 111*40180Smarc printf("\t\t\t\t/* %d is old_%s */\n", \ 11237326Skarels syscall, comment) > syshdr 11338668Skarels } 11438668Skarels $2 == "OBSOL" { 11537326Skarels printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \ 11637326Skarels syscall, comment) > sysent 117*40180Smarc printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \ 11837326Skarels $4, syscall, comment) > sysnames 11937326Skarels printf("\t\t\t\t/* %d is obsolete %s */\n", \ 12037326Skarels syscall, comment) > syshdr 12138668Skarels } 12238668Skarels $2 == "UNIMPL" { 12337326Skarels printf("\t0, nosys,\t\t\t/* %d = %s */\n", \ 12437326Skarels syscall, comment) > sysent 12537326Skarels printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \ 12637326Skarels syscall, syscall, comment) > sysnames 12738668Skarels } 12837326Skarels { syscall++ } 12938668Skarels END { 13037326Skarels printf("\n#else /* %s */\n", compat) > syscompat 13137326Skarels printf("#define compat(n, name) 0, nosys\n") > syscompat 13237326Skarels printf("#endif /* %s */\n\n", compat) > syscompat 13337326Skarels 13437326Skarels printf("};\n\n") > sysent 13537326Skarels printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent 13637326Skarels 13737326Skarels printf("};\n") > sysnames 13837326Skarels } ' 13937326Skarels 14037326Skarelscat $sysdcl $syscompat $sysent >$syssw 14137326Skarelsrm $sysdcl $syscompat $sysent 14238668Skarels 14338668Skarelschmod 444 $sysnames $syshdr $syssw 144