makesyscalls.sh revision 318164
1125410Sgrehan#! /bin/sh - 2125410Sgrehan# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93 3125410Sgrehan# $FreeBSD: stable/10/sys/kern/makesyscalls.sh 318164 2017-05-10 23:09:17Z jhb $ 4125410Sgrehan 5125410Sgrehanset -e 6125410Sgrehan 7125410Sgrehan# name of compat options: 8125410Sgrehancompat=COMPAT_43 9125410Sgrehancompat4=COMPAT_FREEBSD4 10125410Sgrehancompat6=COMPAT_FREEBSD6 11125410Sgrehancompat7=COMPAT_FREEBSD7 12125410Sgrehan 13125410Sgrehan# output files: 14125410Sgrehansysnames="syscalls.c" 15125410Sgrehansysproto="../sys/sysproto.h" 16125410Sgrehansysproto_h=_SYS_SYSPROTO_H_ 17125410Sgrehansyshdr="../sys/syscall.h" 18199243Sedsysmk="../sys/syscall.mk" 19220154Sedsyssw="init_sysent.c" 20220154Sedsyscallprefix="SYS_" 21125410Sgrehanswitchname="sysent" 22125410Sgrehannamesname="syscallnames" 23125410Sgrehansystrace="systrace_args.c" 24125410Sgrehan 25125410Sgrehan# tmp files: 26125410Sgrehansysaue="sysent.aue.$$" 27125410Sgrehansysdcl="sysent.dcl.$$" 28125410Sgrehansyscompat="sysent.compat.$$" 29125410Sgrehansyscompatdcl="sysent.compatdcl.$$" 30125410Sgrehansyscompat4="sysent.compat4.$$" 31125410Sgrehansyscompat4dcl="sysent.compat4dcl.$$" 32199243Sedsyscompat6="sysent.compat6.$$" 33125410Sgrehansyscompat6dcl="sysent.compat6dcl.$$" 34199243Sedsyscompat7="sysent.compat7.$$" 35199243Sedsyscompat7dcl="sysent.compat7dcl.$$" 36199243Sedsysent="sysent.switch.$$" 37199243Sedsysinc="sysinc.switch.$$" 38199243Sedsysarg="sysarg.switch.$$" 39199243Sedsysprotoend="sysprotoend.$$" 40199243Sedsystracetmp="systrace.$$" 41170088Sdougbsystraceret="systraceret.$$" 42125410Sgrehan 43125410Sgrehanif [ -r capabilities.conf ]; then 44290107Sgjb capenabled=`cat capabilities.conf | grep -v "^#" | grep -v "^$"` 45290107Sgjb capenabled=`echo $capenabled | sed 's/ /,/g'` 46290107Sgjbelse 47290107Sgjb capenabled="" 48125410Sgrehanfi 49125410Sgrehan 50trap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp $systraceret" 0 51 52touch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $syscompat7 $syscompat7dcl $sysent $sysinc $sysarg $sysprotoend $systracetmp $systraceret 53 54case $# in 55 0) echo "usage: $0 input-file <config-file>" 1>&2 56 exit 1 57 ;; 58esac 59 60if [ -n "$2" ]; then 61 . $2 62fi 63 64sed -e ' 65:join 66 /\\$/{a\ 67 68 N 69 s/\\\n// 70 b join 71 } 722,${ 73 /^#/!s/\([{}()*,]\)/ \1 /g 74} 75' < $1 | awk " 76 BEGIN { 77 sysaue = \"$sysaue\" 78 sysdcl = \"$sysdcl\" 79 sysproto = \"$sysproto\" 80 sysprotoend = \"$sysprotoend\" 81 sysproto_h = \"$sysproto_h\" 82 syscompat = \"$syscompat\" 83 syscompatdcl = \"$syscompatdcl\" 84 syscompat4 = \"$syscompat4\" 85 syscompat4dcl = \"$syscompat4dcl\" 86 syscompat6 = \"$syscompat6\" 87 syscompat6dcl = \"$syscompat6dcl\" 88 syscompat7 = \"$syscompat7\" 89 syscompat7dcl = \"$syscompat7dcl\" 90 sysent = \"$sysent\" 91 syssw = \"$syssw\" 92 sysinc = \"$sysinc\" 93 sysarg = \"$sysarg\" 94 sysnames = \"$sysnames\" 95 syshdr = \"$syshdr\" 96 sysmk = \"$sysmk\" 97 systrace = \"$systrace\" 98 systracetmp = \"$systracetmp\" 99 systraceret = \"$systraceret\" 100 compat = \"$compat\" 101 compat4 = \"$compat4\" 102 compat6 = \"$compat6\" 103 compat7 = \"$compat7\" 104 syscallprefix = \"$syscallprefix\" 105 switchname = \"$switchname\" 106 namesname = \"$namesname\" 107 infile = \"$1\" 108 capenabled_string = \"$capenabled\" 109 "' 110 111 split(capenabled_string, capenabled, ","); 112 113 printf "/*\n * System call switch table.\n *\n" > syssw 114 printf " * DO NOT EDIT-- this file is automatically generated.\n" > syssw 115 printf " * $%s$\n", "FreeBSD" > syssw 116 printf " */\n\n" > syssw 117 118 printf "/*\n * System call prototypes.\n *\n" > sysarg 119 printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysarg 120 printf " * $%s$\n", "FreeBSD" > sysarg 121 printf " */\n\n" > sysarg 122 123 printf "\n#ifdef %s\n\n", compat > syscompat 124 printf "\n#ifdef %s\n\n", compat4 > syscompat4 125 printf "\n#ifdef %s\n\n", compat6 > syscompat6 126 printf "\n#ifdef %s\n\n", compat7 > syscompat7 127 128 printf "/*\n * System call names.\n *\n" > sysnames 129 printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 130 printf " * $%s$\n", "FreeBSD" > sysnames 131 printf " */\n\n" > sysnames 132 133 printf "/*\n * System call numbers.\n *\n" > syshdr 134 printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 135 printf " * $%s$\n", "FreeBSD" > syshdr 136 printf " */\n\n" > syshdr 137 138 printf "# FreeBSD system call object files.\n" > sysmk 139 printf "# DO NOT EDIT-- this file is automatically generated.\n" > sysmk 140 printf "# $%s$\n", "FreeBSD" > sysmk 141 142 printf "/*\n * System call argument to DTrace register array converstion.\n *\n" > systrace 143 printf " * DO NOT EDIT-- this file is automatically generated.\n" > systrace 144 printf " * $%s$\n", "FreeBSD" > systrace 145 } 146 NR == 1 { 147 printf "\n/* The casts are bogus but will do for now. */\n" > sysent 148 printf "struct sysent %s[] = {\n",switchname > sysent 149 150 printf "#ifndef %s\n", sysproto_h > sysarg 151 printf "#define\t%s\n\n", sysproto_h > sysarg 152 printf "#include <sys/signal.h>\n" > sysarg 153 printf "#include <sys/acl.h>\n" > sysarg 154 printf "#include <sys/cpuset.h>\n" > sysarg 155 printf "#include <sys/_ffcounter.h>\n" > sysarg 156 printf "#include <sys/_semaphore.h>\n" > sysarg 157 printf "#include <sys/ucontext.h>\n" > sysarg 158 printf "#include <sys/wait.h>\n\n" > sysarg 159 printf "#include <bsm/audit_kevents.h>\n\n" > sysarg 160 printf "struct proc;\n\n" > sysarg 161 printf "struct thread;\n\n" > sysarg 162 printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg 163 printf "\t\t0 : sizeof(register_t) - sizeof(t))\n\n" > sysarg 164 printf "#if BYTE_ORDER == LITTLE_ENDIAN\n"> sysarg 165 printf "#define\tPADL_(t)\t0\n" > sysarg 166 printf "#define\tPADR_(t)\tPAD_(t)\n" > sysarg 167 printf "#else\n" > sysarg 168 printf "#define\tPADL_(t)\tPAD_(t)\n" > sysarg 169 printf "#define\tPADR_(t)\t0\n" > sysarg 170 printf "#endif\n\n" > sysarg 171 172 printf "const char *%s[] = {\n", namesname > sysnames 173 174 printf "MIASM = " > sysmk 175 176 printf " * This file is part of the DTrace syscall provider.\n */\n\n" > systrace 177 printf "static void\nsystrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)\n{\n" > systrace 178 printf "\tint64_t *iarg = (int64_t *) uarg;\n" > systrace 179 printf "\tswitch (sysnum) {\n" > systrace 180 181 printf "static void\nsystrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)\n{\n\tconst char *p = NULL;\n" > systracetmp 182 printf "\tswitch (sysnum) {\n" > systracetmp 183 184 printf "static void\nsystrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)\n{\n\tconst char *p = NULL;\n" > systraceret 185 printf "\tswitch (sysnum) {\n" > systraceret 186 187 next 188 } 189 NF == 0 || $1 ~ /^;/ { 190 next 191 } 192 $1 ~ /^#[ ]*include/ { 193 print > sysinc 194 next 195 } 196 $1 ~ /^#[ ]*if/ { 197 print > sysent 198 print > sysdcl 199 print > sysarg 200 print > syscompat 201 print > syscompat4 202 print > syscompat6 203 print > syscompat7 204 print > sysnames 205 print > systrace 206 print > systracetmp 207 print > systraceret 208 savesyscall = syscall 209 next 210 } 211 $1 ~ /^#[ ]*else/ { 212 print > sysent 213 print > sysdcl 214 print > sysarg 215 print > syscompat 216 print > syscompat4 217 print > syscompat6 218 print > syscompat7 219 print > sysnames 220 print > systrace 221 print > systracetmp 222 print > systraceret 223 syscall = savesyscall 224 next 225 } 226 $1 ~ /^#/ { 227 print > sysent 228 print > sysdcl 229 print > sysarg 230 print > syscompat 231 print > syscompat4 232 print > syscompat6 233 print > syscompat7 234 print > sysnames 235 print > systrace 236 print > systracetmp 237 print > systraceret 238 next 239 } 240 syscall != $1 { 241 printf "%s: line %d: syscall number out of sync at %d\n", 242 infile, NR, syscall 243 printf "line is:\n" 244 print 245 exit 1 246 } 247 # Returns true if the type "name" is the first flag in the type field 248 function type(name, flags, n) { 249 n = split($3, flags, /\|/) 250 return (n > 0 && flags[1] == name) 251 } 252 # Returns true if the flag "name" is set in the type field 253 function flag(name, flags, i, n) { 254 n = split($3, flags, /\|/) 255 for (i = 1; i <= n; i++) 256 if (flags[i] == name) 257 return 1 258 return 0 259 } 260 function align_sysent_comment(column) { 261 printf("\t") > sysent 262 column = column + 8 - column % 8 263 while (column < 56) { 264 printf("\t") > sysent 265 column = column + 8 266 } 267 } 268 function parserr(was, wanted) { 269 printf "%s: line %d: unexpected %s (expected %s)\n", 270 infile, NR, was, wanted 271 exit 1 272 } 273 function parseline() { 274 f=4 # toss number, type, audit event 275 argc= 0; 276 argssize = "0" 277 thr_flag = "SY_THR_STATIC" 278 if (flag("NOTSTATIC")) { 279 thr_flag = "SY_THR_ABSENT" 280 } 281 if ($NF != "}") { 282 funcalias=$(NF-2) 283 argalias=$(NF-1) 284 rettype=$NF 285 end=NF-3 286 } else { 287 funcalias="" 288 argalias="" 289 rettype="int" 290 end=NF 291 } 292 if (flag("NODEF")) { 293 auditev="AUE_NULL" 294 funcname=$4 295 argssize = "AS(" $6 ")" 296 return 297 } 298 if ($f != "{") 299 parserr($f, "{") 300 f++ 301 if ($end != "}") 302 parserr($end, "}") 303 end-- 304 if ($end != ";") 305 parserr($end, ";") 306 end-- 307 if ($end != ")") 308 parserr($end, ")") 309 end-- 310 311 syscallret=$f 312 f++ 313 314 funcname=$f 315 316 # 317 # We now know the func name, so define a flags field for it. 318 # Do this before any other processing as we may return early 319 # from it. 320 # 321 for (cap in capenabled) { 322 if (funcname == capenabled[cap]) { 323 flags = "SYF_CAPENABLED"; 324 } 325 } 326 327 if (funcalias == "") 328 funcalias = funcname 329 if (argalias == "") { 330 argalias = funcname "_args" 331 if (flag("COMPAT")) 332 argalias = "o" argalias 333 if (flag("COMPAT4")) 334 argalias = "freebsd4_" argalias 335 if (flag("COMPAT6")) 336 argalias = "freebsd6_" argalias 337 if (flag("COMPAT7")) 338 argalias = "freebsd7_" argalias 339 } 340 f++ 341 342 if ($f != "(") 343 parserr($f, ")") 344 f++ 345 346 if (f == end) { 347 if ($f != "void") 348 parserr($f, "argument definition") 349 return 350 } 351 352 while (f <= end) { 353 argc++ 354 argtype[argc]="" 355 oldf="" 356 while (f < end && $(f+1) != ",") { 357 if (argtype[argc] != "" && oldf != "*") 358 argtype[argc] = argtype[argc]" "; 359 argtype[argc] = argtype[argc]$f; 360 oldf = $f; 361 f++ 362 } 363 if (argtype[argc] == "") 364 parserr($f, "argument definition") 365 argname[argc]=$f; 366 f += 2; # skip name, and any comma 367 } 368 if (argc != 0) 369 argssize = "AS(" argalias ")" 370 } 371 { comment = $4 372 if (NF < 7) 373 for (i = 5; i <= NF; i++) 374 comment = comment " " $i 375 } 376 377 # 378 # The AUE_ audit event identifier. 379 # 380 { 381 auditev = $2; 382 } 383 384 # 385 # The flags, if any. 386 # 387 { 388 flags = "0"; 389 } 390 391 type("STD") || type("NODEF") || type("NOARGS") || type("NOPROTO") \ 392 || type("NOSTD") { 393 parseline() 394 printf("\t/* %s */\n\tcase %d: {\n", funcname, syscall) > systrace 395 printf("\t/* %s */\n\tcase %d:\n", funcname, syscall) > systracetmp 396 printf("\t/* %s */\n\tcase %d:\n", funcname, syscall) > systraceret 397 if (argc > 0) { 398 printf("\t\tswitch(ndx) {\n") > systracetmp 399 printf("\t\tstruct %s *p = params;\n", argalias) > systrace 400 for (i = 1; i <= argc; i++) { 401 arg = argtype[i] 402 sub("__restrict$", "", arg) 403 printf("\t\tcase %d:\n\t\t\tp = \"%s\";\n\t\t\tbreak;\n", i - 1, arg) > systracetmp 404 if (index(arg, "*") > 0 || arg == "caddr_t") 405 printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \ 406 i - 1, \ 407 argname[i], arg) > systrace 408 else if (arg == "union l_semun") 409 printf("\t\tuarg[%d] = p->%s.buf; /* %s */\n", \ 410 i - 1, \ 411 argname[i], arg) > systrace 412 else if (substr(arg, 1, 1) == "u" || arg == "size_t") 413 printf("\t\tuarg[%d] = p->%s; /* %s */\n", \ 414 i - 1, \ 415 argname[i], arg) > systrace 416 else 417 printf("\t\tiarg[%d] = p->%s; /* %s */\n", \ 418 i - 1, \ 419 argname[i], arg) > systrace 420 } 421 printf("\t\tdefault:\n\t\t\tbreak;\n\t\t};\n") > systracetmp 422 423 printf("\t\tif (ndx == 0 || ndx == 1)\n") > systraceret 424 printf("\t\t\tp = \"%s\";\n", syscallret) > systraceret 425 printf("\t\tbreak;\n") > systraceret 426 } 427 printf("\t\t*n_args = %d;\n\t\tbreak;\n\t}\n", argc) > systrace 428 printf("\t\tbreak;\n") > systracetmp 429 if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ 430 !flag("NODEF")) { 431 printf("struct %s {\n", argalias) > sysarg 432 for (i = 1; i <= argc; i++) 433 printf("\tchar %s_l_[PADL_(%s)]; " \ 434 "%s %s; char %s_r_[PADR_(%s)];\n", 435 argname[i], argtype[i], 436 argtype[i], argname[i], 437 argname[i], argtype[i]) > sysarg 438 printf("};\n") > sysarg 439 } 440 else if (!flag("NOARGS") && !flag("NOPROTO") && !flag("NODEF")) 441 printf("struct %s {\n\tregister_t dummy;\n};\n", 442 argalias) > sysarg 443 if (!flag("NOPROTO") && !flag("NODEF")) { 444 if (funcname == "nosys" || funcname == "lkmnosys" || 445 funcname == "sysarch" || funcname ~ /^freebsd/ || 446 funcname ~ /^linux/ || funcname ~ /^svr4/ || 447 funcname ~ /^ibcs2/ || funcname ~ /^xenix/) { 448 printf("%s\t%s(struct thread *, struct %s *)", 449 rettype, funcname, argalias) > sysdcl 450 } else { 451 printf("%s\tsys_%s(struct thread *, struct %s *)", 452 rettype, funcname, argalias) > sysdcl 453 } 454 printf(";\n") > sysdcl 455 printf("#define\t%sAUE_%s\t%s\n", syscallprefix, 456 funcalias, auditev) > sysaue 457 } 458 printf("\t{ %s, (sy_call_t *)", argssize) > sysent 459 column = 8 + 2 + length(argssize) + 15 460 if (flag("NOSTD")) { 461 printf("lkmressys, AUE_NULL, NULL, 0, 0, %s, SY_THR_ABSENT },", flags) > sysent 462 column = column + length("lkmressys") + length("AUE_NULL") + 3 463 } else { 464 if (funcname == "nosys" || funcname == "sysarch" || 465 funcname == "lkmnosys" || funcname ~ /^freebsd/ || 466 funcname ~ /^linux/ || funcname ~ /^svr4/ || 467 funcname ~ /^ibcs2/ || funcname ~ /^xenix/) { 468 printf("%s, %s, NULL, 0, 0, %s, %s },", funcname, auditev, flags, thr_flag) > sysent 469 column = column + length(funcname) + length(auditev) + length(flags) + 3 470 } else { 471 printf("sys_%s, %s, NULL, 0, 0, %s, %s },", funcname, auditev, flags, thr_flag) > sysent 472 column = column + length(funcname) + length(auditev) + length(flags) + 3 + 4 473 } 474 } 475 align_sysent_comment(column) 476 printf("/* %d = %s */\n", syscall, funcalias) > sysent 477 printf("\t\"%s\",\t\t\t/* %d = %s */\n", 478 funcalias, syscall, funcalias) > sysnames 479 if (!flag("NODEF")) { 480 printf("#define\t%s%s\t%d\n", syscallprefix, 481 funcalias, syscall) > syshdr 482 printf(" \\\n\t%s.o", funcalias) > sysmk 483 } 484 syscall++ 485 next 486 } 487 type("COMPAT") || type("COMPAT4") || type("COMPAT6") || \ 488 type("COMPAT7") { 489 if (flag("COMPAT")) { 490 ncompat++ 491 out = syscompat 492 outdcl = syscompatdcl 493 wrap = "compat" 494 prefix = "o" 495 descr = "old" 496 } else if (flag("COMPAT4")) { 497 ncompat4++ 498 out = syscompat4 499 outdcl = syscompat4dcl 500 wrap = "compat4" 501 prefix = "freebsd4_" 502 descr = "freebsd4" 503 } else if (flag("COMPAT6")) { 504 ncompat6++ 505 out = syscompat6 506 outdcl = syscompat6dcl 507 wrap = "compat6" 508 prefix = "freebsd6_" 509 descr = "freebsd6" 510 } else if (flag("COMPAT7")) { 511 ncompat7++ 512 out = syscompat7 513 outdcl = syscompat7dcl 514 wrap = "compat7" 515 prefix = "freebsd7_" 516 descr = "freebsd7" 517 } 518 parseline() 519 if (argc != 0 && !flag("NOARGS") && !flag("NOPROTO") && \ 520 !flag("NODEF")) { 521 printf("struct %s {\n", argalias) > out 522 for (i = 1; i <= argc; i++) 523 printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \ 524 "char %s_r_[PADR_(%s)];\n", 525 argname[i], argtype[i], 526 argtype[i], argname[i], 527 argname[i], argtype[i]) > out 528 printf("};\n") > out 529 } 530 else if (!flag("NOARGS") && !flag("NOPROTO") && !flag("NODEF")) 531 printf("struct %s {\n\tregister_t dummy;\n};\n", 532 argalias) > sysarg 533 if (!flag("NOPROTO") && !flag("NODEF")) { 534 printf("%s\t%s%s(struct thread *, struct %s *);\n", 535 rettype, prefix, funcname, argalias) > outdcl 536 printf("#define\t%sAUE_%s%s\t%s\n", syscallprefix, 537 prefix, funcname, auditev) > sysaue 538 } 539 if (flag("NOSTD")) { 540 printf("\t{ %s, (sy_call_t *)%s, %s, NULL, 0, 0, 0, SY_THR_ABSENT },", 541 "0", "lkmressys", "AUE_NULL") > sysent 542 align_sysent_comment(8 + 2 + length("0") + 15 + \ 543 length("lkmressys") + length("AUE_NULL") + 3) 544 } else { 545 printf("\t{ %s(%s,%s), %s, NULL, 0, 0, %s, %s },", 546 wrap, argssize, funcname, auditev, flags, thr_flag) > sysent 547 align_sysent_comment(8 + 9 + length(argssize) + 1 + \ 548 length(funcname) + length(auditev) + \ 549 length(flags) + 4) 550 } 551 printf("/* %d = %s %s */\n", syscall, descr, funcalias) > sysent 552 printf("\t\"%s.%s\",\t\t/* %d = %s %s */\n", 553 wrap, funcalias, syscall, descr, funcalias) > sysnames 554 if (flag("COMPAT")) { 555 printf("\t\t\t\t/* %d is old %s */\n", 556 syscall, funcalias) > syshdr 557 } else if (!flag("NODEF")) { 558 printf("#define\t%s%s%s\t%d\n", syscallprefix, 559 prefix, funcalias, syscall) > syshdr 560 printf(" \\\n\t%s%s.o", prefix, funcalias) > sysmk 561 } 562 syscall++ 563 next 564 } 565 type("OBSOL") { 566 printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },") > sysent 567 align_sysent_comment(34) 568 printf("/* %d = obsolete %s */\n", syscall, comment) > sysent 569 printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", 570 $4, syscall, comment) > sysnames 571 printf("\t\t\t\t/* %d is obsolete %s */\n", 572 syscall, comment) > syshdr 573 syscall++ 574 next 575 } 576 type("UNIMPL") { 577 printf("\t{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT },\t\t\t/* %d = %s */\n", 578 syscall, comment) > sysent 579 printf("\t\"#%d\",\t\t\t/* %d = %s */\n", 580 syscall, syscall, comment) > sysnames 581 syscall++ 582 next 583 } 584 { 585 printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $3 586 exit 1 587 } 588 END { 589 printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc 590 591 if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0 || ncompat7 != 0) 592 printf "#include \"opt_compat.h\"\n\n" > syssw 593 594 if (ncompat != 0) { 595 printf "\n#ifdef %s\n", compat > sysinc 596 printf "#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)\n" > sysinc 597 printf "#else\n" > sysinc 598 printf "#define compat(n, name) 0, (sy_call_t *)nosys\n" > sysinc 599 printf "#endif\n" > sysinc 600 } 601 602 if (ncompat4 != 0) { 603 printf "\n#ifdef %s\n", compat4 > sysinc 604 printf "#define compat4(n, name) n, (sy_call_t *)__CONCAT(freebsd4_,name)\n" > sysinc 605 printf "#else\n" > sysinc 606 printf "#define compat4(n, name) 0, (sy_call_t *)nosys\n" > sysinc 607 printf "#endif\n" > sysinc 608 } 609 610 if (ncompat6 != 0) { 611 printf "\n#ifdef %s\n", compat6 > sysinc 612 printf "#define compat6(n, name) n, (sy_call_t *)__CONCAT(freebsd6_,name)\n" > sysinc 613 printf "#else\n" > sysinc 614 printf "#define compat6(n, name) 0, (sy_call_t *)nosys\n" > sysinc 615 printf "#endif\n" > sysinc 616 } 617 618 if (ncompat7 != 0) { 619 printf "\n#ifdef %s\n", compat7 > sysinc 620 printf "#define compat7(n, name) n, (sy_call_t *)__CONCAT(freebsd7_,name)\n" > sysinc 621 printf "#else\n" > sysinc 622 printf "#define compat7(n, name) 0, (sy_call_t *)nosys\n" > sysinc 623 printf "#endif\n" > sysinc 624 } 625 626 printf("\n#endif /* %s */\n\n", compat) > syscompatdcl 627 printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl 628 printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl 629 printf("\n#endif /* %s */\n\n", compat7) > syscompat7dcl 630 631 printf("\n#undef PAD_\n") > sysprotoend 632 printf("#undef PADL_\n") > sysprotoend 633 printf("#undef PADR_\n") > sysprotoend 634 printf("\n#endif /* !%s */\n", sysproto_h) > sysprotoend 635 636 printf("\n") > sysmk 637 printf("};\n") > sysent 638 printf("};\n") > sysnames 639 printf("#define\t%sMAXSYSCALL\t%d\n", syscallprefix, syscall) \ 640 > syshdr 641 printf "\tdefault:\n\t\t*n_args = 0;\n\t\tbreak;\n\t};\n}\n" > systrace 642 printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systracetmp 643 printf "\tdefault:\n\t\tbreak;\n\t};\n\tif (p != NULL)\n\t\tstrlcpy(desc, p, descsz);\n}\n" > systraceret 644 } ' 645 646cat $sysinc $sysent >> $syssw 647cat $sysarg $sysdcl \ 648 $syscompat $syscompatdcl \ 649 $syscompat4 $syscompat4dcl \ 650 $syscompat6 $syscompat6dcl \ 651 $syscompat7 $syscompat7dcl \ 652 $sysaue $sysprotoend > $sysproto 653cat $systracetmp >> $systrace 654cat $systraceret >> $systrace 655 656