1#! /bin/sh - 2# from: @(#)makesyscalls.sh 7.6 (Berkeley) 4/20/91 3# $Id: makesyscalls.sh,v 1.5 1993/06/07 19:52:40 cgd Exp $ 4 5set -e 6 7# name of compat option: 8compat=COMPAT_43 9 10# output files: 11sysnames="syscalls.c" 12syshdr="../sys/syscall.h" 13syssw="init_sysent.c" 14 15# tmp files: 16sysdcl="sysent.dcl" 17syscompat="sysent.compat" 18sysent="sysent.switch" 19 20trap "rm $sysdcl $syscompat $sysent" 0 21 22case $# in 23 0) echo "Usage: $0 input-file" 1>&2 24 exit 1 25 ;; 26esac 27 28awk < $1 " 29 BEGIN { 30 sysdcl = \"$sysdcl\" 31 syscompat = \"$syscompat\" 32 sysent = \"$sysent\" 33 sysnames = \"$sysnames\" 34 syshdr = \"$syshdr\" 35 compat = \"$compat\" 36 infile = \"$1\" 37 "' 38 39 printf "/*\n * System call switch table.\n *\n" > sysdcl 40 printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl 41 42 printf "\n#ifdef %s\n", compat > syscompat 43 printf "#define compat(n, name) n, __CONCAT(o,name)\n\n" > syscompat 44 45 printf "/*\n * System call names.\n *\n" > sysnames 46 printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 47 48 printf "/*\n * System call numbers.\n *\n" > syshdr 49 printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 50 } 51 NR == 1 { 52 printf " * created from: %s %s %s %s\n */\n\n",$2,$3,$4,$5 > sysdcl 53 printf "#include \"param.h\"\n" > sysdcl 54 printf "#include \"systm.h\"\n\n" > sysdcl 55 printf "int\tnosys();\n\n" > sysdcl 56 57 printf "struct sysent sysent[] = {\n" > sysent 58 59 printf " * created from: %s %s %s %s\n */\n\n",$2,$3,$4,$5 > sysnames 60 printf "char *syscallnames[] = {\n" > sysnames 61 62 printf " * created from: %s %s %s %s\n */\n\n",$2,$3,$4,$5 > syshdr 63 printf "#ifndef _SYS_SYSCALL_H\n" > syshdr 64 printf "#define _SYS_SYSCALL_H\n" > syshdr 65 printf "\n" > syshdr 66 next 67 } 68 NF == 0 || $1 ~ /^;/ { 69 next 70 } 71 $1 ~ /^#[ ]*if/ { 72 print > sysent 73 print > sysdcl 74 print > syscompat 75 print > sysnames 76 savesyscall = syscall 77 next 78 } 79 $1 ~ /^#[ ]*else/ { 80 print > sysent 81 print > sysdcl 82 print > syscompat 83 print > sysnames 84 syscall = savesyscall 85 next 86 } 87 $1 ~ /^#/ { 88 print > sysent 89 print > sysdcl 90 print > syscompat 91 print > sysnames 92 next 93 } 94 syscall != $1 { 95 printf "%s: line %d: syscall number out of sync at %d\n", \ 96 infile, NR, syscall 97 printf "line is:\n" 98 print 99 exit 1 100 } 101 { comment = $4 102 for (i = 5; i <= NF; i++) 103 comment = comment " " $i 104 if (NF < 5) 105 $5 = $4 106 } 107 $2 == "STD" || $2 == "NODEF" { 108 printf("int\t%s();\n", $4) > sysdcl 109 printf("\t%d, %s,\t\t\t/* %d = %s */\n", \ 110 $3, $4, syscall, $5) > sysent 111 printf("\t\"%s\",\t\t\t/* %d = %s */\n", \ 112 $5, syscall, $5) > sysnames 113 if ($2 == "STD") 114 printf("#define\tSYS_%s\t%d\n", \ 115 $5, syscall) > syshdr 116 syscall++ 117 next 118 } 119 $2 == "COMPAT" { 120 printf("int\to%s();\n", $4) > syscompat 121 printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \ 122 $3, $4, syscall, $5) > sysent 123 printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \ 124 $5, syscall, $5) > sysnames 125 printf("\t\t\t\t/* %d is old %s */\n", \ 126 syscall, comment) > syshdr 127 syscall++ 128 next 129 } 130 $2 == "LIBCOMPAT" { 131 printf("int\to%s();\n", $4) > syscompat 132 printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \ 133 $3, $4, syscall, $5) > sysent 134 printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \ 135 $5, syscall, $5) > sysnames 136 printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \ 137 $5, syscall) > syshdr 138 syscall++ 139 next 140 } 141 $2 == "OBSOL" { 142 printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \ 143 syscall, comment) > sysent 144 printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \ 145 $4, syscall, comment) > sysnames 146 printf("\t\t\t\t/* %d is obsolete %s */\n", \ 147 syscall, comment) > syshdr 148 syscall++ 149 next 150 } 151 $2 == "UNIMPL" { 152 printf("\t0, nosys,\t\t\t/* %d = %s */\n", \ 153 syscall, comment) > sysent 154 printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \ 155 syscall, syscall, comment) > sysnames 156 syscall++ 157 next 158 } 159 { 160 printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2 161 exit 1 162 } 163 END { 164 printf("\n#else /* %s */\n", compat) > syscompat 165 printf("#define compat(n, name) 0, nosys\n") > syscompat 166 printf("#endif /* %s */\n\n", compat) > syscompat 167 168 printf("};\n\n") > sysent 169 printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent 170 171 printf("};\n") > sysnames 172 173 printf "\n" > syshdr 174 printf "#endif /* _SYS_SYSCALL_H */\n" > syshdr 175 } ' 176 177cat $sysdcl $syscompat $sysent >$syssw 178 179#chmod 444 $sysnames $syshdr $syssw 180