makesyscalls.sh revision 177597
11541Srgrimes#! /bin/sh - 21541Srgrimes# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93 350477Speter# $FreeBSD: head/sys/kern/makesyscalls.sh 177597 2008-03-25 09:11:53Z ru $ 41541Srgrimes 51541Srgrimesset -e 61541Srgrimes 799854Salfred# name of compat options: 81541Srgrimescompat=COMPAT_43 999854Salfredcompat4=COMPAT_FREEBSD4 10171208Spetercompat6=COMPAT_FREEBSD6 111541Srgrimes 121541Srgrimes# output files: 131541Srgrimessysnames="syscalls.c" 1410905Sbdesysproto="../sys/sysproto.h" 1510905Sbdesysproto_h=_SYS_SYSPROTO_H_ 161541Srgrimessyshdr="../sys/syscall.h" 1734354Sjbsysmk="../sys/syscall.mk" 181541Srgrimessyssw="init_sysent.c" 1911294Sswallacesyscallprefix="SYS_" 2011294Sswallaceswitchname="sysent" 2111294Sswallacenamesname="syscallnames" 22160942Sjbsystrace="systrace_args.c" 231541Srgrimes 241541Srgrimes# tmp files: 25161327Sjhbsysaue="sysent.aue.$$" 2631627Sjmgsysdcl="sysent.dcl.$$" 2731627Sjmgsyscompat="sysent.compat.$$" 2831627Sjmgsyscompatdcl="sysent.compatdcl.$$" 2999854Salfredsyscompat4="sysent.compat4.$$" 3099854Salfredsyscompat4dcl="sysent.compat4dcl.$$" 31171208Spetersyscompat6="sysent.compat6.$$" 32171208Spetersyscompat6dcl="sysent.compat6dcl.$$" 3331627Sjmgsysent="sysent.switch.$$" 3431627Sjmgsysinc="sysinc.switch.$$" 3531627Sjmgsysarg="sysarg.switch.$$" 3699854Salfredsysprotoend="sysprotoend.$$" 371541Srgrimes 38171208Spetertrap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend" 0 391541Srgrimes 40171208Spetertouch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend 4124373Speter 421541Srgrimescase $# in 4395258Sdes 0) echo "usage: $0 input-file <config-file>" 1>&2 441541Srgrimes exit 1 451541Srgrimes ;; 461541Srgrimesesac 471541Srgrimes 4836735Sdfrif [ -n "$2" -a -f "$2" ]; then 4911294Sswallace . $2 5011294Sswallacefi 5111294Sswallace 5211294Sswallacesed -e ' 5311294Sswallaces/\$//g 5411294Sswallace:join 5511294Sswallace /\\$/{a\ 5611294Sswallace 5711294Sswallace N 5811294Sswallace s/\\\n// 5911294Sswallace b join 6011294Sswallace } 6111294Sswallace2,${ 6211294Sswallace /^#/!s/\([{}()*,]\)/ \1 /g 6311294Sswallace} 6411294Sswallace' < $1 | awk " 651541Srgrimes BEGIN { 66161327Sjhb sysaue = \"$sysaue\" 671541Srgrimes sysdcl = \"$sysdcl\" 6810905Sbde sysproto = \"$sysproto\" 6999854Salfred sysprotoend = \"$sysprotoend\" 7010905Sbde sysproto_h = \"$sysproto_h\" 711541Srgrimes syscompat = \"$syscompat\" 7211294Sswallace syscompatdcl = \"$syscompatdcl\" 7399854Salfred syscompat4 = \"$syscompat4\" 7499854Salfred syscompat4dcl = \"$syscompat4dcl\" 75171208Speter syscompat6 = \"$syscompat6\" 76171208Speter syscompat6dcl = \"$syscompat6dcl\" 771541Srgrimes sysent = \"$sysent\" 7836782Sbde syssw = \"$syssw\" 7911294Sswallace sysinc = \"$sysinc\" 8011294Sswallace sysarg = \"$sysarg\" 811541Srgrimes sysnames = \"$sysnames\" 821541Srgrimes syshdr = \"$syshdr\" 8334354Sjb sysmk = \"$sysmk\" 84160942Sjb systrace = \"$systrace\" 851541Srgrimes compat = \"$compat\" 8699854Salfred compat4 = \"$compat4\" 87171208Speter compat6 = \"$compat6\" 8811294Sswallace syscallprefix = \"$syscallprefix\" 8911294Sswallace switchname = \"$switchname\" 9011294Sswallace namesname = \"$namesname\" 911541Srgrimes infile = \"$1\" 921541Srgrimes "' 931541Srgrimes 9436782Sbde printf "/*\n * System call switch table.\n *\n" > syssw 9536782Sbde printf " * DO NOT EDIT-- this file is automatically generated.\n" > syssw 9689977Sbde printf " * $%s$\n", "FreeBSD" > syssw 9710905Sbde 9811294Sswallace printf "/*\n * System call prototypes.\n *\n" > sysarg 9911294Sswallace printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysarg 10089977Sbde printf " * $%s$\n", "FreeBSD" > sysarg 1011541Srgrimes 10231785Seivind printf "\n#ifdef %s\n\n", compat > syscompat 10399854Salfred printf "\n#ifdef %s\n\n", compat4 > syscompat4 104171208Speter printf "\n#ifdef %s\n\n", compat6 > syscompat6 1051541Srgrimes 1061541Srgrimes printf "/*\n * System call names.\n *\n" > sysnames 1071541Srgrimes printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 10889977Sbde printf " * $%s$\n", "FreeBSD" > sysnames 1091541Srgrimes 1101541Srgrimes printf "/*\n * System call numbers.\n *\n" > syshdr 1111541Srgrimes printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 11289977Sbde printf " * $%s$\n", "FreeBSD" > syshdr 11334354Sjb printf "# FreeBSD system call names.\n" > sysmk 11434354Sjb printf "# DO NOT EDIT-- this file is automatically generated.\n" > sysmk 11589984Sbde printf "# $%s$\n", "FreeBSD" > sysmk 116160942Sjb 117160942Sjb printf "/*\n * System call argument to DTrace register array converstion.\n *\n" > systrace 118160942Sjb printf " * DO NOT EDIT-- this file is automatically generated.\n" > systrace 119160942Sjb printf " * $%s$\n", "FreeBSD" > systrace 1201541Srgrimes } 1211541Srgrimes NR == 1 { 12250478Speter gsub("[$]FreeBSD: ", "", $0) 12310906Sbde gsub(" [$]", "", $0) 12411294Sswallace 12536782Sbde printf " * created from%s\n */\n\n", $0 > syssw 12611294Sswallace 12736782Sbde printf "\n/* The casts are bogus but will do for now. */\n" > sysent 12811294Sswallace printf "struct sysent %s[] = {\n",switchname > sysent 12910905Sbde 13011294Sswallace printf " * created from%s\n */\n\n", $0 > sysarg 13133039Sbde printf "#ifndef %s\n", sysproto_h > sysarg 13233039Sbde printf "#define\t%s\n\n", sysproto_h > sysarg 133103574Salfred printf "#include <sys/signal.h>\n" > sysarg 134103574Salfred printf "#include <sys/acl.h>\n" > sysarg 135177597Sru printf "#include <sys/cpuset.h>\n" > sysarg 136164184Strhodes printf "#include <sys/_semaphore.h>\n" > sysarg 137112903Sjeff printf "#include <sys/ucontext.h>\n\n" > sysarg 138161327Sjhb printf "#include <bsm/audit_kevents.h>\n\n" > sysarg 13933039Sbde printf "struct proc;\n\n" > sysarg 14083366Sjulian printf "struct thread;\n\n" > sysarg 14136770Sbde printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg 14236770Sbde printf "\t\t0 : sizeof(register_t) - sizeof(t))\n\n" > sysarg 14382149Stmm printf "#if BYTE_ORDER == LITTLE_ENDIAN\n"> sysarg 14482149Stmm printf "#define\tPADL_(t)\t0\n" > sysarg 14582149Stmm printf "#define\tPADR_(t)\tPAD_(t)\n" > sysarg 14682149Stmm printf "#else\n" > sysarg 14782149Stmm printf "#define\tPADL_(t)\tPAD_(t)\n" > sysarg 14882149Stmm printf "#define\tPADR_(t)\t0\n" > sysarg 14982149Stmm printf "#endif\n\n" > sysarg 1501541Srgrimes 1511541Srgrimes printf " * created from%s\n */\n\n", $0 > sysnames 152106149Sdwmalone printf "const char *%s[] = {\n", namesname > sysnames 1531541Srgrimes 1541541Srgrimes printf " * created from%s\n */\n\n", $0 > syshdr 1552700Swollman 15634354Sjb printf "# created from%s\nMIASM = ", $0 > sysmk 15734354Sjb 158160942Sjb printf " * This file is part of the DTrace syscall provider.\n */\n\n" > systrace 159160942Sjb printf "static void\nsystrace_args(int sysnum, void *params, u_int64_t *uarg, int *n_args)\n{\n" > systrace 160160942Sjb printf "\tint64_t *iarg = (int64_t *) uarg;\n" > systrace 161160942Sjb printf "\tswitch (sysnum) {\n" > systrace 162160942Sjb 1631541Srgrimes next 1641541Srgrimes } 1651541Srgrimes NF == 0 || $1 ~ /^;/ { 1661541Srgrimes next 1671541Srgrimes } 16811294Sswallace $1 ~ /^#[ ]*include/ { 16911294Sswallace print > sysinc 17011294Sswallace next 17111294Sswallace } 1721541Srgrimes $1 ~ /^#[ ]*if/ { 1731541Srgrimes print > sysent 1741541Srgrimes print > sysdcl 17511294Sswallace print > sysarg 1761541Srgrimes print > syscompat 17799854Salfred print > syscompat4 178171208Speter print > syscompat6 1791541Srgrimes print > sysnames 1801541Srgrimes savesyscall = syscall 1811541Srgrimes next 1821541Srgrimes } 1831541Srgrimes $1 ~ /^#[ ]*else/ { 1841541Srgrimes print > sysent 1851541Srgrimes print > sysdcl 18611294Sswallace print > sysarg 1871541Srgrimes print > syscompat 18899854Salfred print > syscompat4 189171208Speter print > syscompat6 1901541Srgrimes print > sysnames 1911541Srgrimes syscall = savesyscall 1921541Srgrimes next 1931541Srgrimes } 1941541Srgrimes $1 ~ /^#/ { 1951541Srgrimes print > sysent 1961541Srgrimes print > sysdcl 19711294Sswallace print > sysarg 1981541Srgrimes print > syscompat 19999854Salfred print > syscompat4 200171208Speter print > syscompat6 2011541Srgrimes print > sysnames 2021541Srgrimes next 2031541Srgrimes } 2041541Srgrimes syscall != $1 { 20536770Sbde printf "%s: line %d: syscall number out of sync at %d\n", 20636770Sbde infile, NR, syscall 2071541Srgrimes printf "line is:\n" 2081541Srgrimes print 2091541Srgrimes exit 1 2101541Srgrimes } 21160287Sbde function align_sysent_comment(column) { 21260287Sbde printf("\t") > sysent 21360287Sbde column = column + 8 - column % 8 21460287Sbde while (column < 56) { 21560287Sbde printf("\t") > sysent 21660287Sbde column = column + 8 21760287Sbde } 21860287Sbde } 21911294Sswallace function parserr(was, wanted) { 22036770Sbde printf "%s: line %d: unexpected %s (expected %s)\n", 22111294Sswallace infile, NR, was, wanted 22211294Sswallace exit 1 22311294Sswallace } 22411294Sswallace function parseline() { 225146806Srwatson f=4 # toss number, type, audit event 22611294Sswallace argc= 0; 22760287Sbde argssize = "0" 22811294Sswallace if ($NF != "}") { 22911294Sswallace funcalias=$(NF-2) 23011294Sswallace argalias=$(NF-1) 23111294Sswallace rettype=$NF 23211294Sswallace end=NF-3 23311294Sswallace } else { 23411294Sswallace funcalias="" 23511294Sswallace argalias="" 23611294Sswallace rettype="int" 23711294Sswallace end=NF 23810905Sbde } 239146806Srwatson if ($3 == "NODEF") { 240146806Srwatson auditev="AUE_NULL" 241146806Srwatson funcname=$4 242146806Srwatson argssize = "AS(" $6 ")" 24311294Sswallace return 24411294Sswallace } 24511294Sswallace if ($f != "{") 24611294Sswallace parserr($f, "{") 24711294Sswallace f++ 24811294Sswallace if ($end != "}") 24911294Sswallace parserr($end, "}") 25011294Sswallace end-- 25111294Sswallace if ($end != ";") 25211294Sswallace parserr($end, ";") 25311294Sswallace end-- 25411294Sswallace if ($end != ")") 25511294Sswallace parserr($end, ")") 25611294Sswallace end-- 25711294Sswallace 25811294Sswallace f++ #function return type 25911294Sswallace 26011294Sswallace funcname=$f 26111294Sswallace if (funcalias == "") 26211294Sswallace funcalias = funcname 26311294Sswallace if (argalias == "") { 26411294Sswallace argalias = funcname "_args" 265146806Srwatson if ($3 == "COMPAT") 26611330Sswallace argalias = "o" argalias 267146806Srwatson if ($3 == "COMPAT4") 26899854Salfred argalias = "freebsd4_" argalias 269171208Speter if ($3 == "COMPAT6") 270171208Speter argalias = "freebsd6_" argalias 27111294Sswallace } 27211294Sswallace f++ 27311294Sswallace 27411294Sswallace if ($f != "(") 27511294Sswallace parserr($f, ")") 27611294Sswallace f++ 27711294Sswallace 27811294Sswallace if (f == end) { 27911294Sswallace if ($f != "void") 28011294Sswallace parserr($f, "argument definition") 28111294Sswallace return 28211294Sswallace } 28311294Sswallace 28411294Sswallace while (f <= end) { 28511294Sswallace argc++ 28611294Sswallace argtype[argc]="" 28711294Sswallace oldf="" 28811294Sswallace while (f < end && $(f+1) != ",") { 28911294Sswallace if (argtype[argc] != "" && oldf != "*") 29011294Sswallace argtype[argc] = argtype[argc]" "; 29111294Sswallace argtype[argc] = argtype[argc]$f; 29211294Sswallace oldf = $f; 29311294Sswallace f++ 29411294Sswallace } 29511294Sswallace if (argtype[argc] == "") 29611294Sswallace parserr($f, "argument definition") 29711294Sswallace argname[argc]=$f; 29811294Sswallace f += 2; # skip name, and any comma 29911294Sswallace } 30060287Sbde if (argc != 0) 30160287Sbde argssize = "AS(" argalias ")" 3021541Srgrimes } 303146806Srwatson { comment = $4 304146806Srwatson if (NF < 7) 305146806Srwatson for (i = 5; i <= NF; i++) 30611294Sswallace comment = comment " " $i 30711294Sswallace } 30882585Sdillon 309146806Srwatson # 310146806Srwatson # The AUE_ audit event identifier. 311146806Srwatson # 312146806Srwatson { 313146806Srwatson auditev = $2; 314146806Srwatson } 315146806Srwatson 316146806Srwatson $3 == "STD" || $3 == "NODEF" || $3 == "NOARGS" || $3 == "NOPROTO" \ 317146806Srwatson || $3 == "NOIMPL" || $3 == "NOSTD" { 31811294Sswallace parseline() 319160942Sjb printf("\t/* %s */\n\tcase %d: {\n", funcname, syscall) > systrace 320160942Sjb if (argc > 0) { 321160942Sjb printf("\t\tstruct %s *p = params;\n", argalias) > systrace 322160942Sjb for (i = 1; i <= argc; i++) { 323160942Sjb if (index(argtype[i], "*") > 0 || argtype[i] == "caddr_t") 324160942Sjb printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \ 325160942Sjb i - 1, \ 326160942Sjb argname[i], argtype[i]) > systrace 327160942Sjb else if (substr(argtype[i], 1, 1) == "u" || argtype[i] == "size_t") 328160942Sjb printf("\t\tuarg[%d] = p->%s; /* %s */\n", \ 329160942Sjb i - 1, \ 330160942Sjb argname[i], argtype[i]) > systrace 331160942Sjb else 332160942Sjb printf("\t\tiarg[%d] = p->%s; /* %s */\n", \ 333160942Sjb i - 1, \ 334160942Sjb argname[i], argtype[i]) > systrace 335160942Sjb } 336160942Sjb } 337160942Sjb printf("\t\t*n_args = %d;\n\t\tbreak;\n\t}\n", argc) > systrace 33811330Sswallace if ((!nosys || funcname != "nosys") && \ 33969448Salfred (funcname != "lkmnosys") && (funcname != "lkmressys")) { 340146806Srwatson if (argc != 0 && $3 != "NOARGS" && $3 != "NOPROTO") { 34183046Sobrien printf("struct %s {\n", argalias) > sysarg 34211294Sswallace for (i = 1; i <= argc; i++) 34382149Stmm printf("\tchar %s_l_[PADL_(%s)]; " \ 34482149Stmm "%s %s; char %s_r_[PADR_(%s)];\n", 34582149Stmm argname[i], argtype[i], 34636735Sdfr argtype[i], argname[i], 34736735Sdfr argname[i], argtype[i]) > sysarg 34811294Sswallace printf("};\n") > sysarg 34911294Sswallace } 350146806Srwatson else if ($3 != "NOARGS" && $3 != "NOPROTO" && \ 351146806Srwatson $3 != "NODEF") 35283046Sobrien printf("struct %s {\n\tregister_t dummy;\n};\n", 35336770Sbde argalias) > sysarg 35410905Sbde } 355146806Srwatson if (($3 != "NOPROTO" && $3 != "NODEF" && \ 35684600Smarcel (funcname != "nosys" || !nosys)) || \ 35784600Smarcel (funcname == "lkmnosys" && !lkmnosys) || \ 35884600Smarcel funcname == "lkmressys") { 35992721Salfred printf("%s\t%s(struct thread *, struct %s *)", 36018277Sbde rettype, funcname, argalias) > sysdcl 36118277Sbde printf(";\n") > sysdcl 362161327Sjhb printf("#define\t%sAUE_%s\t%s\n", syscallprefix, 363161327Sjhb funcalias, auditev) > sysaue 36411330Sswallace } 36511294Sswallace if (funcname == "nosys") 3662671Sats nosys = 1 36711294Sswallace if (funcname == "lkmnosys") 3684216Sats lkmnosys = 1 369160798Sjhb printf("\t{ %s, (sy_call_t *)", argssize) > sysent 370160798Sjhb column = 8 + 2 + length(argssize) + 15 371146806Srwatson if ($3 == "NOIMPL") { 372160942Sjb printf("%s },", "nosys, AUE_NULL, NULL, 0, 0") > sysent 37369445Salfred column = column + length("nosys") + 3 374146806Srwatson } else if ($3 == "NOSTD") { 375160942Sjb printf("%s },", "lkmressys, AUE_NULL, NULL, 0, 0") > sysent 37684600Smarcel column = column + length("lkmressys") + 3 37769445Salfred } else { 378160942Sjb printf("%s, %s, NULL, 0, 0 },", funcname, auditev) > sysent 379146806Srwatson column = column + length(funcname) + length(auditev) + 3 38069445Salfred } 38160287Sbde align_sysent_comment(column) 38258963Salfred printf("/* %d = %s */\n", syscall, funcalias) > sysent 38336770Sbde printf("\t\"%s\",\t\t\t/* %d = %s */\n", 38411294Sswallace funcalias, syscall, funcalias) > sysnames 385146806Srwatson if ($3 != "NODEF") { 38636770Sbde printf("#define\t%s%s\t%d\n", syscallprefix, 38711294Sswallace funcalias, syscall) > syshdr 38834354Sjb printf(" \\\n\t%s.o", funcalias) > sysmk 38934354Sjb } 3901541Srgrimes syscall++ 3911541Srgrimes next 3921541Srgrimes } 393171208Speter $3 == "COMPAT" || $3 == "COMPAT4" || $3 == "COMPAT6" || $3 == "CPT_NOA" { 394146806Srwatson if ($3 == "COMPAT" || $3 == "CPT_NOA") { 39599854Salfred ncompat++ 39699854Salfred out = syscompat 39799854Salfred outdcl = syscompatdcl 39899854Salfred wrap = "compat" 39999854Salfred prefix = "o" 400146806Srwatson } else if ($3 == "COMPAT4") { 40199854Salfred ncompat4++ 40299854Salfred out = syscompat4 40399854Salfred outdcl = syscompat4dcl 40499854Salfred wrap = "compat4" 40599854Salfred prefix = "freebsd4_" 406171208Speter } else if ($3 == "COMPAT6") { 407171208Speter ncompat6++ 408171208Speter out = syscompat6 409171208Speter outdcl = syscompat6dcl 410171208Speter wrap = "compat6" 411171208Speter prefix = "freebsd6_" 41299854Salfred } 41311294Sswallace parseline() 414146806Srwatson if (argc != 0 && $3 != "CPT_NOA") { 41599854Salfred printf("struct %s {\n", argalias) > out 41611294Sswallace for (i = 1; i <= argc; i++) 41782149Stmm printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \ 41882149Stmm "char %s_r_[PADR_(%s)];\n", 41982149Stmm argname[i], argtype[i], 42036735Sdfr argtype[i], argname[i], 42199854Salfred argname[i], argtype[i]) > out 42299854Salfred printf("};\n") > out 42311294Sswallace } 424146806Srwatson else if($3 != "CPT_NOA") 42583046Sobrien printf("struct %s {\n\tregister_t dummy;\n};\n", 42636770Sbde argalias) > sysarg 42799854Salfred printf("%s\t%s%s(struct thread *, struct %s *);\n", 42899854Salfred rettype, prefix, funcname, argalias) > outdcl 429160942Sjb printf("\t{ %s(%s,%s), %s, NULL, 0, 0 },", 430160798Sjhb wrap, argssize, funcname, auditev) > sysent 431160798Sjhb align_sysent_comment(8 + 9 + \ 432146806Srwatson length(argssize) + 1 + length(funcname) + length(auditev) + 4) 43360287Sbde printf("/* %d = old %s */\n", syscall, funcalias) > sysent 434171208Speter printf("\t\"%s.%s\",\t\t/* %d = old %s */\n", 435171208Speter wrap, funcalias, syscall, funcalias) > sysnames 436171208Speter if ($3 == "COMPAT" || $3 == "CPT_NOA") { 437171208Speter printf("\t\t\t\t/* %d is old %s */\n", 438171208Speter syscall, funcalias) > syshdr 439171208Speter } else { 440171208Speter printf("#define\t%s%s%s\t%d\n", syscallprefix, 441171208Speter prefix, funcalias, syscall) > syshdr 442171208Speter printf(" \\\n\t%s%s.o", prefix, funcalias) > sysmk 443171208Speter } 4441541Srgrimes syscall++ 4451541Srgrimes next 4461541Srgrimes } 447146806Srwatson $3 == "LIBCOMPAT" { 44836782Sbde ncompat++ 44911294Sswallace parseline() 45011294Sswallace printf("%s\to%s();\n", rettype, funcname) > syscompatdcl 451160942Sjb printf("\t{ compat(%s,%s), %s, NULL, 0, 0 },", 452160798Sjhb argssize, funcname, auditev) > sysent 453160798Sjhb align_sysent_comment(8 + 9 + \ 454146806Srwatson length(argssize) + 1 + length(funcname) + length(auditev) + 4) 45560287Sbde printf("/* %d = old %s */\n", syscall, funcalias) > sysent 45636770Sbde printf("\t\"old.%s\",\t\t/* %d = old %s */\n", 45711294Sswallace funcalias, syscall, funcalias) > sysnames 45836770Sbde printf("#define\t%s%s\t%d\t/* compatibility; still used by libc */\n", 45911294Sswallace syscallprefix, funcalias, syscall) > syshdr 46034354Sjb printf(" \\\n\t%s.o", funcalias) > sysmk 4611541Srgrimes syscall++ 4621541Srgrimes next 4631541Srgrimes } 464146806Srwatson $3 == "OBSOL" { 465160942Sjb printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },") > sysent 46660287Sbde align_sysent_comment(34) 46760287Sbde printf("/* %d = obsolete %s */\n", syscall, comment) > sysent 46836770Sbde printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", 469146806Srwatson $4, syscall, comment) > sysnames 47036770Sbde printf("\t\t\t\t/* %d is obsolete %s */\n", 4711541Srgrimes syscall, comment) > syshdr 4721541Srgrimes syscall++ 4731541Srgrimes next 4741541Srgrimes } 475146806Srwatson $3 == "UNIMPL" { 476160942Sjb printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },\t\t\t/* %d = %s */\n", 4771541Srgrimes syscall, comment) > sysent 47836770Sbde printf("\t\"#%d\",\t\t\t/* %d = %s */\n", 4791541Srgrimes syscall, syscall, comment) > sysnames 4801541Srgrimes syscall++ 4811541Srgrimes next 4821541Srgrimes } 4831541Srgrimes { 484146806Srwatson printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3 4851541Srgrimes exit 1 4861541Srgrimes } 4871541Srgrimes END { 48860287Sbde printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc 48999854Salfred 490171208Speter if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0) 49199854Salfred printf "#include \"opt_compat.h\"\n\n" > syssw 49299854Salfred 49336782Sbde if (ncompat != 0) { 49436782Sbde printf "\n#ifdef %s\n", compat > sysinc 49536782Sbde printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc 49636782Sbde printf "#else\n" > sysinc 49736782Sbde printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc 49836782Sbde printf "#endif\n" > sysinc 49936782Sbde } 50036782Sbde 50199854Salfred if (ncompat4 != 0) { 50299854Salfred printf "\n#ifdef %s\n", compat4 > sysinc 50399854Salfred printf "#define compat4(n, name) n, (sy_call_t *)__CONCAT(freebsd4_,name)\n" > sysinc 50499854Salfred printf "#else\n" > sysinc 50599854Salfred printf "#define compat4(n, name) 0, (sy_call_t *)nosys\n" > sysinc 50699854Salfred printf "#endif\n" > sysinc 50799854Salfred } 50899854Salfred 509171208Speter if (ncompat6 != 0) { 510171208Speter printf "\n#ifdef %s\n", compat6 > sysinc 511171208Speter printf "#define compat6(n, name) n, (sy_call_t *)__CONCAT(freebsd6_,name)\n" > sysinc 512171208Speter printf "#else\n" > sysinc 513171208Speter printf "#define compat6(n, name) 0, (sy_call_t *)nosys\n" > sysinc 514171208Speter printf "#endif\n" > sysinc 515171208Speter } 516171208Speter 51736735Sdfr printf("\n#endif /* %s */\n\n", compat) > syscompatdcl 51899854Salfred printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl 519171208Speter printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl 52099854Salfred 521161327Sjhb printf("\n#undef PAD_\n") > sysprotoend 52299854Salfred printf("#undef PADL_\n") > sysprotoend 52399854Salfred printf("#undef PADR_\n") > sysprotoend 52499854Salfred printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend 52599854Salfred 52637227Sphk printf("\n") > sysmk 52714331Speter printf("};\n") > sysent 5281541Srgrimes printf("};\n") > sysnames 52911294Sswallace printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \ 53036770Sbde > syshdr 531160942Sjb printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace 5321541Srgrimes } ' 5331541Srgrimes 53436782Sbdecat $sysinc $sysent >> $syssw 53599854Salfredcat $sysarg $sysdcl \ 53699854Salfred $syscompat $syscompatdcl \ 53799854Salfred $syscompat4 $syscompat4dcl \ 538171208Speter $syscompat6 $syscompat6dcl \ 539161327Sjhb $sysaue $sysprotoend > $sysproto 54099854Salfred 541