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