11541Srgrimes#! /bin/sh - 21541Srgrimes# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93 350477Speter# $FreeBSD: stable/11/sys/kern/makesyscalls.sh 346811 2019-04-28 09:49:30Z dchagin $ 41541Srgrimes 51541Srgrimesset -e 61541Srgrimes 799854Salfred# name of compat options: 81541Srgrimescompat=COMPAT_43 999854Salfredcompat4=COMPAT_FREEBSD4 10171208Spetercompat6=COMPAT_FREEBSD6 11194833Sjhbcompat7=COMPAT_FREEBSD7 12302093Sbrookscompat10=COMPAT_FREEBSD10 131541Srgrimes 141541Srgrimes# output files: 151541Srgrimessysnames="syscalls.c" 1610905Sbdesysproto="../sys/sysproto.h" 1710905Sbdesysproto_h=_SYS_SYSPROTO_H_ 181541Srgrimessyshdr="../sys/syscall.h" 1934354Sjbsysmk="../sys/syscall.mk" 201541Srgrimessyssw="init_sysent.c" 2111294Sswallacesyscallprefix="SYS_" 2211294Sswallaceswitchname="sysent" 2311294Sswallacenamesname="syscallnames" 24160942Sjbsystrace="systrace_args.c" 251541Srgrimes 261541Srgrimes# tmp files: 27161327Sjhbsysaue="sysent.aue.$$" 2831627Sjmgsysdcl="sysent.dcl.$$" 2931627Sjmgsyscompat="sysent.compat.$$" 3031627Sjmgsyscompatdcl="sysent.compatdcl.$$" 3199854Salfredsyscompat4="sysent.compat4.$$" 3299854Salfredsyscompat4dcl="sysent.compat4dcl.$$" 33171208Spetersyscompat6="sysent.compat6.$$" 34171208Spetersyscompat6dcl="sysent.compat6dcl.$$" 35194833Sjhbsyscompat7="sysent.compat7.$$" 36194833Sjhbsyscompat7dcl="sysent.compat7dcl.$$" 37302093Sbrookssyscompat10="sysent.compat10.$$" 38302093Sbrookssyscompat10dcl="sysent.compat10dcl.$$" 3931627Sjmgsysent="sysent.switch.$$" 4031627Sjmgsysinc="sysinc.switch.$$" 4131627Sjmgsysarg="sysarg.switch.$$" 4299854Salfredsysprotoend="sysprotoend.$$" 43177656Sjbsystracetmp="systrace.$$" 44227441Srstonesystraceret="systraceret.$$" 451541Srgrimes 46219131Srwatsonif [ -r capabilities.conf ]; then 47219131Srwatson capenabled=`cat capabilities.conf | grep -v "^#" | grep -v "^$"` 48219131Srwatson capenabled=`echo $capenabled | sed 's/ /,/g'` 49219131Srwatsonelse 50219131Srwatson capenabled="" 51219131Srwatsonfi 52219131Srwatson 53302093Sbrookstrap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $syscompat10 $syscompat10dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp $systraceret" 0 541541Srgrimes 55302093Sbrookstouch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $syscompat10 $syscompat10dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp $systraceret 5624373Speter 571541Srgrimescase $# in 5895258Sdes 0) echo "usage: $0 input-file <config-file>" 1>&2 591541Srgrimes exit 1 601541Srgrimes ;; 611541Srgrimesesac 621541Srgrimes 63256643Semasteif [ -n "$2" ]; then 6411294Sswallace . $2 6511294Sswallacefi 6611294Sswallace 6711294Sswallacesed -e ' 6811294Sswallace:join 6911294Sswallace /\\$/{a\ 7011294Sswallace 7111294Sswallace N 7211294Sswallace s/\\\n// 7311294Sswallace b join 7411294Sswallace } 7511294Sswallace2,${ 7611294Sswallace /^#/!s/\([{}()*,]\)/ \1 /g 7711294Sswallace} 7811294Sswallace' < $1 | awk " 791541Srgrimes BEGIN { 80161327Sjhb sysaue = \"$sysaue\" 811541Srgrimes sysdcl = \"$sysdcl\" 8210905Sbde sysproto = \"$sysproto\" 8399854Salfred sysprotoend = \"$sysprotoend\" 8410905Sbde sysproto_h = \"$sysproto_h\" 851541Srgrimes syscompat = \"$syscompat\" 8611294Sswallace syscompatdcl = \"$syscompatdcl\" 8799854Salfred syscompat4 = \"$syscompat4\" 8899854Salfred syscompat4dcl = \"$syscompat4dcl\" 89171208Speter syscompat6 = \"$syscompat6\" 90171208Speter syscompat6dcl = \"$syscompat6dcl\" 91194833Sjhb syscompat7 = \"$syscompat7\" 92194833Sjhb syscompat7dcl = \"$syscompat7dcl\" 93302093Sbrooks syscompat10 = \"$syscompat10\" 94302093Sbrooks syscompat10dcl = \"$syscompat10dcl\" 951541Srgrimes sysent = \"$sysent\" 9636782Sbde syssw = \"$syssw\" 9711294Sswallace sysinc = \"$sysinc\" 9811294Sswallace sysarg = \"$sysarg\" 991541Srgrimes sysnames = \"$sysnames\" 1001541Srgrimes syshdr = \"$syshdr\" 10134354Sjb sysmk = \"$sysmk\" 102160942Sjb systrace = \"$systrace\" 103177656Sjb systracetmp = \"$systracetmp\" 104227441Srstone systraceret = \"$systraceret\" 1051541Srgrimes compat = \"$compat\" 10699854Salfred compat4 = \"$compat4\" 107171208Speter compat6 = \"$compat6\" 108194833Sjhb compat7 = \"$compat7\" 109302093Sbrooks compat10 = \"$compat10\" 11011294Sswallace syscallprefix = \"$syscallprefix\" 11111294Sswallace switchname = \"$switchname\" 11211294Sswallace namesname = \"$namesname\" 1131541Srgrimes infile = \"$1\" 114219131Srwatson capenabled_string = \"$capenabled\" 1151541Srgrimes "' 1161541Srgrimes 117219131Srwatson split(capenabled_string, capenabled, ","); 118219131Srwatson 119318172Sjhb printf "\n/* The casts are bogus but will do for now. */\n" > sysent 120318172Sjhb printf "struct sysent %s[] = {\n",switchname > sysent 121318172Sjhb 12236782Sbde printf "/*\n * System call switch table.\n *\n" > syssw 12336782Sbde printf " * DO NOT EDIT-- this file is automatically generated.\n" > syssw 12489977Sbde printf " * $%s$\n", "FreeBSD" > syssw 125318164Sjhb printf " */\n\n" > syssw 12610905Sbde 12711294Sswallace printf "/*\n * System call prototypes.\n *\n" > sysarg 12811294Sswallace printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysarg 12989977Sbde printf " * $%s$\n", "FreeBSD" > sysarg 130318164Sjhb printf " */\n\n" > 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 136227776Slstewart printf "#include <sys/_ffcounter.h>\n" > sysarg 137164184Strhodes printf "#include <sys/_semaphore.h>\n" > sysarg 138255491Sjhb printf "#include <sys/ucontext.h>\n" > sysarg 139255491Sjhb printf "#include <sys/wait.h>\n\n" > sysarg 140161327Sjhb printf "#include <bsm/audit_kevents.h>\n\n" > sysarg 14133039Sbde printf "struct proc;\n\n" > sysarg 14283366Sjulian printf "struct thread;\n\n" > sysarg 14336770Sbde printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg 14436770Sbde printf "\t\t0 : sizeof(register_t) - sizeof(t))\n\n" > sysarg 14582149Stmm printf "#if BYTE_ORDER == LITTLE_ENDIAN\n"> sysarg 14682149Stmm printf "#define\tPADL_(t)\t0\n" > sysarg 14782149Stmm printf "#define\tPADR_(t)\tPAD_(t)\n" > sysarg 14882149Stmm printf "#else\n" > sysarg 14982149Stmm printf "#define\tPADL_(t)\tPAD_(t)\n" > sysarg 15082149Stmm printf "#define\tPADR_(t)\t0\n" > sysarg 15182149Stmm printf "#endif\n\n" > sysarg 1521541Srgrimes 153318172Sjhb printf "\n#ifdef %s\n\n", compat > syscompat 154318172Sjhb printf "\n#ifdef %s\n\n", compat4 > syscompat4 155318172Sjhb printf "\n#ifdef %s\n\n", compat6 > syscompat6 156318172Sjhb printf "\n#ifdef %s\n\n", compat7 > syscompat7 157318172Sjhb printf "\n#ifdef %s\n\n", compat10 > syscompat10 158318172Sjhb 159318172Sjhb printf "/*\n * System call names.\n *\n" > sysnames 160318172Sjhb printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 161318172Sjhb printf " * $%s$\n", "FreeBSD" > sysnames 162318172Sjhb printf " */\n\n" > sysnames 163106149Sdwmalone printf "const char *%s[] = {\n", namesname > sysnames 1641541Srgrimes 165318172Sjhb printf "/*\n * System call numbers.\n *\n" > syshdr 166318172Sjhb printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 167318172Sjhb printf " * $%s$\n", "FreeBSD" > syshdr 168318172Sjhb printf " */\n\n" > syshdr 169318172Sjhb 170318172Sjhb printf "# FreeBSD system call object files.\n" > sysmk 171318172Sjhb printf "# DO NOT EDIT-- this file is automatically generated.\n" > sysmk 172318172Sjhb printf "# $%s$\n", "FreeBSD" > sysmk 173318164Sjhb printf "MIASM = " > sysmk 1742700Swollman 175318172Sjhb printf "/*\n * System call argument to DTrace register array converstion.\n *\n" > systrace 176318172Sjhb printf " * DO NOT EDIT-- this file is automatically generated.\n" > systrace 177318172Sjhb printf " * $%s$\n", "FreeBSD" > systrace 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 183227441Srstone printf "static void\nsystrace_entry_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 186227441Srstone printf "static void\nsystrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)\n{\n\tconst char *p = NULL;\n" > systraceret 187227441Srstone printf "\tswitch (sysnum) {\n" > systraceret 188318172Sjhb } 189318172Sjhb NR == 1 { 1901541Srgrimes next 1911541Srgrimes } 1921541Srgrimes NF == 0 || $1 ~ /^;/ { 1931541Srgrimes next 1941541Srgrimes } 19511294Sswallace $1 ~ /^#[ ]*include/ { 19611294Sswallace print > sysinc 19711294Sswallace next 19811294Sswallace } 1991541Srgrimes $1 ~ /^#[ ]*if/ { 2001541Srgrimes print > sysent 2011541Srgrimes print > sysdcl 20211294Sswallace print > sysarg 2031541Srgrimes print > syscompat 20499854Salfred print > syscompat4 205171208Speter print > syscompat6 206194833Sjhb print > syscompat7 207302093Sbrooks print > syscompat10 2081541Srgrimes print > sysnames 209219559Savg print > systrace 210219559Savg print > systracetmp 211227441Srstone print > systraceret 2121541Srgrimes savesyscall = syscall 2131541Srgrimes next 2141541Srgrimes } 2151541Srgrimes $1 ~ /^#[ ]*else/ { 2161541Srgrimes print > sysent 2171541Srgrimes print > sysdcl 21811294Sswallace print > sysarg 2191541Srgrimes print > syscompat 22099854Salfred print > syscompat4 221171208Speter print > syscompat6 222194833Sjhb print > syscompat7 223302093Sbrooks print > syscompat10 2241541Srgrimes print > sysnames 225219559Savg print > systrace 226219559Savg print > systracetmp 227227441Srstone print > systraceret 2281541Srgrimes syscall = savesyscall 2291541Srgrimes next 2301541Srgrimes } 2311541Srgrimes $1 ~ /^#/ { 2321541Srgrimes print > sysent 2331541Srgrimes print > sysdcl 23411294Sswallace print > sysarg 2351541Srgrimes print > syscompat 23699854Salfred print > syscompat4 237171208Speter print > syscompat6 238194833Sjhb print > syscompat7 239302093Sbrooks print > syscompat10 2401541Srgrimes print > sysnames 241219559Savg print > systrace 242219559Savg print > systracetmp 243227441Srstone print > systraceret 2441541Srgrimes next 2451541Srgrimes } 246194390Sjhb # Returns true if the type "name" is the first flag in the type field 247194390Sjhb function type(name, flags, n) { 248194390Sjhb n = split($3, flags, /\|/) 249194390Sjhb return (n > 0 && flags[1] == name) 250194390Sjhb } 251194390Sjhb # Returns true if the flag "name" is set in the type field 252194390Sjhb function flag(name, flags, i, n) { 253194390Sjhb n = split($3, flags, /\|/) 254194390Sjhb for (i = 1; i <= n; i++) 255194390Sjhb if (flags[i] == name) 256194390Sjhb return 1 257194390Sjhb return 0 258194390Sjhb } 259346811Sdchagin { 260346811Sdchagin n = split($1, syscall_range, /-/) 261346811Sdchagin if (n == 1) { 262346811Sdchagin syscall_range[2] = syscall_range[1] 263346811Sdchagin } else if (n == 2) { 264346811Sdchagin if (!type("UNIMPL")) { 265346811Sdchagin printf "%s: line %d: range permitted only with UNIMPL\n", 266346811Sdchagin infile, NR 267346811Sdchagin exit 1 268346811Sdchagin } 269346811Sdchagin } else { 270346811Sdchagin printf "%s: line %d: invalid syscall number or range %s\n", 271346811Sdchagin infile, NR, $1 272346811Sdchagin exit 1 273346811Sdchagin } 274346811Sdchagin } 275346811Sdchagin syscall != syscall_range[1] { 276346811Sdchagin printf "%s: line %d: syscall number out of sync at %d\n", 277346811Sdchagin infile, NR, syscall 278346811Sdchagin printf "line is:\n" 279346811Sdchagin print 280346811Sdchagin exit 1 281346811Sdchagin } 28260287Sbde function align_sysent_comment(column) { 28360287Sbde printf("\t") > sysent 28460287Sbde column = column + 8 - column % 8 28560287Sbde while (column < 56) { 28660287Sbde printf("\t") > sysent 28760287Sbde column = column + 8 28860287Sbde } 28960287Sbde } 29011294Sswallace function parserr(was, wanted) { 29136770Sbde printf "%s: line %d: unexpected %s (expected %s)\n", 29211294Sswallace infile, NR, was, wanted 29311294Sswallace exit 1 29411294Sswallace } 29511294Sswallace function parseline() { 296146806Srwatson f=4 # toss number, type, audit event 29711294Sswallace argc= 0; 29860287Sbde argssize = "0" 299209579Skib thr_flag = "SY_THR_STATIC" 300209579Skib if (flag("NOTSTATIC")) { 301209579Skib thr_flag = "SY_THR_ABSENT" 302209579Skib } 30311294Sswallace if ($NF != "}") { 30411294Sswallace funcalias=$(NF-2) 30511294Sswallace argalias=$(NF-1) 30611294Sswallace rettype=$NF 30711294Sswallace end=NF-3 30811294Sswallace } else { 30911294Sswallace funcalias="" 31011294Sswallace argalias="" 31111294Sswallace rettype="int" 31211294Sswallace end=NF 31310905Sbde } 314194390Sjhb if (flag("NODEF")) { 315146806Srwatson auditev="AUE_NULL" 316146806Srwatson funcname=$4 317146806Srwatson argssize = "AS(" $6 ")" 31811294Sswallace return 31911294Sswallace } 32011294Sswallace if ($f != "{") 32111294Sswallace parserr($f, "{") 32211294Sswallace f++ 32311294Sswallace if ($end != "}") 32411294Sswallace parserr($end, "}") 32511294Sswallace end-- 32611294Sswallace if ($end != ";") 32711294Sswallace parserr($end, ";") 32811294Sswallace end-- 32911294Sswallace if ($end != ")") 33011294Sswallace parserr($end, ")") 33111294Sswallace end-- 33211294Sswallace 333227441Srstone syscallret=$f 334227441Srstone f++ 33511294Sswallace 33611294Sswallace funcname=$f 337219131Srwatson 338219131Srwatson # 339219131Srwatson # We now know the func name, so define a flags field for it. 340219131Srwatson # Do this before any other processing as we may return early 341219131Srwatson # from it. 342219131Srwatson # 343219131Srwatson for (cap in capenabled) { 344219131Srwatson if (funcname == capenabled[cap]) { 345219131Srwatson flags = "SYF_CAPENABLED"; 346258900Spjd break; 347219131Srwatson } 348219131Srwatson } 349219131Srwatson 35011294Sswallace if (funcalias == "") 35111294Sswallace funcalias = funcname 35211294Sswallace if (argalias == "") { 35311294Sswallace argalias = funcname "_args" 354194390Sjhb if (flag("COMPAT")) 35511330Sswallace argalias = "o" argalias 356194390Sjhb if (flag("COMPAT4")) 35799854Salfred argalias = "freebsd4_" argalias 358194390Sjhb if (flag("COMPAT6")) 359171208Speter argalias = "freebsd6_" argalias 360194833Sjhb if (flag("COMPAT7")) 361194833Sjhb argalias = "freebsd7_" argalias 362302093Sbrooks if (flag("COMPAT10")) 363302093Sbrooks argalias = "freebsd10_" argalias 36411294Sswallace } 36511294Sswallace f++ 36611294Sswallace 36711294Sswallace if ($f != "(") 36811294Sswallace parserr($f, ")") 36911294Sswallace f++ 37011294Sswallace 37111294Sswallace if (f == end) { 37211294Sswallace if ($f != "void") 37311294Sswallace parserr($f, "argument definition") 37411294Sswallace return 37511294Sswallace } 37611294Sswallace 37711294Sswallace while (f <= end) { 37811294Sswallace argc++ 37911294Sswallace argtype[argc]="" 38011294Sswallace oldf="" 38111294Sswallace while (f < end && $(f+1) != ",") { 38211294Sswallace if (argtype[argc] != "" && oldf != "*") 38311294Sswallace argtype[argc] = argtype[argc]" "; 38411294Sswallace argtype[argc] = argtype[argc]$f; 38511294Sswallace oldf = $f; 38611294Sswallace f++ 38711294Sswallace } 38811294Sswallace if (argtype[argc] == "") 38911294Sswallace parserr($f, "argument definition") 39011294Sswallace argname[argc]=$f; 39111294Sswallace f += 2; # skip name, and any comma 39211294Sswallace } 39360287Sbde if (argc != 0) 39460287Sbde argssize = "AS(" argalias ")" 3951541Srgrimes } 396146806Srwatson { comment = $4 397146806Srwatson if (NF < 7) 398146806Srwatson for (i = 5; i <= NF; i++) 39911294Sswallace comment = comment " " $i 40011294Sswallace } 40182585Sdillon 402146806Srwatson # 403146806Srwatson # The AUE_ audit event identifier. 404146806Srwatson # 405146806Srwatson { 406146806Srwatson auditev = $2; 407146806Srwatson } 408146806Srwatson 409193234Srwatson # 410219131Srwatson # The flags, if any. 411193234Srwatson # 412193234Srwatson { 413193234Srwatson flags = "0"; 414193234Srwatson } 415193234Srwatson 416194390Sjhb type("STD") || type("NODEF") || type("NOARGS") || type("NOPROTO") \ 417194390Sjhb || type("NOSTD") { 41811294Sswallace parseline() 419160942Sjb printf("\t/* %s */\n\tcase %d: {\n", funcname, syscall) > systrace 420177656Sjb printf("\t/* %s */\n\tcase %d:\n", funcname, syscall) > systracetmp 421227441Srstone printf("\t/* %s */\n\tcase %d:\n", funcname, syscall) > systraceret 422160942Sjb if (argc > 0) { 423177656Sjb printf("\t\tswitch(ndx) {\n") > systracetmp 424160942Sjb printf("\t\tstruct %s *p = params;\n", argalias) > systrace 425160942Sjb for (i = 1; i <= argc; i++) { 426255777Smarkj arg = argtype[i] 427255777Smarkj sub("__restrict$", "", arg) 428255777Smarkj printf("\t\tcase %d:\n\t\t\tp = \"%s\";\n\t\t\tbreak;\n", i - 1, arg) > systracetmp 429255777Smarkj if (index(arg, "*") > 0 || arg == "caddr_t") 430160942Sjb printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \ 431160942Sjb i - 1, \ 432255777Smarkj argname[i], arg) > systrace 433289769Sjhb else if (arg == "union l_semun") 434289769Sjhb printf("\t\tuarg[%d] = p->%s.buf; /* %s */\n", \ 435289769Sjhb i - 1, \ 436289769Sjhb argname[i], arg) > systrace 437255777Smarkj else if (substr(arg, 1, 1) == "u" || arg == "size_t") 438160942Sjb printf("\t\tuarg[%d] = p->%s; /* %s */\n", \ 439160942Sjb i - 1, \ 440255777Smarkj argname[i], arg) > systrace 441160942Sjb else 442160942Sjb printf("\t\tiarg[%d] = p->%s; /* %s */\n", \ 443160942Sjb i - 1, \ 444255777Smarkj argname[i], arg) > systrace 445160942Sjb } 446177656Sjb printf("\t\tdefault:\n\t\t\tbreak;\n\t\t};\n") > systracetmp 447227441Srstone 448227441Srstone printf("\t\tif (ndx == 0 || ndx == 1)\n") > systraceret 449227441Srstone printf("\t\t\tp = \"%s\";\n", syscallret) > systraceret 450227441Srstone printf("\t\tbreak;\n") > systraceret 451160942Sjb } 452160942Sjb printf("\t\t*n_args = %d;\n\t\tbreak;\n\t}\n", argc) > systrace 453177656Sjb printf("\t\tbreak;\n") > systracetmp 454194390Sjhb if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ 455194390Sjhb !flag("NODEF")) { 456183361Sjhb printf("struct %s {\n", argalias) > sysarg 457183361Sjhb for (i = 1; i <= argc; i++) 458183361Sjhb printf("\tchar %s_l_[PADL_(%s)]; " \ 459183361Sjhb "%s %s; char %s_r_[PADR_(%s)];\n", 460183361Sjhb argname[i], argtype[i], 461183361Sjhb argtype[i], argname[i], 462183361Sjhb argname[i], argtype[i]) > sysarg 463183361Sjhb printf("};\n") > sysarg 46410905Sbde } 465194390Sjhb else if (!flag("NOARGS") && !flag("NOPROTO") && !flag("NODEF")) 466183361Sjhb printf("struct %s {\n\tregister_t dummy;\n};\n", 467183361Sjhb argalias) > sysarg 468194390Sjhb if (!flag("NOPROTO") && !flag("NODEF")) { 469225617Skmacy if (funcname == "nosys" || funcname == "lkmnosys" || 470225617Skmacy funcname == "sysarch" || funcname ~ /^freebsd/ || 471225617Skmacy funcname ~ /^linux/ || funcname ~ /^svr4/ || 472285307Sed funcname ~ /^ibcs2/ || funcname ~ /^xenix/ || 473285307Sed funcname ~ /^cloudabi/) { 474225617Skmacy printf("%s\t%s(struct thread *, struct %s *)", 475225617Skmacy rettype, funcname, argalias) > sysdcl 476225617Skmacy } else { 477225617Skmacy printf("%s\tsys_%s(struct thread *, struct %s *)", 478225617Skmacy rettype, funcname, argalias) > sysdcl 479225617Skmacy } 48018277Sbde printf(";\n") > sysdcl 481161327Sjhb printf("#define\t%sAUE_%s\t%s\n", syscallprefix, 482161327Sjhb funcalias, auditev) > sysaue 48311330Sswallace } 484160798Sjhb printf("\t{ %s, (sy_call_t *)", argssize) > sysent 485160798Sjhb column = 8 + 2 + length(argssize) + 15 486194390Sjhb if (flag("NOSTD")) { 487259438Spjd printf("lkmressys, AUE_NULL, NULL, 0, 0, %s, SY_THR_ABSENT },", flags) > sysent 488193234Srwatson column = column + length("lkmressys") + length("AUE_NULL") + 3 48969445Salfred } else { 490225617Skmacy if (funcname == "nosys" || funcname == "sysarch" || 491225617Skmacy funcname == "lkmnosys" || funcname ~ /^freebsd/ || 492225617Skmacy funcname ~ /^linux/ || funcname ~ /^svr4/ || 493285307Sed funcname ~ /^ibcs2/ || funcname ~ /^xenix/ || 494285307Sed funcname ~ /^cloudabi/) { 495225617Skmacy printf("%s, %s, NULL, 0, 0, %s, %s },", funcname, auditev, flags, thr_flag) > sysent 496225617Skmacy column = column + length(funcname) + length(auditev) + length(flags) + 3 497225617Skmacy } else { 498225617Skmacy printf("sys_%s, %s, NULL, 0, 0, %s, %s },", funcname, auditev, flags, thr_flag) > sysent 499225617Skmacy column = column + length(funcname) + length(auditev) + length(flags) + 3 + 4 500225617Skmacy } 50169445Salfred } 50260287Sbde align_sysent_comment(column) 50358963Salfred printf("/* %d = %s */\n", syscall, funcalias) > sysent 50436770Sbde printf("\t\"%s\",\t\t\t/* %d = %s */\n", 50511294Sswallace funcalias, syscall, funcalias) > sysnames 506194390Sjhb if (!flag("NODEF")) { 50736770Sbde printf("#define\t%s%s\t%d\n", syscallprefix, 50811294Sswallace funcalias, syscall) > syshdr 50934354Sjb printf(" \\\n\t%s.o", funcalias) > sysmk 51034354Sjb } 5111541Srgrimes syscall++ 5121541Srgrimes next 5131541Srgrimes } 514194833Sjhb type("COMPAT") || type("COMPAT4") || type("COMPAT6") || \ 515302093Sbrooks type("COMPAT7") || type("COMPAT10") { 516194390Sjhb if (flag("COMPAT")) { 51799854Salfred ncompat++ 51899854Salfred out = syscompat 51999854Salfred outdcl = syscompatdcl 52099854Salfred wrap = "compat" 52199854Salfred prefix = "o" 522194390Sjhb descr = "old" 523194390Sjhb } else if (flag("COMPAT4")) { 52499854Salfred ncompat4++ 52599854Salfred out = syscompat4 52699854Salfred outdcl = syscompat4dcl 52799854Salfred wrap = "compat4" 52899854Salfred prefix = "freebsd4_" 529194390Sjhb descr = "freebsd4" 530194390Sjhb } else if (flag("COMPAT6")) { 531171208Speter ncompat6++ 532171208Speter out = syscompat6 533171208Speter outdcl = syscompat6dcl 534171208Speter wrap = "compat6" 535171208Speter prefix = "freebsd6_" 536194390Sjhb descr = "freebsd6" 537194833Sjhb } else if (flag("COMPAT7")) { 538194833Sjhb ncompat7++ 539194833Sjhb out = syscompat7 540194833Sjhb outdcl = syscompat7dcl 541194833Sjhb wrap = "compat7" 542194833Sjhb prefix = "freebsd7_" 543194833Sjhb descr = "freebsd7" 544302093Sbrooks } else if (flag("COMPAT10")) { 545302093Sbrooks ncompat10++ 546302093Sbrooks out = syscompat10 547302093Sbrooks outdcl = syscompat10dcl 548302093Sbrooks wrap = "compat10" 549302093Sbrooks prefix = "freebsd10_" 550302093Sbrooks descr = "freebsd10" 55199854Salfred } 55211294Sswallace parseline() 553194390Sjhb if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ 554194390Sjhb !flag("NODEF")) { 55599854Salfred printf("struct %s {\n", argalias) > out 55611294Sswallace for (i = 1; i <= argc; i++) 55782149Stmm printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \ 55882149Stmm "char %s_r_[PADR_(%s)];\n", 55982149Stmm argname[i], argtype[i], 56036735Sdfr argtype[i], argname[i], 56199854Salfred argname[i], argtype[i]) > out 56299854Salfred printf("};\n") > out 56311294Sswallace } 564194390Sjhb else if (!flag("NOARGS") && !flag("NOPROTO") && !flag("NODEF")) 56583046Sobrien printf("struct %s {\n\tregister_t dummy;\n};\n", 56636770Sbde argalias) > sysarg 567194390Sjhb if (!flag("NOPROTO") && !flag("NODEF")) { 568194390Sjhb printf("%s\t%s%s(struct thread *, struct %s *);\n", 569194390Sjhb rettype, prefix, funcname, argalias) > outdcl 570194646Sjhb printf("#define\t%sAUE_%s%s\t%s\n", syscallprefix, 571194646Sjhb prefix, funcname, auditev) > sysaue 572194390Sjhb } 573194390Sjhb if (flag("NOSTD")) { 574209579Skib printf("\t{ %s, (sy_call_t *)%s, %s, NULL, 0, 0, 0, SY_THR_ABSENT },", 575194390Sjhb "0", "lkmressys", "AUE_NULL") > sysent 576194390Sjhb align_sysent_comment(8 + 2 + length("0") + 15 + \ 577194390Sjhb length("lkmressys") + length("AUE_NULL") + 3) 578194390Sjhb } else { 579209579Skib printf("\t{ %s(%s,%s), %s, NULL, 0, 0, %s, %s },", 580209579Skib wrap, argssize, funcname, auditev, flags, thr_flag) > sysent 581194390Sjhb align_sysent_comment(8 + 9 + length(argssize) + 1 + \ 582194390Sjhb length(funcname) + length(auditev) + \ 583194390Sjhb length(flags) + 4) 584194390Sjhb } 585194390Sjhb printf("/* %d = %s %s */\n", syscall, descr, funcalias) > sysent 586194390Sjhb printf("\t\"%s.%s\",\t\t/* %d = %s %s */\n", 587194390Sjhb wrap, funcalias, syscall, descr, funcalias) > sysnames 588303857Sbdrewery # Do not provide freebsdN_* symbols in libc for < FreeBSD 7 589303857Sbdrewery if (flag("COMPAT") || flag("COMPAT4") || flag("COMPAT6")) { 590296773Sjhb printf("\t\t\t\t/* %d is %s %s */\n", 591296773Sjhb syscall, descr, funcalias) > syshdr 592194390Sjhb } else if (!flag("NODEF")) { 593171208Speter printf("#define\t%s%s%s\t%d\n", syscallprefix, 594171208Speter prefix, funcalias, syscall) > syshdr 595171208Speter printf(" \\\n\t%s%s.o", prefix, funcalias) > sysmk 596171208Speter } 5971541Srgrimes syscall++ 5981541Srgrimes next 5991541Srgrimes } 600194390Sjhb type("OBSOL") { 601209579Skib printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },") > sysent 60260287Sbde align_sysent_comment(34) 60360287Sbde printf("/* %d = obsolete %s */\n", syscall, comment) > sysent 60436770Sbde printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", 605146806Srwatson $4, syscall, comment) > sysnames 60636770Sbde printf("\t\t\t\t/* %d is obsolete %s */\n", 6071541Srgrimes syscall, comment) > syshdr 6081541Srgrimes syscall++ 6091541Srgrimes next 6101541Srgrimes } 611194390Sjhb type("UNIMPL") { 612346811Sdchagin while (syscall <= syscall_range[2]) { 613346811Sdchagin printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },\t\t\t/* %d = %s */\n", 614346811Sdchagin syscall, comment) > sysent 615346811Sdchagin printf("\t\"#%d\",\t\t\t/* %d = %s */\n", 616346811Sdchagin syscall, syscall, comment) > sysnames 617346811Sdchagin syscall++ 618346811Sdchagin } 6191541Srgrimes next 6201541Srgrimes } 6211541Srgrimes { 622146806Srwatson printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3 6231541Srgrimes exit 1 6241541Srgrimes } 6251541Srgrimes END { 62660287Sbde printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc 62799854Salfred 628302093Sbrooks if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0 || ncompat7 != 0 || ncompat10 != 0) 62999854Salfred printf "#include \"opt_compat.h\"\n\n" > syssw 63099854Salfred 63136782Sbde if (ncompat != 0) { 63236782Sbde printf "\n#ifdef %s\n", compat > sysinc 63336782Sbde printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc 63436782Sbde printf "#else\n" > sysinc 63536782Sbde printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc 63636782Sbde printf "#endif\n" > sysinc 63736782Sbde } 63836782Sbde 63999854Salfred if (ncompat4 != 0) { 64099854Salfred printf "\n#ifdef %s\n", compat4 > sysinc 64199854Salfred printf "#define compat4(n, name) n, (sy_call_t *)__CONCAT(freebsd4_,name)\n" > sysinc 64299854Salfred printf "#else\n" > sysinc 64399854Salfred printf "#define compat4(n, name) 0, (sy_call_t *)nosys\n" > sysinc 64499854Salfred printf "#endif\n" > sysinc 64599854Salfred } 64699854Salfred 647171208Speter if (ncompat6 != 0) { 648171208Speter printf "\n#ifdef %s\n", compat6 > sysinc 649171208Speter printf "#define compat6(n, name) n, (sy_call_t *)__CONCAT(freebsd6_,name)\n" > sysinc 650171208Speter printf "#else\n" > sysinc 651171208Speter printf "#define compat6(n, name) 0, (sy_call_t *)nosys\n" > sysinc 652171208Speter printf "#endif\n" > sysinc 653171208Speter } 654171208Speter 655194833Sjhb if (ncompat7 != 0) { 656194833Sjhb printf "\n#ifdef %s\n", compat7 > sysinc 657194833Sjhb printf "#define compat7(n, name) n, (sy_call_t *)__CONCAT(freebsd7_,name)\n" > sysinc 658194833Sjhb printf "#else\n" > sysinc 659194833Sjhb printf "#define compat7(n, name) 0, (sy_call_t *)nosys\n" > sysinc 660194833Sjhb printf "#endif\n" > sysinc 661194833Sjhb } 662302093Sbrooks if (ncompat10 != 0) { 663302093Sbrooks printf "\n#ifdef %s\n", compat10 > sysinc 664302093Sbrooks printf "#define compat10(n, name) n, (sy_call_t *)__CONCAT(freebsd10_,name)\n" > sysinc 665302093Sbrooks printf "#else\n" > sysinc 666302093Sbrooks printf "#define compat10(n, name) 0, (sy_call_t *)nosys\n" > sysinc 667302093Sbrooks printf "#endif\n" > sysinc 668302093Sbrooks } 66936735Sdfr printf("\n#endif /* %s */\n\n", compat) > syscompatdcl 67099854Salfred printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl 671171208Speter printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl 672194833Sjhb printf("\n#endif /* %s */\n\n", compat7) > syscompat7dcl 673302093Sbrooks printf("\n#endif /* %s */\n\n", compat10) > syscompat10dcl 67499854Salfred 675161327Sjhb printf("\n#undef PAD_\n") > sysprotoend 67699854Salfred printf("#undef PADL_\n") > sysprotoend 67799854Salfred printf("#undef PADR_\n") > sysprotoend 67899854Salfred printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend 67999854Salfred 68037227Sphk printf("\n") > sysmk 68114331Speter printf("};\n") > sysent 6821541Srgrimes printf("};\n") > sysnames 68311294Sswallace printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \ 68436770Sbde > syshdr 685160942Sjb printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace 686177656Sjb printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systracetmp 687227441Srstone printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systraceret 6881541Srgrimes } ' 6891541Srgrimes 69036782Sbdecat $sysinc $sysent >> $syssw 69199854Salfredcat $sysarg $sysdcl \ 69299854Salfred $syscompat $syscompatdcl \ 69399854Salfred $syscompat4 $syscompat4dcl \ 694171208Speter $syscompat6 $syscompat6dcl \ 695194833Sjhb $syscompat7 $syscompat7dcl \ 696302093Sbrooks $syscompat10 $syscompat10dcl \ 697161327Sjhb $sysaue $sysprotoend > $sysproto 698177656Sjbcat $systracetmp >> $systrace 699227441Srstonecat $systraceret >> $systrace 70099854Salfred 701