duplicate TIOCGPGRP for controller - minus the check for controlling terminal
[unix-history] / usr / src / sys / kern / makesyscalls.sh
index 0677a31..6d2fc52 100644 (file)
@@ -1,12 +1,14 @@
 #! /bin/sh -
 #! /bin/sh -
-#      @(#)makesyscalls.sh     7.1 (Berkeley) %G%
+#      @(#)makesyscalls.sh     7.5 (Berkeley) %G%
+
+set -e
 
 # name of compat option:
 compat=COMPAT_43
 
 # output files:
 sysnames="syscalls.c"
 
 # name of compat option:
 compat=COMPAT_43
 
 # output files:
 sysnames="syscalls.c"
-syshdr="syscall.h"
+syshdr="../sys/syscall.h"
 syssw="init_sysent.c"
 
 # tmp files:
 syssw="init_sysent.c"
 
 # tmp files:
@@ -14,6 +16,8 @@ sysdcl="sysent.dcl"
 syscompat="sysent.compat"
 sysent="sysent.switch"
 
 syscompat="sysent.compat"
 sysent="sysent.switch"
 
+trap "rm $sysdcl $syscompat $sysent" 0
+
 case $# in
     0) echo "Usage: $0 input-file" 1>&2
        exit 1
 case $# in
     0) echo "Usage: $0 input-file" 1>&2
        exit 1
@@ -21,13 +25,14 @@ case $# in
 esac
 
 awk < $1 "
 esac
 
 awk < $1 "
-       BEGIN { 
+       BEGIN {
                sysdcl = \"$sysdcl\"
                syscompat = \"$syscompat\"
                sysent = \"$sysent\"
                sysnames = \"$sysnames\"
                syshdr = \"$syshdr\"
                compat = \"$compat\"
                sysdcl = \"$sysdcl\"
                syscompat = \"$syscompat\"
                sysent = \"$sysent\"
                sysnames = \"$sysnames\"
                syshdr = \"$syshdr\"
                compat = \"$compat\"
+               infile = \"$1\"
                "'
 
                printf "/*\n * System call switch table.\n *\n" > sysdcl
                "'
 
                printf "/*\n * System call switch table.\n *\n" > sysdcl
@@ -41,7 +46,7 @@ awk < $1 "
 
                printf "/*\n * System call numbers.\n *\n" > syshdr
                printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
 
                printf "/*\n * System call numbers.\n *\n" > syshdr
                printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
-       } 
+       }
        NR == 1 {
                printf " * created from%s\n */\n\n", $0 > sysdcl
                printf "#include \"param.h\"\n" > sysdcl
        NR == 1 {
                printf " * created from%s\n */\n\n", $0 > sysdcl
                printf "#include \"param.h\"\n" > sysdcl
@@ -56,44 +61,46 @@ awk < $1 "
                printf " * created from%s\n */\n\n", $0 > syshdr
                next
        }
                printf " * created from%s\n */\n\n", $0 > syshdr
                next
        }
-       NF == 0 || $1 ~ /^;/ { 
+       NF == 0 || $1 ~ /^;/ {
                next
        }
                next
        }
-       $1 ~ /^#[       ]*if/ { 
+       $1 ~ /^#[       ]*if/ {
                print > sysent
                print > sysdcl
                print > syscompat
                print > sysnames
                savesyscall = syscall
                next
                print > sysent
                print > sysdcl
                print > syscompat
                print > sysnames
                savesyscall = syscall
                next
-       } 
-       $1 ~ /^#[       ]*else/ { 
+       }
+       $1 ~ /^#[       ]*else/ {
                print > sysent
                print > sysdcl
                print > syscompat
                print > sysnames
                syscall = savesyscall
                next
                print > sysent
                print > sysdcl
                print > syscompat
                print > sysnames
                syscall = savesyscall
                next
-       } 
-       $1 ~ /^#/ { 
+       }
+       $1 ~ /^#/ {
                print > sysent
                print > sysdcl
                print > syscompat
                print > sysnames
                next
                print > sysent
                print > sysdcl
                print > syscompat
                print > sysnames
                next
