makesyscalls.sh revision 219131
11541Srgrimes#! /bin/sh - 21541Srgrimes# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93 350477Speter# $FreeBSD: head/sys/kern/makesyscalls.sh 219131 2011-03-01 13:28:27Z rwatson $ 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 156112903Sjeff printf "#include <sys/ucontext.h>\n\n" > sysarg 157161327Sjhb printf "#include <bsm/audit_kevents.h>\n\n" > sysarg 15833039Sbde printf "struct proc;\n\n" > sysarg 15983366Sjulian printf "struct thread;\n\n" > sysarg 16036770Sbde printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg 16136770Sbde printf "\t\t0 : sizeof(register_t) - sizeof(t))\n\n" > sysarg 16282149Stmm printf "#if BYTE_ORDER == LITTLE_ENDIAN\n"> sysarg 16382149Stmm printf "#define\tPADL_(t)\t0\n" > sysarg 16482149Stmm printf "#define\tPADR_(t)\tPAD_(t)\n" > sysarg 16582149Stmm printf "#else\n" > sysarg 16682149Stmm printf "#define\tPADL_(t)\tPAD_(t)\n" > sysarg 16782149Stmm printf "#define\tPADR_(t)\t0\n" > sysarg 16882149Stmm printf "#endif\n\n" > sysarg 1691541Srgrimes 1701541Srgrimes printf " * created from%s\n */\n\n", $0 > sysnames 171106149Sdwmalone printf "const char *%s[] = {\n", namesname > sysnames 1721541Srgrimes 1731541Srgrimes printf " * created from%s\n */\n\n", $0 > syshdr 1742700Swollman 17534354Sjb printf "# created from%s\nMIASM = ", $0 > sysmk 17634354Sjb 177160942Sjb printf " * This file is part of the DTrace syscall provider.\n */\n\n" > systrace 178209390Sed printf "static void\nsystrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)\n{\n" > systrace 179160942Sjb printf "\tint64_t *iarg = (int64_t *) uarg;\n" > systrace 180160942Sjb printf "\tswitch (sysnum) {\n" > systrace 181160942Sjb 182177656Sjb printf "static void\nsystrace_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)\n{\n\tconst char *p = NULL;\n" > systracetmp 183177656Sjb printf "\tswitch (sysnum) {\n" > systracetmp 184177656Sjb 1851541Srgrimes next 1861541Srgrimes } 1871541Srgrimes NF == 0 || $1 ~ /^;/ { 1881541Srgrimes next 1891541Srgrimes } 19011294Sswallace $1 ~ /^#[ ]*include/ { 19111294Sswallace print > sysinc 19211294Sswallace next 19311294Sswallace } 1941541Srgrimes $1 ~ /^#[ ]*if/ { 1951541Srgrimes print > sysent 1961541Srgrimes print > sysdcl 19711294Sswallace print > sysarg 1981541Srgrimes print > syscompat 19999854Salfred print > syscompat4 200171208Speter print > syscompat6 201194833Sjhb print > syscompat7 2021541Srgrimes print > sysnames 2031541Srgrimes savesyscall = syscall 2041541Srgrimes next 2051541Srgrimes } 2061541Srgrimes $1 ~ /^#[ ]*else/ { 2071541Srgrimes print > sysent 2081541Srgrimes print > sysdcl 20911294Sswallace print > sysarg 2101541Srgrimes print > syscompat 21199854Salfred print > syscompat4 212171208Speter print > syscompat6 213194833Sjhb print > syscompat7 2141541Srgrimes print > sysnames 2151541Srgrimes syscall = savesyscall 2161541Srgrimes next 2171541Srgrimes } 2181541Srgrimes $1 ~ /^#/ { 2191541Srgrimes print > sysent 2201541Srgrimes print > sysdcl 22111294Sswallace print > sysarg 2221541Srgrimes print > syscompat 22399854Salfred print > syscompat4 224171208Speter print > syscompat6 225194833Sjhb print > syscompat7 2261541Srgrimes print > sysnames 2271541Srgrimes next 2281541Srgrimes } 2291541Srgrimes syscall != $1 { 23036770Sbde printf "%s: line %d: syscall number out of sync at %d\n", 23136770Sbde infile, NR, syscall 2321541Srgrimes printf "line is:\n" 2331541Srgrimes print 2341541Srgrimes exit 1 2351541Srgrimes } 236194390Sjhb # Returns true if the type "name" is the first flag in the type field 237194390Sjhb function type(name, flags, n) { 238194390Sjhb n = split($3, flags, /\|/) 239194390Sjhb return (n > 0 && flags[1] == name) 240194390Sjhb } 241194390Sjhb # Returns true if the flag "name" is set in the type field 242194390Sjhb function flag(name, flags, i, n) { 243194390Sjhb n = split($3, flags, /\|/) 244194390Sjhb for (i = 1; i <= n; i++) 245194390Sjhb if (flags[i] == name) 246194390Sjhb return 1 247194390Sjhb return 0 248194390Sjhb } 24960287Sbde function align_sysent_comment(column) { 25060287Sbde printf("\t") > sysent 25160287Sbde column = column + 8 - column % 8 25260287Sbde while (column < 56) { 25360287Sbde printf("\t") > sysent 25460287Sbde column = column + 8 25560287Sbde } 25660287Sbde } 25711294Sswallace function parserr(was, wanted) { 25836770Sbde printf "%s: line %d: unexpected %s (expected %s)\n", 25911294Sswallace infile, NR, was, wanted 26011294Sswallace exit 1 26111294Sswallace } 26211294Sswallace function parseline() { 263146806Srwatson f=4 # toss number, type, audit event 26411294Sswallace argc= 0; 26560287Sbde argssize = "0" 266209579Skib thr_flag = "SY_THR_STATIC" 267209579Skib if (flag("NOTSTATIC")) { 268209579Skib thr_flag = "SY_THR_ABSENT" 269209579Skib } 27011294Sswallace if ($NF != "}") { 27111294Sswallace funcalias=$(NF-2) 27211294Sswallace argalias=$(NF-1) 27311294Sswallace rettype=$NF 27411294Sswallace end=NF-3 27511294Sswallace } else { 27611294Sswallace funcalias="" 27711294Sswallace argalias="" 27811294Sswallace rettype="int" 27911294Sswallace end=NF 28010905Sbde } 281194390Sjhb if (flag("NODEF")) { 282146806Srwatson auditev="AUE_NULL" 283146806Srwatson funcname=$4 284146806Srwatson argssize = "AS(" $6 ")" 28511294Sswallace return 28611294Sswallace } 28711294Sswallace if ($f != "{") 28811294Sswallace parserr($f, "{") 28911294Sswallace f++ 29011294Sswallace if ($end != "}") 29111294Sswallace parserr($end, "}") 29211294Sswallace end-- 29311294Sswallace if ($end != ";") 29411294Sswallace parserr($end, ";") 29511294Sswallace end-- 29611294Sswallace if ($end != ")") 29711294Sswallace parserr($end, ")") 29811294Sswallace end-- 29911294Sswallace 30011294Sswallace f++ #function return type 30111294Sswallace 30211294Sswallace funcname=$f 303219131Srwatson 304219131Srwatson # 305219131Srwatson # We now know the func name, so define a flags field for it. 306219131Srwatson # Do this before any other processing as we may return early 307219131Srwatson # from it. 308219131Srwatson # 309219131Srwatson for (cap in capenabled) { 310219131Srwatson if (funcname == capenabled[cap]) { 311219131Srwatson flags = "SYF_CAPENABLED"; 312219131Srwatson } 313219131Srwatson } 314219131Srwatson 31511294Sswallace if (funcalias == "") 31611294Sswallace funcalias = funcname 31711294Sswallace if (argalias == "") { 31811294Sswallace argalias = funcname "_args" 319194390Sjhb if (flag("COMPAT")) 32011330Sswallace argalias = "o" argalias 321194390Sjhb if (flag("COMPAT4")) 32299854Salfred argalias = "freebsd4_" argalias 323194390Sjhb if (flag("COMPAT6")) 324171208Speter argalias = "freebsd6_" argalias 325194833Sjhb if (flag("COMPAT7")) 326194833Sjhb argalias = "freebsd7_" argalias 32711294Sswallace } 32811294Sswallace f++ 32911294Sswallace 33011294Sswallace if ($f != "(") 33111294Sswallace parserr($f, ")") 33211294Sswallace f++ 33311294Sswallace 33411294Sswallace if (f == end) { 33511294Sswallace if ($f != "void") 33611294Sswallace parserr($f, "argument definition") 33711294Sswallace return 33811294Sswallace } 33911294Sswallace 34011294Sswallace while (f <= end) { 34111294Sswallace argc++ 34211294Sswallace argtype[argc]="" 34311294Sswallace oldf="" 34411294Sswallace while (f < end && $(f+1) != ",") { 34511294Sswallace if (argtype[argc] != "" && oldf != "*") 34611294Sswallace argtype[argc] = argtype[argc]" "; 34711294Sswallace argtype[argc] = argtype[argc]$f; 34811294Sswallace oldf = $f; 34911294Sswallace f++ 35011294Sswallace } 35111294Sswallace if (argtype[argc] == "") 35211294Sswallace parserr($f, "argument definition") 35311294Sswallace argname[argc]=$f; 35411294Sswallace f += 2; # skip name, and any comma 35511294Sswallace } 35660287Sbde if (argc != 0) 35760287Sbde argssize = "AS(" argalias ")" 3581541Srgrimes } 359146806Srwatson { comment = $4 360146806Srwatson if (NF < 7) 361146806Srwatson for (i = 5; i <= NF; i++) 36211294Sswallace comment = comment " " $i 36311294Sswallace } 36482585Sdillon 365146806Srwatson # 366146806Srwatson # The AUE_ audit event identifier. 367146806Srwatson # 368146806Srwatson { 369146806Srwatson auditev = $2; 370146806Srwatson } 371146806Srwatson 372193234Srwatson # 373219131Srwatson # The flags, if any. 374193234Srwatson # 375193234Srwatson { 376193234Srwatson flags = "0"; 377193234Srwatson } 378193234Srwatson 379194390Sjhb type("STD") || type("NODEF") || type("NOARGS") || type("NOPROTO") \ 380194390Sjhb || type("NOSTD") { 38111294Sswallace parseline() 382160942Sjb printf("\t/* %s */\n\tcase %d: {\n", funcname, syscall) > systrace 383177656Sjb printf("\t/* %s */\n\tcase %d:\n", funcname, syscall) > systracetmp 384160942Sjb if (argc > 0) { 385177656Sjb printf("\t\tswitch(ndx) {\n") > systracetmp 386160942Sjb printf("\t\tstruct %s *p = params;\n", argalias) > systrace 387160942Sjb for (i = 1; i <= argc; i++) { 388177656Sjb printf("\t\tcase %d:\n\t\t\tp = \"%s\";\n\t\t\tbreak;\n", i - 1, argtype[i]) > systracetmp 389160942Sjb if (index(argtype[i], "*") > 0 || argtype[i] == "caddr_t") 390160942Sjb printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \ 391160942Sjb i - 1, \ 392160942Sjb argname[i], argtype[i]) > systrace 393160942Sjb else if (substr(argtype[i], 1, 1) == "u" || argtype[i] == "size_t") 394160942Sjb printf("\t\tuarg[%d] = p->%s; /* %s */\n", \ 395160942Sjb i - 1, \ 396160942Sjb argname[i], argtype[i]) > systrace 397160942Sjb else 398160942Sjb printf("\t\tiarg[%d] = p->%s; /* %s */\n", \ 399160942Sjb i - 1, \ 400160942Sjb argname[i], argtype[i]) > systrace 401160942Sjb } 402177656Sjb printf("\t\tdefault:\n\t\t\tbreak;\n\t\t};\n") > systracetmp 403160942Sjb } 404160942Sjb printf("\t\t*n_args = %d;\n\t\tbreak;\n\t}\n", argc) > systrace 405177656Sjb printf("\t\tbreak;\n") > systracetmp 406194390Sjhb if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ 407194390Sjhb !flag("NODEF")) { 408183361Sjhb printf("struct %s {\n", argalias) > sysarg 409183361Sjhb for (i = 1; i <= argc; i++) 410183361Sjhb printf("\tchar %s_l_[PADL_(%s)]; " \ 411183361Sjhb "%s %s; char %s_r_[PADR_(%s)];\n", 412183361Sjhb argname[i], argtype[i], 413183361Sjhb argtype[i], argname[i], 414183361Sjhb argname[i], argtype[i]) > sysarg 415183361Sjhb printf("};\n") > sysarg 41610905Sbde } 417194390Sjhb else if (!flag("NOARGS") && !flag("NOPROTO") && !flag("NODEF")) 418183361Sjhb printf("struct %s {\n\tregister_t dummy;\n};\n", 419183361Sjhb argalias) > sysarg 420194390Sjhb if (!flag("NOPROTO") && !flag("NODEF")) { 42192721Salfred printf("%s\t%s(struct thread *, struct %s *)", 42218277Sbde rettype, funcname, argalias) > sysdcl 42318277Sbde printf(";\n") > sysdcl 424161327Sjhb printf("#define\t%sAUE_%s\t%s\n", syscallprefix, 425161327Sjhb funcalias, auditev) > sysaue 42611330Sswallace } 427160798Sjhb printf("\t{ %s, (sy_call_t *)", argssize) > sysent 428160798Sjhb column = 8 + 2 + length(argssize) + 15 429194390Sjhb if (flag("NOSTD")) { 430209579Skib printf("%s },", "lkmressys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT") > sysent 431193234Srwatson column = column + length("lkmressys") + length("AUE_NULL") + 3 43269445Salfred } else { 433209579Skib printf("%s, %s, NULL, 0, 0, %s, %s },", funcname, auditev, flags, thr_flag) > sysent 434193234Srwatson column = column + length(funcname) + length(auditev) + length(flags) + 3 43569445Salfred } 43660287Sbde align_sysent_comment(column) 43758963Salfred printf("/* %d = %s */\n", syscall, funcalias) > sysent 43836770Sbde printf("\t\"%s\",\t\t\t/* %d = %s */\n", 43911294Sswallace funcalias, syscall, funcalias) > sysnames 440194390Sjhb if (!flag("NODEF")) { 44136770Sbde printf("#define\t%s%s\t%d\n", syscallprefix, 44211294Sswallace funcalias, syscall) > syshdr 44334354Sjb printf(" \\\n\t%s.o", funcalias) > sysmk 44434354Sjb } 4451541Srgrimes syscall++ 4461541Srgrimes next 4471541Srgrimes } 448194833Sjhb type("COMPAT") || type("COMPAT4") || type("COMPAT6") || \ 449194833Sjhb type("COMPAT7") { 450194390Sjhb if (flag("COMPAT")) { 45199854Salfred ncompat++ 45299854Salfred out = syscompat 45399854Salfred outdcl = syscompatdcl 45499854Salfred wrap = "compat" 45599854Salfred prefix = "o" 456194390Sjhb descr = "old" 457194390Sjhb } else if (flag("COMPAT4")) { 45899854Salfred ncompat4++ 45999854Salfred out = syscompat4 46099854Salfred outdcl = syscompat4dcl 46199854Salfred wrap = "compat4" 46299854Salfred prefix = "freebsd4_" 463194390Sjhb descr = "freebsd4" 464194390Sjhb } else if (flag("COMPAT6")) { 465171208Speter ncompat6++ 466171208Speter out = syscompat6 467171208Speter outdcl = syscompat6dcl 468171208Speter wrap = "compat6" 469171208Speter prefix = "freebsd6_" 470194390Sjhb descr = "freebsd6" 471194833Sjhb } else if (flag("COMPAT7")) { 472194833Sjhb ncompat7++ 473194833Sjhb out = syscompat7 474194833Sjhb outdcl = syscompat7dcl 475194833Sjhb wrap = "compat7" 476194833Sjhb prefix = "freebsd7_" 477194833Sjhb descr = "freebsd7" 47899854Salfred } 47911294Sswallace parseline() 480194390Sjhb if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ 481194390Sjhb !flag("NODEF")) { 48299854Salfred printf("struct %s {\n", argalias) > out 48311294Sswallace for (i = 1; i <= argc; i++) 48482149Stmm printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \ 48582149Stmm "char %s_r_[PADR_(%s)];\n", 48682149Stmm argname[i], argtype[i], 48736735Sdfr argtype[i], argname[i], 48899854Salfred argname[i], argtype[i]) > out 48999854Salfred printf("};\n") > out 49011294Sswallace } 491194390Sjhb else if (!flag("NOARGS") && !flag("NOPROTO") && !flag("NODEF")) 49283046Sobrien printf("struct %s {\n\tregister_t dummy;\n};\n", 49336770Sbde argalias) > sysarg 494194390Sjhb if (!flag("NOPROTO") && !flag("NODEF")) { 495194390Sjhb printf("%s\t%s%s(struct thread *, struct %s *);\n", 496194390Sjhb rettype, prefix, funcname, argalias) > outdcl 497194646Sjhb printf("#define\t%sAUE_%s%s\t%s\n", syscallprefix, 498194646Sjhb prefix, funcname, auditev) > sysaue 499194390Sjhb } 500194390Sjhb if (flag("NOSTD")) { 501209579Skib printf("\t{ %s, (sy_call_t *)%s, %s, NULL, 0, 0, 0, SY_THR_ABSENT },", 502194390Sjhb "0", "lkmressys", "AUE_NULL") > sysent 503194390Sjhb align_sysent_comment(8 + 2 + length("0") + 15 + \ 504194390Sjhb length("lkmressys") + length("AUE_NULL") + 3) 505194390Sjhb } else { 506209579Skib printf("\t{ %s(%s,%s), %s, NULL, 0, 0, %s, %s },", 507209579Skib wrap, argssize, funcname, auditev, flags, thr_flag) > sysent 508194390Sjhb align_sysent_comment(8 + 9 + length(argssize) + 1 + \ 509194390Sjhb length(funcname) + length(auditev) + \ 510194390Sjhb length(flags) + 4) 511194390Sjhb } 512194390Sjhb printf("/* %d = %s %s */\n", syscall, descr, funcalias) > sysent 513194390Sjhb printf("\t\"%s.%s\",\t\t/* %d = %s %s */\n", 514194390Sjhb wrap, funcalias, syscall, descr, funcalias) > sysnames 515194390Sjhb if (flag("COMPAT")) { 516171208Speter printf("\t\t\t\t/* %d is old %s */\n", 517171208Speter syscall, funcalias) > syshdr 518194390Sjhb } else if (!flag("NODEF")) { 519171208Speter printf("#define\t%s%s%s\t%d\n", syscallprefix, 520171208Speter prefix, funcalias, syscall) > syshdr 521171208Speter printf(" \\\n\t%s%s.o", prefix, funcalias) > sysmk 522171208Speter } 5231541Srgrimes syscall++ 5241541Srgrimes next 5251541Srgrimes } 526194390Sjhb type("OBSOL") { 527209579Skib printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },") > sysent 52860287Sbde align_sysent_comment(34) 52960287Sbde printf("/* %d = obsolete %s */\n", syscall, comment) > sysent 53036770Sbde printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", 531146806Srwatson $4, syscall, comment) > sysnames 53236770Sbde printf("\t\t\t\t/* %d is obsolete %s */\n", 5331541Srgrimes syscall, comment) > syshdr 5341541Srgrimes syscall++ 5351541Srgrimes next 5361541Srgrimes } 537194390Sjhb type("UNIMPL") { 538209579Skib printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },\t\t\t/* %d = %s */\n", 5391541Srgrimes syscall, comment) > sysent 54036770Sbde printf("\t\"#%d\",\t\t\t/* %d = %s */\n", 5411541Srgrimes syscall, syscall, comment) > sysnames 5421541Srgrimes syscall++ 5431541Srgrimes next 5441541Srgrimes } 5451541Srgrimes { 546146806Srwatson printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3 5471541Srgrimes exit 1 5481541Srgrimes } 5491541Srgrimes END { 55060287Sbde printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc 55199854Salfred 552194833Sjhb if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0 || ncompat7 != 0) 55399854Salfred printf "#include \"opt_compat.h\"\n\n" > syssw 55499854Salfred 55536782Sbde if (ncompat != 0) { 55636782Sbde printf "\n#ifdef %s\n", compat > sysinc 55736782Sbde printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc 55836782Sbde printf "#else\n" > sysinc 55936782Sbde printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc 56036782Sbde printf "#endif\n" > sysinc 56136782Sbde } 56236782Sbde 56399854Salfred if (ncompat4 != 0) { 56499854Salfred printf "\n#ifdef %s\n", compat4 > sysinc 56599854Salfred printf "#define compat4(n, name) n, (sy_call_t *)__CONCAT(freebsd4_,name)\n" > sysinc 56699854Salfred printf "#else\n" > sysinc 56799854Salfred printf "#define compat4(n, name) 0, (sy_call_t *)nosys\n" > sysinc 56899854Salfred printf "#endif\n" > sysinc 56999854Salfred } 57099854Salfred 571171208Speter if (ncompat6 != 0) { 572171208Speter printf "\n#ifdef %s\n", compat6 > sysinc 573171208Speter printf "#define compat6(n, name) n, (sy_call_t *)__CONCAT(freebsd6_,name)\n" > sysinc 574171208Speter printf "#else\n" > sysinc 575171208Speter printf "#define compat6(n, name) 0, (sy_call_t *)nosys\n" > sysinc 576171208Speter printf "#endif\n" > sysinc 577171208Speter } 578171208Speter 579194833Sjhb if (ncompat7 != 0) { 580194833Sjhb printf "\n#ifdef %s\n", compat7 > sysinc 581194833Sjhb printf "#define compat7(n, name) n, (sy_call_t *)__CONCAT(freebsd7_,name)\n" > sysinc 582194833Sjhb printf "#else\n" > sysinc 583194833Sjhb printf "#define compat7(n, name) 0, (sy_call_t *)nosys\n" > sysinc 584194833Sjhb printf "#endif\n" > sysinc 585194833Sjhb } 586194833Sjhb 58736735Sdfr printf("\n#endif /* %s */\n\n", compat) > syscompatdcl 58899854Salfred printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl 589171208Speter printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl 590194833Sjhb printf("\n#endif /* %s */\n\n", compat7) > syscompat7dcl 59199854Salfred 592161327Sjhb printf("\n#undef PAD_\n") > sysprotoend 59399854Salfred printf("#undef PADL_\n") > sysprotoend 59499854Salfred printf("#undef PADR_\n") > sysprotoend 59599854Salfred printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend 59699854Salfred 59737227Sphk printf("\n") > sysmk 59814331Speter printf("};\n") > sysent 5991541Srgrimes printf("};\n") > sysnames 60011294Sswallace printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \ 60136770Sbde > syshdr 602160942Sjb printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace 603177656Sjb printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systracetmp 6041541Srgrimes } ' 6051541Srgrimes 60636782Sbdecat $sysinc $sysent >> $syssw 60799854Salfredcat $sysarg $sysdcl \ 60899854Salfred $syscompat $syscompatdcl \ 60999854Salfred $syscompat4 $syscompat4dcl \ 610171208Speter $syscompat6 $syscompat6dcl \ 611194833Sjhb $syscompat7 $syscompat7dcl \ 612161327Sjhb $sysaue $sysprotoend > $sysproto 613177656Sjbcat $systracetmp >> $systrace 61499854Salfred 615