11541Srgrimes#! /bin/sh - 21541Srgrimes# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93 350477Speter# $FreeBSD$ 41541Srgrimes 51541Srgrimesset -e 61541Srgrimes 799854Salfred# name of compat options: 81541Srgrimescompat=COMPAT_43 999854Salfredcompat4=COMPAT_FREEBSD4 10171208Spetercompat6=COMPAT_FREEBSD6 11194833Sjhbcompat7=COMPAT_FREEBSD7 121541Srgrimes 131541Srgrimes# output files: 141541Srgrimessysnames="syscalls.c" 1510905Sbdesysproto="../sys/sysproto.h" 1610905Sbdesysproto_h=_SYS_SYSPROTO_H_ 171541Srgrimessyshdr="../sys/syscall.h" 1834354Sjbsysmk="../sys/syscall.mk" 191541Srgrimessyssw="init_sysent.c" 2011294Sswallacesyscallprefix="SYS_" 2111294Sswallaceswitchname="sysent" 2211294Sswallacenamesname="syscallnames" 23160942Sjbsystrace="systrace_args.c" 241541Srgrimes 251541Srgrimes# tmp files: 26161327Sjhbsysaue="sysent.aue.$$" 2731627Sjmgsysdcl="sysent.dcl.$$" 2831627Sjmgsyscompat="sysent.compat.$$" 2931627Sjmgsyscompatdcl="sysent.compatdcl.$$" 3099854Salfredsyscompat4="sysent.compat4.$$" 3199854Salfredsyscompat4dcl="sysent.compat4dcl.$$" 32171208Spetersyscompat6="sysent.compat6.$$" 33171208Spetersyscompat6dcl="sysent.compat6dcl.$$" 34194833Sjhbsyscompat7="sysent.compat7.$$" 35194833Sjhbsyscompat7dcl="sysent.compat7dcl.$$" 3631627Sjmgsysent="sysent.switch.$$" 3731627Sjmgsysinc="sysinc.switch.$$" 3831627Sjmgsysarg="sysarg.switch.$$" 3999854Salfredsysprotoend="sysprotoend.$$" 40177656Sjbsystracetmp="systrace.$$" 411541Srgrimes 42219131Srwatsonif [ -r capabilities.conf ]; then 43219131Srwatson capenabled=`cat capabilities.conf | grep -v "^#" | grep -v "^$"` 44219131Srwatson capenabled=`echo $capenabled | sed 's/ /,/g'` 45219131Srwatsonelse 46219131Srwatson capenabled="" 47219131Srwatsonfi 48219131Srwatson 49194833Sjhbtrap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp" 0 501541Srgrimes 51194833Sjhbtouch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp 5224373Speter 531541Srgrimescase $# in 5495258Sdes 0) echo "usage: $0 input-file <config-file>" 1>&2 551541Srgrimes exit 1 561541Srgrimes ;; 571541Srgrimesesac 581541Srgrimes 5936735Sdfrif [ -n "$2" -a -f "$2" ]; then 6011294Sswallace . $2 6111294Sswallacefi 6211294Sswallace 6311294Sswallacesed -e ' 6411294Sswallaces/\$//g 6511294Sswallace:join 6611294Sswallace /\\$/{a\ 6711294Sswallace 6811294Sswallace N 6911294Sswallace s/\\\n// 7011294Sswallace b join 7111294Sswallace } 7211294Sswallace2,${ 7311294Sswallace /^#/!s/\([{}()*,]\)/ \1 /g 7411294Sswallace} 7511294Sswallace' < $1 | awk " 761541Srgrimes BEGIN { 77161327Sjhb sysaue = \"$sysaue\" 781541Srgrimes sysdcl = \"$sysdcl\" 7910905Sbde sysproto = \"$sysproto\" 8099854Salfred sysprotoend = \"$sysprotoend\" 8110905Sbde sysproto_h = \"$sysproto_h\" 821541Srgrimes syscompat = \"$syscompat\" 8311294Sswallace syscompatdcl = \"$syscompatdcl\" 8499854Salfred syscompat4 = \"$syscompat4\" 8599854Salfred syscompat4dcl = \"$syscompat4dcl\" 86171208Speter syscompat6 = \"$syscompat6\" 87171208Speter syscompat6dcl = \"$syscompat6dcl\" 88194833Sjhb syscompat7 = \"$syscompat7\" 89194833Sjhb syscompat7dcl = \"$syscompat7dcl\" 901541Srgrimes sysent = \"$sysent\" 9136782Sbde syssw = \"$syssw\" 9211294Sswallace sysinc = \"$sysinc\" 9311294Sswallace sysarg = \"$sysarg\" 941541Srgrimes sysnames = \"$sysnames\" 951541Srgrimes syshdr = \"$syshdr\" 9634354Sjb sysmk = \"$sysmk\" 97160942Sjb systrace = \"$systrace\" 98177656Sjb systracetmp = \"$systracetmp\" 991541Srgrimes compat = \"$compat\" 10099854Salfred compat4 = \"$compat4\" 101171208Speter compat6 = \"$compat6\" 102194833Sjhb compat7 = \"$compat7\" 10311294Sswallace syscallprefix = \"$syscallprefix\" 10411294Sswallace switchname = \"$switchname\" 10511294Sswallace namesname = \"$namesname\" 1061541Srgrimes infile = \"$1\" 107219131Srwatson capenabled_string = \"$capenabled\" 1081541Srgrimes "' 1091541Srgrimes 110219131Srwatson split(capenabled_string, capenabled, ","); 111219131Srwatson 11236782Sbde printf "/*\n * System call switch table.\n *\n" > syssw 11336782Sbde printf " * DO NOT EDIT-- this file is automatically generated.\n" > syssw 11489977Sbde printf " * $%s$\n", "FreeBSD" > syssw 11510905Sbde 11611294Sswallace printf "/*\n * System call prototypes.\n *\n" > sysarg 11711294Sswallace printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysarg 11889977Sbde printf " * $%s$\n", "FreeBSD" > sysarg 1191541Srgrimes 12031785Seivind printf "\n#ifdef %s\n\n", compat > syscompat 12199854Salfred printf "\n#ifdef %s\n\n", compat4 > syscompat4 122171208Speter printf "\n#ifdef %s\n\n", compat6 > syscompat6 123194833Sjhb printf "\n#ifdef %s\n\n", compat7 > syscompat7 1241541Srgrimes 1251541Srgrimes printf "/*\n * System call names.\n *\n" > sysnames 1261541Srgrimes printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 12789977Sbde printf " * $%s$\n", "FreeBSD" > sysnames 1281541Srgrimes 1291541Srgrimes printf "/*\n * System call numbers.\n *\n" > syshdr 1301541Srgrimes printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 13189977Sbde printf " * $%s$\n", "FreeBSD" > syshdr 13234354Sjb printf "# FreeBSD system call names.\n" > sysmk 13334354Sjb printf "# DO NOT EDIT-- this file is automatically generated.\n" > sysmk 13489984Sbde printf "# $%s$\n", "FreeBSD" > sysmk 135160942Sjb 136160942Sjb printf "/*\n * System call argument to DTrace register array converstion.\n *\n" > systrace 137160942Sjb printf " * DO NOT EDIT-- this file is automatically generated.\n" > systrace 138160942Sjb printf " * $%s$\n", "FreeBSD" > systrace 1391541Srgrimes } 1401541Srgrimes NR == 1 { 14150478Speter gsub("[$]FreeBSD: ", "", $0) 14210906Sbde gsub(" [$]", "", $0) 14311294Sswallace 14436782Sbde printf " * created from%s\n */\n\n", $0 > syssw 14511294Sswallace 14636782Sbde printf "\n/* The casts are bogus but will do for now. */\n" > sysent 14711294Sswallace printf "struct sysent %s[] = {\n",switchname > sysent 14810905Sbde 14911294Sswallace printf " * created from%s\n */\n\n", $0 > sysarg 15033039Sbde printf "#ifndef %s\n", sysproto_h > sysarg 15133039Sbde printf "#define\t%s\n\n", sysproto_h > sysarg 152103574Salfred printf "#include <sys/signal.h>\n" > sysarg 153103574Salfred printf "#include <sys/acl.h>\n" > sysarg 154177597Sru printf "#include <sys/cpuset.h>\n" > sysarg 155164184Strhodes printf "#include <sys/_semaphore.h>\n" > sysarg 156258106Sjhb printf "#include <sys/ucontext.h>\n" > sysarg 157258106Sjhb printf "#include <sys/wait.h>\n\n" > sysarg 158161327Sjhb printf "#include <bsm/audit_kevents.h>\n\n" > sysarg 15933039Sbde printf "struct proc;\n\n" > sysarg 16083366Sjulian printf "struct thread;\n\n" > sysarg 16136770Sbde printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg 16236770Sbde printf "\t\t0 : sizeof(register_t) - sizeof(t))\n\n" > sysarg 16382149Stmm printf "#if BYTE_ORDER == LITTLE_ENDIAN\n"> sysarg 16482149Stmm printf "#define\tPADL_(t)\t0\n" > sysarg 16582149Stmm printf "#define\tPADR_(t)\tPAD_(t)\n" > sysarg 16682149Stmm printf "#else\n" > sysarg 16782149Stmm printf "#define\tPADL_(t)\tPAD_(t)\n" > sysarg 16882149Stmm printf "#define\tPADR_(t)\t0\n" > sysarg 16982149Stmm printf "#endif\n\n" > sysarg 1701541Srgrimes 1711541Srgrimes printf " * created from%s\n */\n\n", $0 > sysnames 172106149Sdwmalone printf "const char *%s[] = {\n", namesname > sysnames 1731541Srgrimes 1741541Srgrimes printf " * created from%s\n */\n\n", $0 > syshdr 1752700Swollman 17634354Sjb printf "# created from%s\nMIASM = ", $0 > sysmk 17734354Sjb 178160942Sjb printf " * This file is part of the DTrace syscall provider.\n */\n\n" > systrace 179209390Sed printf "static void\nsystrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)\n{\n" > systrace 180160942Sjb printf "\tint64_t *iarg = (int64_t *) uarg;\n" > systrace 181160942Sjb printf "\tswitch (sysnum) {\n" > systrace 182160942Sjb 183177656Sjb printf "static void\nsystrace_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)\n{\n\tconst char *p = NULL;\n" > systracetmp 184177656Sjb printf "\tswitch (sysnum) {\n" > systracetmp 185177656Sjb 1861541Srgrimes next 1871541Srgrimes } 1881541Srgrimes NF == 0 || $1 ~ /^;/ { 1891541Srgrimes next 1901541Srgrimes } 19111294Sswallace $1 ~ /^#[ ]*include/ { 19211294Sswallace print > sysinc 19311294Sswallace next 19411294Sswallace } 1951541Srgrimes $1 ~ /^#[ ]*if/ { 1961541Srgrimes print > sysent 1971541Srgrimes print > sysdcl 19811294Sswallace print > sysarg 1991541Srgrimes print > syscompat 20099854Salfred print > syscompat4 201171208Speter print > syscompat6 202194833Sjhb print > syscompat7 2031541Srgrimes print > sysnames 204219559Savg print > systrace 205219559Savg print > systracetmp 2061541Srgrimes savesyscall = syscall 2071541Srgrimes next 2081541Srgrimes } 2091541Srgrimes $1 ~ /^#[ ]*else/ { 2101541Srgrimes print > sysent 2111541Srgrimes print > sysdcl 21211294Sswallace print > sysarg 2131541Srgrimes print > syscompat 21499854Salfred print > syscompat4 215171208Speter print > syscompat6 216194833Sjhb print > syscompat7 2171541Srgrimes print > sysnames 218219559Savg print > systrace 219219559Savg print > systracetmp 2201541Srgrimes syscall = savesyscall 2211541Srgrimes next 2221541Srgrimes } 2231541Srgrimes $1 ~ /^#/ { 2241541Srgrimes print > sysent 2251541Srgrimes print > sysdcl 22611294Sswallace print > sysarg 2271541Srgrimes print > syscompat 22899854Salfred print > syscompat4 229171208Speter print > syscompat6 230194833Sjhb print > syscompat7 2311541Srgrimes print > sysnames 232219559Savg print > systrace 233219559Savg print > systracetmp 2341541Srgrimes next 2351541Srgrimes } 2361541Srgrimes syscall != $1 { 23736770Sbde printf "%s: line %d: syscall number out of sync at %d\n", 23836770Sbde infile, NR, syscall 2391541Srgrimes printf "line is:\n" 2401541Srgrimes print 2411541Srgrimes exit 1 2421541Srgrimes } 243194390Sjhb # Returns true if the type "name" is the first flag in the type field 244194390Sjhb function type(name, flags, n) { 245194390Sjhb n = split($3, flags, /\|/) 246194390Sjhb return (n > 0 && flags[1] == name) 247194390Sjhb } 248194390Sjhb # Returns true if the flag "name" is set in the type field 249194390Sjhb function flag(name, flags, i, n) { 250194390Sjhb n = split($3, flags, /\|/) 251194390Sjhb for (i = 1; i <= n; i++) 252194390Sjhb if (flags[i] == name) 253194390Sjhb return 1 254194390Sjhb return 0 255194390Sjhb } 25660287Sbde function align_sysent_comment(column) { 25760287Sbde printf("\t") > sysent 25860287Sbde column = column + 8 - column % 8 25960287Sbde while (column < 56) { 26060287Sbde printf("\t") > sysent 26160287Sbde column = column + 8 26260287Sbde } 26360287Sbde } 26411294Sswallace function parserr(was, wanted) { 26536770Sbde printf "%s: line %d: unexpected %s (expected %s)\n", 26611294Sswallace infile, NR, was, wanted 26711294Sswallace exit 1 26811294Sswallace } 26911294Sswallace function parseline() { 270146806Srwatson f=4 # toss number, type, audit event 27111294Sswallace argc= 0; 27260287Sbde argssize = "0" 273209579Skib thr_flag = "SY_THR_STATIC" 274209579Skib if (flag("NOTSTATIC")) { 275209579Skib thr_flag = "SY_THR_ABSENT" 276209579Skib } 27711294Sswallace if ($NF != "}") { 27811294Sswallace funcalias=$(NF-2) 27911294Sswallace argalias=$(NF-1) 28011294Sswallace rettype=$NF 28111294Sswallace end=NF-3 28211294Sswallace } else { 28311294Sswallace funcalias="" 28411294Sswallace argalias="" 28511294Sswallace rettype="int" 28611294Sswallace end=NF 28710905Sbde } 288194390Sjhb if (flag("NODEF")) { 289146806Srwatson auditev="AUE_NULL" 290146806Srwatson funcname=$4 291146806Srwatson argssize = "AS(" $6 ")" 29211294Sswallace return 29311294Sswallace } 29411294Sswallace if ($f != "{") 29511294Sswallace parserr($f, "{") 29611294Sswallace f++ 29711294Sswallace if ($end != "}") 29811294Sswallace parserr($end, "}") 29911294Sswallace end-- 30011294Sswallace if ($end != ";") 30111294Sswallace parserr($end, ";") 30211294Sswallace end-- 30311294Sswallace if ($end != ")") 30411294Sswallace parserr($end, ")") 30511294Sswallace end-- 30611294Sswallace 30711294Sswallace f++ #function return type 30811294Sswallace 30911294Sswallace funcname=$f 310219131Srwatson 311219131Srwatson # 312219131Srwatson # We now know the func name, so define a flags field for it. 313219131Srwatson # Do this before any other processing as we may return early 314219131Srwatson # from it. 315219131Srwatson # 316219131Srwatson for (cap in capenabled) { 317219131Srwatson if (funcname == capenabled[cap]) { 318219131Srwatson flags = "SYF_CAPENABLED"; 319219131Srwatson } 320219131Srwatson } 321219131Srwatson 32211294Sswallace if (funcalias == "") 32311294Sswallace funcalias = funcname 32411294Sswallace if (argalias == "") { 32511294Sswallace argalias = funcname "_args" 326194390Sjhb if (flag("COMPAT")) 32711330Sswallace argalias = "o" argalias 328194390Sjhb if (flag("COMPAT4")) 32999854Salfred argalias = "freebsd4_" argalias 330194390Sjhb if (flag("COMPAT6")) 331171208Speter argalias = "freebsd6_" argalias 332194833Sjhb if (flag("COMPAT7")) 333194833Sjhb argalias = "freebsd7_" argalias 33411294Sswallace } 33511294Sswallace f++ 33611294Sswallace 33711294Sswallace if ($f != "(") 33811294Sswallace parserr($f, ")") 33911294Sswallace f++ 34011294Sswallace 34111294Sswallace if (f == end) { 34211294Sswallace if ($f != "void") 34311294Sswallace parserr($f, "argument definition") 34411294Sswallace return 34511294Sswallace } 34611294Sswallace 34711294Sswallace while (f <= end) { 34811294Sswallace argc++ 34911294Sswallace argtype[argc]="" 35011294Sswallace oldf="" 35111294Sswallace while (f < end && $(f+1) != ",") { 35211294Sswallace if (argtype[argc] != "" && oldf != "*") 35311294Sswallace argtype[argc] = argtype[argc]" "; 35411294Sswallace argtype[argc] = argtype[argc]$f; 35511294Sswallace oldf = $f; 35611294Sswallace f++ 35711294Sswallace } 35811294Sswallace if (argtype[argc] == "") 35911294Sswallace parserr($f, "argument definition") 36011294Sswallace argname[argc]=$f; 36111294Sswallace f += 2; # skip name, and any comma 36211294Sswallace } 36360287Sbde if (argc != 0) 36460287Sbde argssize = "AS(" argalias ")" 3651541Srgrimes } 366146806Srwatson { comment = $4 367146806Srwatson if (NF < 7) 368146806Srwatson for (i = 5; i <= NF; i++) 36911294Sswallace comment = comment " " $i 37011294Sswallace } 37182585Sdillon 372146806Srwatson # 373146806Srwatson # The AUE_ audit event identifier. 374146806Srwatson # 375146806Srwatson { 376146806Srwatson auditev = $2; 377146806Srwatson } 378146806Srwatson 379193234Srwatson # 380219131Srwatson # The flags, if any. 381193234Srwatson # 382193234Srwatson { 383193234Srwatson flags = "0"; 384193234Srwatson } 385193234Srwatson 386194390Sjhb type("STD") || type("NODEF") || type("NOARGS") || type("NOPROTO") \ 387194390Sjhb || type("NOSTD") { 38811294Sswallace parseline() 389160942Sjb printf("\t/* %s */\n\tcase %d: {\n", funcname, syscall) > systrace 390177656Sjb printf("\t/* %s */\n\tcase %d:\n", funcname, syscall) > systracetmp 391160942Sjb if (argc > 0) { 392177656Sjb printf("\t\tswitch(ndx) {\n") > systracetmp 393160942Sjb printf("\t\tstruct %s *p = params;\n", argalias) > systrace 394160942Sjb for (i = 1; i <= argc; i++) { 395262034Savg arg = argtype[i] 396262034Savg sub("__restrict$", "", arg) 397262034Savg printf("\t\tcase %d:\n\t\t\tp = \"%s\";\n\t\t\tbreak;\n", i - 1, arg) > systracetmp 398262034Savg if (index(arg, "*") > 0 || arg == "caddr_t") 399160942Sjb printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \ 400160942Sjb i - 1, \ 401262034Savg argname[i], arg) > systrace 402262034Savg else if (substr(arg, 1, 1) == "u" || arg == "size_t") 403160942Sjb printf("\t\tuarg[%d] = p->%s; /* %s */\n", \ 404160942Sjb i - 1, \ 405262034Savg argname[i], arg) > systrace 406160942Sjb else 407160942Sjb printf("\t\tiarg[%d] = p->%s; /* %s */\n", \ 408160942Sjb i - 1, \ 409262034Savg argname[i], arg) > systrace 410160942Sjb } 411177656Sjb printf("\t\tdefault:\n\t\t\tbreak;\n\t\t};\n") > systracetmp 412160942Sjb } 413160942Sjb printf("\t\t*n_args = %d;\n\t\tbreak;\n\t}\n", argc) > systrace 414177656Sjb printf("\t\tbreak;\n") > systracetmp 415194390Sjhb if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ 416194390Sjhb !flag("NODEF")) { 417183361Sjhb printf("struct %s {\n", argalias) > sysarg 418183361Sjhb for (i = 1; i <= argc; i++) 419183361Sjhb printf("\tchar %s_l_[PADL_(%s)]; " \ 420183361Sjhb "%s %s; char %s_r_[PADR_(%s)];\n", 421183361Sjhb argname[i], argtype[i], 422183361Sjhb argtype[i], argname[i], 423183361Sjhb argname[i], argtype[i]) > sysarg 424183361Sjhb printf("};\n") > sysarg 42510905Sbde } 426194390Sjhb else if (!flag("NOARGS") && !flag("NOPROTO") && !flag("NODEF")) 427183361Sjhb printf("struct %s {\n\tregister_t dummy;\n};\n", 428183361Sjhb argalias) > sysarg 429194390Sjhb if (!flag("NOPROTO") && !flag("NODEF")) { 430225617Skmacy if (funcname == "nosys" || funcname == "lkmnosys" || 431225617Skmacy funcname == "sysarch" || funcname ~ /^freebsd/ || 432225617Skmacy funcname ~ /^linux/ || funcname ~ /^svr4/ || 433225617Skmacy funcname ~ /^ibcs2/ || funcname ~ /^xenix/) { 434225617Skmacy printf("%s\t%s(struct thread *, struct %s *)", 435225617Skmacy rettype, funcname, argalias) > sysdcl 436225617Skmacy } else { 437225617Skmacy printf("%s\tsys_%s(struct thread *, struct %s *)", 438225617Skmacy rettype, funcname, argalias) > sysdcl 439225617Skmacy } 44018277Sbde printf(";\n") > sysdcl 441161327Sjhb printf("#define\t%sAUE_%s\t%s\n", syscallprefix, 442161327Sjhb funcalias, auditev) > sysaue 44311330Sswallace } 444160798Sjhb printf("\t{ %s, (sy_call_t *)", argssize) > sysent 445160798Sjhb column = 8 + 2 + length(argssize) + 15 446194390Sjhb if (flag("NOSTD")) { 447209579Skib printf("%s },", "lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT") > sysent 448193234Srwatson column = column + length("lkmressys") + length("AUE_NULL") + 3 44969445Salfred } else { 450225617Skmacy if (funcname == "nosys" || funcname == "sysarch" || 451225617Skmacy funcname == "lkmnosys" || funcname ~ /^freebsd/ || 452225617Skmacy funcname ~ /^linux/ || funcname ~ /^svr4/ || 453225617Skmacy funcname ~ /^ibcs2/ || funcname ~ /^xenix/) { 454225617Skmacy printf("%s, %s, NULL, 0, 0, %s, %s },", funcname, auditev, flags, thr_flag) > sysent 455225617Skmacy column = column + length(funcname) + length(auditev) + length(flags) + 3 456225617Skmacy } else { 457225617Skmacy printf("sys_%s, %s, NULL, 0, 0, %s, %s },", funcname, auditev, flags, thr_flag) > sysent 458225617Skmacy column = column + length(funcname) + length(auditev) + length(flags) + 3 + 4 459225617Skmacy } 46069445Salfred } 46160287Sbde align_sysent_comment(column) 46258963Salfred printf("/* %d = %s */\n", syscall, funcalias) > sysent 46336770Sbde printf("\t\"%s\",\t\t\t/* %d = %s */\n", 46411294Sswallace funcalias, syscall, funcalias) > sysnames 465194390Sjhb if (!flag("NODEF")) { 46636770Sbde printf("#define\t%s%s\t%d\n", syscallprefix, 46711294Sswallace funcalias, syscall) > syshdr 46834354Sjb printf(" \\\n\t%s.o", funcalias) > sysmk 46934354Sjb } 4701541Srgrimes syscall++ 4711541Srgrimes next 4721541Srgrimes } 473194833Sjhb type("COMPAT") || type("COMPAT4") || type("COMPAT6") || \ 474194833Sjhb type("COMPAT7") { 475194390Sjhb if (flag("COMPAT")) { 47699854Salfred ncompat++ 47799854Salfred out = syscompat 47899854Salfred outdcl = syscompatdcl 47999854Salfred wrap = "compat" 48099854Salfred prefix = "o" 481194390Sjhb descr = "old" 482194390Sjhb } else if (flag("COMPAT4")) { 48399854Salfred ncompat4++ 48499854Salfred out = syscompat4 48599854Salfred outdcl = syscompat4dcl 48699854Salfred wrap = "compat4" 48799854Salfred prefix = "freebsd4_" 488194390Sjhb descr = "freebsd4" 489194390Sjhb } else if (flag("COMPAT6")) { 490171208Speter ncompat6++ 491171208Speter out = syscompat6 492171208Speter outdcl = syscompat6dcl 493171208Speter wrap = "compat6" 494171208Speter prefix = "freebsd6_" 495194390Sjhb descr = "freebsd6" 496194833Sjhb } else if (flag("COMPAT7")) { 497194833Sjhb ncompat7++ 498194833Sjhb out = syscompat7 499194833Sjhb outdcl = syscompat7dcl 500194833Sjhb wrap = "compat7" 501194833Sjhb prefix = "freebsd7_" 502194833Sjhb descr = "freebsd7" 50399854Salfred } 50411294Sswallace parseline() 505194390Sjhb if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ 506194390Sjhb !flag("NODEF")) { 50799854Salfred printf("struct %s {\n", argalias) > out 50811294Sswallace for (i = 1; i <= argc; i++) 50982149Stmm printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \ 51082149Stmm "char %s_r_[PADR_(%s)];\n", 51182149Stmm argname[i], argtype[i], 51236735Sdfr argtype[i], argname[i], 51399854Salfred argname[i], argtype[i]) > out 51499854Salfred printf("};\n") > out 51511294Sswallace } 516194390Sjhb else if (!flag("NOARGS") && !flag("NOPROTO") && !flag("NODEF")) 51783046Sobrien printf("struct %s {\n\tregister_t dummy;\n};\n", 51836770Sbde argalias) > sysarg 519194390Sjhb if (!flag("NOPROTO") && !flag("NODEF")) { 520194390Sjhb printf("%s\t%s%s(struct thread *, struct %s *);\n", 521194390Sjhb rettype, prefix, funcname, argalias) > outdcl 522194646Sjhb printf("#define\t%sAUE_%s%s\t%s\n", syscallprefix, 523194646Sjhb prefix, funcname, auditev) > sysaue 524194390Sjhb } 525194390Sjhb if (flag("NOSTD")) { 526209579Skib printf("\t{ %s, (sy_call_t *)%s, %s, NULL, 0, 0, 0, SY_THR_ABSENT },", 527194390Sjhb "0", "lkmressys", "AUE_NULL") > sysent 528194390Sjhb align_sysent_comment(8 + 2 + length("0") + 15 + \ 529194390Sjhb length("lkmressys") + length("AUE_NULL") + 3) 530194390Sjhb } else { 531209579Skib printf("\t{ %s(%s,%s), %s, NULL, 0, 0, %s, %s },", 532209579Skib wrap, argssize, funcname, auditev, flags, thr_flag) > sysent 533194390Sjhb align_sysent_comment(8 + 9 + length(argssize) + 1 + \ 534194390Sjhb length(funcname) + length(auditev) + \ 535194390Sjhb length(flags) + 4) 536194390Sjhb } 537194390Sjhb printf("/* %d = %s %s */\n", syscall, descr, funcalias) > sysent 538194390Sjhb printf("\t\"%s.%s\",\t\t/* %d = %s %s */\n", 539194390Sjhb wrap, funcalias, syscall, descr, funcalias) > sysnames 540194390Sjhb if (flag("COMPAT")) { 541171208Speter printf("\t\t\t\t/* %d is old %s */\n", 542171208Speter syscall, funcalias) > syshdr 543194390Sjhb } else if (!flag("NODEF")) { 544171208Speter printf("#define\t%s%s%s\t%d\n", syscallprefix, 545171208Speter prefix, funcalias, syscall) > syshdr 546171208Speter printf(" \\\n\t%s%s.o", prefix, funcalias) > sysmk 547171208Speter } 5481541Srgrimes syscall++ 5491541Srgrimes next 5501541Srgrimes } 551194390Sjhb type("OBSOL") { 552209579Skib printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },") > sysent 55360287Sbde align_sysent_comment(34) 55460287Sbde printf("/* %d = obsolete %s */\n", syscall, comment) > sysent 55536770Sbde printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", 556146806Srwatson $4, syscall, comment) > sysnames 55736770Sbde printf("\t\t\t\t/* %d is obsolete %s */\n", 5581541Srgrimes syscall, comment) > syshdr 5591541Srgrimes syscall++ 5601541Srgrimes next 5611541Srgrimes } 562194390Sjhb type("UNIMPL") { 563209579Skib printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },\t\t\t/* %d = %s */\n", 5641541Srgrimes syscall, comment) > sysent 56536770Sbde printf("\t\"#%d\",\t\t\t/* %d = %s */\n", 5661541Srgrimes syscall, syscall, comment) > sysnames 5671541Srgrimes syscall++ 5681541Srgrimes next 5691541Srgrimes } 5701541Srgrimes { 571146806Srwatson printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3 5721541Srgrimes exit 1 5731541Srgrimes } 5741541Srgrimes END { 57560287Sbde printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc 57699854Salfred 577194833Sjhb if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0 || ncompat7 != 0) 57899854Salfred printf "#include \"opt_compat.h\"\n\n" > syssw 57999854Salfred 58036782Sbde if (ncompat != 0) { 58136782Sbde printf "\n#ifdef %s\n", compat > sysinc 58236782Sbde printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc 58336782Sbde printf "#else\n" > sysinc 58436782Sbde printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc 58536782Sbde printf "#endif\n" > sysinc 58636782Sbde } 58736782Sbde 58899854Salfred if (ncompat4 != 0) { 58999854Salfred printf "\n#ifdef %s\n", compat4 > sysinc 59099854Salfred printf "#define compat4(n, name) n, (sy_call_t *)__CONCAT(freebsd4_,name)\n" > sysinc 59199854Salfred printf "#else\n" > sysinc 59299854Salfred printf "#define compat4(n, name) 0, (sy_call_t *)nosys\n" > sysinc 59399854Salfred printf "#endif\n" > sysinc 59499854Salfred } 59599854Salfred 596171208Speter if (ncompat6 != 0) { 597171208Speter printf "\n#ifdef %s\n", compat6 > sysinc 598171208Speter printf "#define compat6(n, name) n, (sy_call_t *)__CONCAT(freebsd6_,name)\n" > sysinc 599171208Speter printf "#else\n" > sysinc 600171208Speter printf "#define compat6(n, name) 0, (sy_call_t *)nosys\n" > sysinc 601171208Speter printf "#endif\n" > sysinc 602171208Speter } 603171208Speter 604194833Sjhb if (ncompat7 != 0) { 605194833Sjhb printf "\n#ifdef %s\n", compat7 > sysinc 606194833Sjhb printf "#define compat7(n, name) n, (sy_call_t *)__CONCAT(freebsd7_,name)\n" > sysinc 607194833Sjhb printf "#else\n" > sysinc 608194833Sjhb printf "#define compat7(n, name) 0, (sy_call_t *)nosys\n" > sysinc 609194833Sjhb printf "#endif\n" > sysinc 610194833Sjhb } 611194833Sjhb 61236735Sdfr printf("\n#endif /* %s */\n\n", compat) > syscompatdcl 61399854Salfred printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl 614171208Speter printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl 615194833Sjhb printf("\n#endif /* %s */\n\n", compat7) > syscompat7dcl 61699854Salfred 617161327Sjhb printf("\n#undef PAD_\n") > sysprotoend 61899854Salfred printf("#undef PADL_\n") > sysprotoend 61999854Salfred printf("#undef PADR_\n") > sysprotoend 62099854Salfred printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend 62199854Salfred 62237227Sphk printf("\n") > sysmk 62314331Speter printf("};\n") > sysent 6241541Srgrimes printf("};\n") > sysnames 62511294Sswallace printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \ 62636770Sbde > syshdr 627160942Sjb printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace 628177656Sjb printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systracetmp 6291541Srgrimes } ' 6301541Srgrimes 63136782Sbdecat $sysinc $sysent >> $syssw 63299854Salfredcat $sysarg $sysdcl \ 63399854Salfred $syscompat $syscompatdcl \ 63499854Salfred $syscompat4 $syscompat4dcl \ 635171208Speter $syscompat6 $syscompat6dcl \ 636194833Sjhb $syscompat7 $syscompat7dcl \ 637161327Sjhb $sysaue $sysprotoend > $sysproto 638177656Sjbcat $systracetmp >> $systrace 63999854Salfred 640