-       } 
-       syscall != $1 { 
-               printf "syscall number out of sync at %d; line is:\n", syscall
+       }
+       syscall != $1 {
+               printf "%s: line %d: syscall number out of sync at %d\n", \
+                  infile, NR, syscall
+               printf "line is:\n"
                print
                exit 1
                print
                exit 1
-       } 
+       }
        {       comment = $4
        {       comment = $4
-               for (i = 5; i <= NF; i++) 
+               for (i = 5; i <= NF; i++)
                        comment = comment " " $i
                        comment = comment " " $i
-               if (NF < 5) 
+               if (NF < 5)
                        $5 = $4
                        $5 = $4
-       } 
-       $2 == "STD" { 
+       }
+       $2 == "STD" {
                printf("int\t%s();\n", $4) > sysdcl
                printf("\t%d, %s,\t\t\t/* %d = %s */\n", \
                    $3, $4, syscall, $5) > sysent
                printf("int\t%s();\n", $4) > sysdcl
                printf("\t%d, %s,\t\t\t/* %d = %s */\n", \
                    $3, $4, syscall, $5) > sysent
@@ -101,32 +108,54 @@ awk < $1 "
                    $5, syscall, $5) > sysnames
                printf("#define\tSYS_%s\t%d\n", \
                    $5, syscall) > syshdr
                    $5, syscall, $5) > sysnames
                printf("#define\tSYS_%s\t%d\n", \
                    $5, syscall) > syshdr
-       } 
-       $2 == "COMPAT" { 
+               syscall++
+               next
+       }
+       $2 == "COMPAT" {
                printf("int\to%s();\n", $4) > syscompat
                printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
                    $3, $4, syscall, $5) > sysent
                printf("int\to%s();\n", $4) > syscompat
                printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
                    $3, $4, syscall, $5) > sysent
-               printf("\t\"old %s\",\t\t/* %d = old %s */\n", \
+               printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
                    $5, syscall, $5) > sysnames
                printf("\t\t\t\t/* %d is old %s */\n", \
                    syscall, comment) > syshdr
                    $5, syscall, $5) > sysnames
                printf("\t\t\t\t/* %d is old %s */\n", \
                    syscall, comment) > syshdr
-       } 
-       $2 == "OBSOL" { 
+               syscall++
+               next
+       }
+       $2 == "LIBCOMPAT" {
+               printf("int\to%s();\n", $4) > syscompat
+               printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
+                   $3, $4, syscall, $5) > sysent
+               printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
+                   $5, syscall, $5) > sysnames
+               printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \
+                   $5, syscall) > syshdr
+               syscall++
+               next
+       }
+       $2 == "OBSOL" {
                printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \
                    syscall, comment) > sysent
                printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \
                    syscall, comment) > sysent
-               printf("\t\"obs %s\",\t\t\t/* %d = obsolete %s */\n", \
+               printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \
                    $4, syscall, comment) > sysnames
                printf("\t\t\t\t/* %d is obsolete %s */\n", \
                    syscall, comment) > syshdr
                    $4, syscall, comment) > sysnames
                printf("\t\t\t\t/* %d is obsolete %s */\n", \
                    syscall, comment) > syshdr
-       } 
-       $2 == "UNIMPL" { 
+               syscall++
+               next
+       }
+       $2 == "UNIMPL" {
                printf("\t0, nosys,\t\t\t/* %d = %s */\n", \
                    syscall, comment) > sysent
                printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
                    syscall, syscall, comment) > sysnames
                printf("\t0, nosys,\t\t\t/* %d = %s */\n", \
                    syscall, comment) > sysent
                printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
                    syscall, syscall, comment) > sysnames
-       } 
-       { syscall++ }
-       END { 
+               syscall++
+               next
+       }
+       {
+               printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2
+               exit 1
+       }
+       END {
                printf("\n#else /* %s */\n", compat) > syscompat
                printf("#define compat(n, name) 0, nosys\n") > syscompat
                printf("#endif /* %s */\n\n", compat) > syscompat
                printf("\n#else /* %s */\n", compat) > syscompat
                printf("#define compat(n, name) 0, nosys\n") > syscompat
                printf("#endif /* %s */\n\n", compat) > syscompat
@@ -138,4 +167,5 @@ awk < $1 "
        } '
 
 cat $sysdcl $syscompat $sysent >$syssw
        } '
 
 cat $sysdcl $syscompat $sysent >$syssw
-rm $sysdcl $syscompat $sysent
+
+chmod 444 $sysnames $syshdr $syssw