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