137326Skarels#! /bin/sh - 2*38668Skarels# @(#)makesyscalls.sh 7.2 (Berkeley) 08/17/89 337326Skarels 437326Skarels# name of compat option: 537326Skarelscompat=COMPAT_43 637326Skarels 737326Skarels# output files: 837326Skarelssysnames="syscalls.c" 9*38668Skarelssyshdr="../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 " 24*38668Skarels 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 44*38668Skarels } 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 } 59*38668Skarels NF == 0 || $1 ~ /^;/ { 6037326Skarels next 6137326Skarels } 62*38668Skarels $1 ~ /^#[ ]*if/ { 6337326Skarels print > sysent 6437326Skarels print > sysdcl 6537326Skarels print > syscompat 6637326Skarels print > sysnames 6737326Skarels savesyscall = syscall 6837326Skarels next 69*38668Skarels } 70*38668Skarels $1 ~ /^#[ ]*else/ { 7137326Skarels print > sysent 7237326Skarels print > sysdcl 7337326Skarels print > syscompat 7437326Skarels print > sysnames 7537326Skarels syscall = savesyscall 7637326Skarels next 77*38668Skarels } 78*38668Skarels $1 ~ /^#/ { 7937326Skarels print > sysent 8037326Skarels print > sysdcl 8137326Skarels print > syscompat 8237326Skarels print > sysnames 8337326Skarels next 84*38668Skarels } 85*38668Skarels syscall != $1 { 8637326Skarels printf "syscall number out of sync at %d; line is:\n", syscall 8737326Skarels print 8837326Skarels exit 1 89*38668Skarels } 9037326Skarels { comment = $4 91*38668Skarels for (i = 5; i <= NF; i++) 9237326Skarels comment = comment " " $i 93*38668Skarels if (NF < 5) 9437326Skarels $5 = $4 95*38668Skarels } 96*38668Skarels $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 104*38668Skarels } 105*38668Skarels $2 == "COMPAT" { 10637326Skarels printf("int\to%s();\n", $4) > syscompat 10737326Skarels printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \ 10837326Skarels $3, $4, syscall, $5) > sysent 10937326Skarels printf("\t\"old %s\",\t\t/* %d = old %s */\n", \ 11037326Skarels $5, syscall, $5) > sysnames 11137326Skarels printf("\t\t\t\t/* %d is old %s */\n", \ 11237326Skarels syscall, comment) > syshdr 113*38668Skarels } 114*38668Skarels $2 == "OBSOL" { 11537326Skarels printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \ 11637326Skarels syscall, comment) > sysent 11737326Skarels 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 121*38668Skarels } 122*38668Skarels $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 127*38668Skarels } 12837326Skarels { syscall++ } 129*38668Skarels 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 142*38668Skarels 143*38668Skarelschmod 444 $sysnames $syshdr $syssw 144