1#!/usr/bin/awk -f 2 3#===-- generate_netbsd_syscalls.awk ----------------------------------------===# 4# 5# The LLVM Compiler Infrastructure 6# 7# This file is distributed under the University of Illinois Open Source 8# License. See LICENSE.TXT for details. 9# 10#===------------------------------------------------------------------------===# 11# 12# This file is a generator of: 13# - include/sanitizer/netbsd_syscall_hooks.h 14# - lib/sanitizer_common/sanitizer_syscalls_netbsd.inc 15# 16# This script accepts on the input syscalls.master by default located in the 17# /usr/src/sys/kern/syscalls.master path in the NetBSD distribution. 18# 19# NetBSD version 8.0. 20# 21#===------------------------------------------------------------------------===# 22 23BEGIN { 24 # harcode the script name 25 script_name = "generate_netbsd_syscalls.awk" 26 outputh = "../include/sanitizer/netbsd_syscall_hooks.h" 27 outputinc = "../lib/sanitizer_common/sanitizer_syscalls_netbsd.inc" 28 29 # assert that we are in the directory with scripts 30 in_utils = system("test -f " script_name " && exit 1 || exit 0") 31 if (in_utils == 0) { 32 usage() 33 } 34 35 # assert 1 argument passed 36 if (ARGC != 2) { 37 usage() 38 } 39 40 # assert argument is a valid file path to syscall.master 41 if (system("test -f " ARGV[1]) != 0) { 42 usage() 43 } 44 45 # sanity check that the path ends with "syscall.master" 46 if (ARGV[1] !~ /syscalls\.master$/) { 47 usage() 48 } 49 50 # accept overloading CLANGFORMAT from environment 51 clangformat = "clang-format" 52 if ("CLANGFORMAT" in ENVIRON) { 53 clangformat = ENVIRON["CLANGFORMAT"] 54 } 55 56 # parsing specific symbols 57 parsingheader=1 58 59 parsedsyscalls=0 60 61 # Hardcoded in algorithm 62 SYS_MAXSYSARGS=8 63} 64 65# Parse the RCS ID from syscall.master 66parsingheader == 1 && NR == 1 { 67 if (match($0, /\$[^$]+\$/)) { 68 # trim initial 'NetBSD: ' and trailing ' $' 69 syscallmasterversion = substr($0, RSTART + 9, RLENGTH - 11) 70 } else { 71 # wrong file? 72 usage() 73 } 74} 75 76# skip the following lines 77# - empty 78NF == 0 { 79 next 80} 81# - comment 82$1 == ";" { 83 next 84} 85 86# separator between the header and table with syscalls 87$0 == "%%" { 88 parsingheader = 0 89 next 90} 91 92# preserve 'if/elif/else/endif' C preprocessor as-is 93parsingheader == 0 && $0 ~ /^#/ { 94 if (parsedsyscalls in ifelifelseendif) { 95 ifelifelseendif[parsedsyscalls] = ifelifelseendif[parsedsyscalls] "\n" $0 96 } else { 97 ifelifelseendif[parsedsyscalls] = $0 98 } 99 next 100} 101 102# parsing of syscall definitions 103parsingheader == 0 && $1 ~ /^[0-9]+$/ { 104 # first join multiple lines into single one 105 while (sub(/\\$/, "")) { 106 getline line 107 $0 = $0 "" line 108 } 109 110 # Skip unwanted syscalls 111 skip=0 112 if ($0 ~ /OBSOL/ || $0 ~ /EXCL/ || $0 ~ /UNIMPL/) { 113 skip=1 114 } 115 116 # Compose the syscall name 117 # - compat? 118 compat="" 119 if (match($0, /COMPAT_[0-9]+/)) { 120 compat = tolower(substr($0, RSTART, RLENGTH)) 121 } 122 # - alias name? 123 alias="" 124 if ($(NF) != "}" && !skip) { 125 alias = alias "" $(NF) 126 } 127 # - compat version? 128 compatver="" 129 if (match($0, /\|[0-9]+\|/)) { 130 compatver = tolower(substr($0, RSTART + 1, RLENGTH - 2)) 131 } 132 # - basename? 133 basename="" 134 if (skip) { 135 basename = $1 136 } else { 137 if (match($0, /\|[_a-z0-9]+\(/)) { 138 basename = tolower(substr($0, RSTART + 1, RLENGTH - 2)) 139 } 140 } 141 142 syscallname="" 143 144 if (skip) { 145 syscallname= syscallname "$" 146 } 147 148 if (length(compat) > 0) { 149 syscallname = syscallname "" compat "_" 150 } 151 if (length(alias) > 0) { 152 syscallname = syscallname "" alias 153 } else { 154 if (length(compatver) > 0) { 155 syscallname = syscallname "__" basename "" compatver 156 } else { 157 syscallname = syscallname "" basename 158 } 159 } 160 161 # Store the syscallname 162 syscalls[parsedsyscalls]=syscallname 163 164 # Extract syscall arguments 165 if (match($0, /\([^)]+\)/)) { 166 args = substr($0, RSTART + 1, RLENGTH - 2) 167 168 if (args == "void") { 169 syscallargs[parsedsyscalls] = "void" 170 syscallfullargs[parsedsyscalls] = "void" 171 } else { 172 # Normalize 'type * argument' to 'type *argument' 173 gsub("\\*[ \t]+", "*", args) 174 175 n = split(args, a, ",") 176 177 # Handle the first argument 178 match(a[1], /[*_a-z0-9\[\]]+$/) 179 syscallfullargs[parsedsyscalls] = substr(a[1], RSTART) "_" 180 181 gsub(".+[ *]", "", a[1]) 182 syscallargs[parsedsyscalls] = a[1] 183 184 # Handle the rest of arguments 185 for (i = 2; i <= n; i++) { 186 match(a[i], /[*_a-zA-Z0-9\[\]]+$/) 187 fs = substr(a[i], RSTART) 188 if (fs ~ /\[/) { 189 sub(/\[/, "_[", fs) 190 } else { 191 fs = fs "_" 192 } 193 syscallfullargs[parsedsyscalls] = syscallfullargs[parsedsyscalls] "$" fs 194 gsub(".+[ *]", "", a[i]) 195 syscallargs[parsedsyscalls] = syscallargs[parsedsyscalls] "$" a[i] 196 } 197 198 # Handle array arguments for syscall(2) and __syscall(2) 199 nargs = "arg0$arg1$arg2$arg3$arg4$arg5$arg6$arg7" 200 gsub(/args\[SYS_MAXSYSARGS\]/, nargs, syscallargs[parsedsyscalls]) 201 } 202 } 203 204 parsedsyscalls++ 205 206 # Done with this line 207 next 208} 209 210 211END { 212 # empty file? 213 if (NR < 1 && !abnormal_exit) { 214 usage() 215 } 216 217 # Handle abnormal exit 218 if (abnormal_exit) { 219 exit(abnormal_exit) 220 } 221 222 # Generate sanitizer_syscalls_netbsd.inc 223 224 # open pipe 225 cmd = clangformat " > " outputh 226 227 pcmd("//===-- netbsd_syscall_hooks.h --------------------------------------------===//") 228 pcmd("//") 229 pcmd("// The LLVM Compiler Infrastructure") 230 pcmd("//") 231 pcmd("// This file is distributed under the University of Illinois Open Source") 232 pcmd("// License. See LICENSE.TXT for details.") 233 pcmd("//") 234 pcmd("//===----------------------------------------------------------------------===//") 235 pcmd("//") 236 pcmd("// This file is a part of public sanitizer interface.") 237 pcmd("//") 238 pcmd("// System call handlers.") 239 pcmd("//") 240 pcmd("// Interface methods declared in this header implement pre- and post- syscall") 241 pcmd("// actions for the active sanitizer.") 242 pcmd("// Usage:") 243 pcmd("// __sanitizer_syscall_pre_getfoo(...args...);") 244 pcmd("// long long res = syscall(SYS_getfoo, ...args...);") 245 pcmd("// __sanitizer_syscall_post_getfoo(res, ...args...);") 246 pcmd("//") 247 pcmd("// DO NOT EDIT! THIS FILE HAS BEEN GENERATED!") 248 pcmd("//") 249 pcmd("// Generated with: " script_name) 250 pcmd("// Generated date: " strftime("%F")) 251 pcmd("// Generated from: " syscallmasterversion) 252 pcmd("//") 253 pcmd("//===----------------------------------------------------------------------===//") 254 pcmd("#ifndef SANITIZER_NETBSD_SYSCALL_HOOKS_H") 255 pcmd("#define SANITIZER_NETBSD_SYSCALL_HOOKS_H") 256 pcmd("") 257 258 for (i = 0; i < parsedsyscalls; i++) { 259 260 if (i in ifelifelseendif) { 261 pcmd(ifelifelseendif[i]) 262 } 263 264 sn = syscalls[i] 265 266 if (sn ~ /^\$/) { 267 pcmd("/* syscall " substr(sn,2) " has been skipped */") 268 continue 269 } 270 271 inargs = "" 272 273 if (syscallargs[i] != "void") { 274 inargs = syscallargs[i] 275 gsub(/\$/, ", ", inargs) 276 } 277 278 outargs = "" 279 280 if (syscallargs[i] != "void") { 281 outargs = "(long long)(" syscallargs[i] ")" 282 gsub(/\$/, "), (long long)(", outargs) 283 } 284 285 pcmd("#define __sanitizer_syscall_pre_" sn "(" inargs ") \\") 286 pcmd(" __sanitizer_syscall_pre_impl_" sn "(" outargs ")") 287 288 if (inargs == "") { 289 inargs = "res" 290 } else { 291 inargs = "res, " inargs 292 } 293 294 if (outargs == "") { 295 outargs = "res" 296 } else { 297 outargs = "res, " outargs 298 } 299 300 pcmd("#define __sanitizer_syscall_post_" sn "(" inargs ") \\") 301 pcmd(" __sanitizer_syscall_post_impl_" sn "(" outargs ")") 302 } 303 304 pcmd("") 305 pcmd("#ifdef __cplusplus") 306 pcmd("extern \"C\" {") 307 pcmd("#endif") 308 pcmd("") 309 pcmd("// Private declarations. Do not call directly from user code. Use macros above.") 310 pcmd("") 311 pcmd("// DO NOT EDIT! THIS FILE HAS BEEN GENERATED!") 312 pcmd("") 313 314 for (i = 0; i < parsedsyscalls; i++) { 315 316 if (i in ifelifelseendif) { 317 pcmd(ifelifelseendif[i]) 318 } 319 320 sn = syscalls[i] 321 322 if (sn ~ /^\$/) { 323 pcmd("/* syscall " substr(sn,2) " has been skipped */") 324 continue 325 } 326 327 preargs = syscallargs[i] 328 329 if (preargs != "void") { 330 preargs = "long long " preargs 331 gsub(/\$/, ", long long ", preargs) 332 } 333 334 if (preargs == "void") { 335 postargs = "long long res" 336 } else { 337 postargs = "long long res, " preargs 338 } 339 340 pcmd("void __sanitizer_syscall_pre_impl_" sn "(" preargs ");") 341 pcmd("void __sanitizer_syscall_post_impl_" sn "(" postargs ");") 342 } 343 344 pcmd("") 345 pcmd("#ifdef __cplusplus") 346 pcmd("} // extern \"C\"") 347 pcmd("#endif") 348 349 pcmd("") 350 pcmd("// DO NOT EDIT! THIS FILE HAS BEEN GENERATED!") 351 pcmd("") 352 353 pcmd("#endif // SANITIZER_NETBSD_SYSCALL_HOOKS_H") 354 355 close(cmd) 356 357 # Generate sanitizer_syscalls_netbsd.inc 358 359 # open pipe 360 cmd = clangformat " > " outputinc 361 362 pcmd("//===-- sanitizer_syscalls_netbsd.inc ---------------------------*- C++ -*-===//") 363 pcmd("//") 364 pcmd("// The LLVM Compiler Infrastructure") 365 pcmd("//") 366 pcmd("// This file is distributed under the University of Illinois Open Source") 367 pcmd("// License. See LICENSE.TXT for details.") 368 pcmd("//") 369 pcmd("//===----------------------------------------------------------------------===//") 370 pcmd("//") 371 pcmd("// Common syscalls handlers for tools like AddressSanitizer,") 372 pcmd("// ThreadSanitizer, MemorySanitizer, etc.") 373 pcmd("//") 374 pcmd("// This file should be included into the tool's interceptor file,") 375 pcmd("// which has to define it's own macros:") 376 pcmd("// COMMON_SYSCALL_PRE_READ_RANGE") 377 pcmd("// Called in prehook for regions that will be read by the kernel and") 378 pcmd("// must be initialized.") 379 pcmd("// COMMON_SYSCALL_PRE_WRITE_RANGE") 380 pcmd("// Called in prehook for regions that will be written to by the kernel") 381 pcmd("// and must be addressable. The actual write range may be smaller than") 382 pcmd("// reported in the prehook. See POST_WRITE_RANGE.") 383 pcmd("// COMMON_SYSCALL_POST_READ_RANGE") 384 pcmd("// Called in posthook for regions that were read by the kernel. Does") 385 pcmd("// not make much sense.") 386 pcmd("// COMMON_SYSCALL_POST_WRITE_RANGE") 387 pcmd("// Called in posthook for regions that were written to by the kernel") 388 pcmd("// and are now initialized.") 389 pcmd("// COMMON_SYSCALL_ACQUIRE(addr)") 390 pcmd("// Acquire memory visibility from addr.") 391 pcmd("// COMMON_SYSCALL_RELEASE(addr)") 392 pcmd("// Release memory visibility to addr.") 393 pcmd("// COMMON_SYSCALL_FD_CLOSE(fd)") 394 pcmd("// Called before closing file descriptor fd.") 395 pcmd("// COMMON_SYSCALL_FD_ACQUIRE(fd)") 396 pcmd("// Acquire memory visibility from fd.") 397 pcmd("// COMMON_SYSCALL_FD_RELEASE(fd)") 398 pcmd("// Release memory visibility to fd.") 399 pcmd("// COMMON_SYSCALL_PRE_FORK()") 400 pcmd("// Called before fork syscall.") 401 pcmd("// COMMON_SYSCALL_POST_FORK(long long res)") 402 pcmd("// Called after fork syscall.") 403 pcmd("//") 404 pcmd("// DO NOT EDIT! THIS FILE HAS BEEN GENERATED!") 405 pcmd("//") 406 pcmd("// Generated with: " script_name) 407 pcmd("// Generated date: " strftime("%F")) 408 pcmd("// Generated from: " syscallmasterversion) 409 pcmd("//") 410 pcmd("//===----------------------------------------------------------------------===//") 411 pcmd("") 412 pcmd("#include \"sanitizer_platform.h\"") 413 pcmd("#if SANITIZER_NETBSD") 414 pcmd("") 415 pcmd("#include \"sanitizer_libc.h\"") 416 pcmd("") 417 pcmd("#define PRE_SYSCALL(name) \\") 418 pcmd(" SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_syscall_pre_impl_##name") 419 pcmd("#define PRE_READ(p, s) COMMON_SYSCALL_PRE_READ_RANGE(p, s)") 420 pcmd("#define PRE_WRITE(p, s) COMMON_SYSCALL_PRE_WRITE_RANGE(p, s)") 421 pcmd("") 422 pcmd("#define POST_SYSCALL(name) \\") 423 pcmd(" SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_syscall_post_impl_##name") 424 pcmd("#define POST_READ(p, s) COMMON_SYSCALL_POST_READ_RANGE(p, s)") 425 pcmd("#define POST_WRITE(p, s) COMMON_SYSCALL_POST_WRITE_RANGE(p, s)") 426 pcmd("") 427 pcmd("#ifndef COMMON_SYSCALL_ACQUIRE") 428 pcmd("# define COMMON_SYSCALL_ACQUIRE(addr) ((void)(addr))") 429 pcmd("#endif") 430 pcmd("") 431 pcmd("#ifndef COMMON_SYSCALL_RELEASE") 432 pcmd("# define COMMON_SYSCALL_RELEASE(addr) ((void)(addr))") 433 pcmd("#endif") 434 pcmd("") 435 pcmd("#ifndef COMMON_SYSCALL_FD_CLOSE") 436 pcmd("# define COMMON_SYSCALL_FD_CLOSE(fd) ((void)(fd))") 437 pcmd("#endif") 438 pcmd("") 439 pcmd("#ifndef COMMON_SYSCALL_FD_ACQUIRE") 440 pcmd("# define COMMON_SYSCALL_FD_ACQUIRE(fd) ((void)(fd))") 441 pcmd("#endif") 442 pcmd("") 443 pcmd("#ifndef COMMON_SYSCALL_FD_RELEASE") 444 pcmd("# define COMMON_SYSCALL_FD_RELEASE(fd) ((void)(fd))") 445 pcmd("#endif") 446 pcmd("") 447 pcmd("#ifndef COMMON_SYSCALL_PRE_FORK") 448 pcmd("# define COMMON_SYSCALL_PRE_FORK() {}") 449 pcmd("#endif") 450 pcmd("") 451 pcmd("#ifndef COMMON_SYSCALL_POST_FORK") 452 pcmd("# define COMMON_SYSCALL_POST_FORK(res) {}") 453 pcmd("#endif") 454 pcmd("") 455 pcmd("// FIXME: do some kind of PRE_READ for all syscall arguments (int(s) and such).") 456 pcmd("") 457 pcmd("extern \"C\" {") 458 pcmd("#define SYS_MAXSYSARGS " SYS_MAXSYSARGS) 459 460 for (i = 0; i < parsedsyscalls; i++) { 461 462 if (i in ifelifelseendif) { 463 pcmd(ifelifelseendif[i]) 464 } 465 466 sn = syscalls[i] 467 468 if (sn ~ /^\$/) { 469 pcmd("/* syscall " substr(sn,2) " has been skipped */") 470 continue 471 } 472 473 preargs = syscallfullargs[i] 474 475 if (preargs != "void") { 476 preargs = "long long " preargs 477 gsub(/\$/, ", long long ", preargs) 478 gsub(/long long \*/, "void *", preargs) 479 } 480 481 if (preargs == "void") { 482 postargs = "long long res" 483 } else { 484 postargs = "long long res, " preargs 485 } 486 487 pcmd("PRE_SYSCALL(" sn ")(" preargs ")") 488 pcmd("{") 489 syscall_body(sn, "pre") 490 pcmd("}") 491 492 pcmd("POST_SYSCALL(" sn ")(" postargs ")") 493 pcmd("{") 494 syscall_body(sn, "post") 495 pcmd("}") 496 } 497 498 pcmd("#undef SYS_MAXSYSARGS") 499 pcmd("} // extern \"C\"") 500 pcmd("") 501 pcmd("#undef PRE_SYSCALL") 502 pcmd("#undef PRE_READ") 503 pcmd("#undef PRE_WRITE") 504 pcmd("#undef POST_SYSCALL") 505 pcmd("#undef POST_READ") 506 pcmd("#undef POST_WRITE") 507 pcmd("") 508 pcmd("#endif // SANITIZER_NETBSD") 509 510 close(cmd) 511 512 # Hack for preprocessed code 513 system("sed -i 's,^ \\([^ ]\\), \\1,' " outputinc) 514} 515 516function usage() 517{ 518 print "Usage: " script_name " syscalls.master" 519 abnormal_exit = 1 520 exit 1 521} 522 523function pcmd(string) 524{ 525 print string | cmd 526} 527 528function syscall_body(syscall, mode) 529{ 530 # Hardcode sanitizing rules here 531 # These syscalls don't change often so they are hand coded 532 if (syscall == "syscall") { 533 pcmd("/* Nothing to do */") 534 } else if (syscall == "exit") { 535 pcmd("/* Nothing to do */") 536 } else if (syscall == "fork") { 537 if (mode == "pre") { 538 pcmd("COMMON_SYSCALL_PRE_FORK();") 539 } else { 540 pcmd("COMMON_SYSCALL_POST_FORK(res);") 541 } 542 } else if (syscall == "read") { 543 if (mode == "pre") { 544 pcmd("if (buf_) {") 545 pcmd(" PRE_WRITE(buf_, nbyte_);") 546 pcmd("}") 547 } else { 548 pcmd("if (res > 0) {") 549 pcmd(" POST_WRITE(buf_, res);") 550 pcmd("}") 551 } 552 } else if (syscall == "write") { 553 if (mode == "pre") { 554 pcmd("if (buf_) {") 555 pcmd(" PRE_READ(buf_, nbyte_);") 556 pcmd("}") 557 } else { 558 pcmd("if (res > 0) {") 559 pcmd(" POST_READ(buf_, res);") 560 pcmd("}") 561 } 562 } else if (syscall == "open") { 563 if (mode == "pre") { 564 pcmd("const char *path = (const char *)path_;") 565 pcmd("if (path) {") 566 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 567 pcmd("}") 568 } else { 569 pcmd("if (res > 0) {") 570 pcmd(" const char *path = (const char *)path_;") 571 pcmd(" if (path) {") 572 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 573 pcmd(" }") 574 pcmd("}") 575 } 576 } else if (syscall == "close") { 577 if (mode == "pre") { 578 pcmd("COMMON_SYSCALL_FD_CLOSE((int)fd_);") 579 } else { 580 pcmd("/* Nothing to do */") 581 } 582 } else if (syscall == "compat_50_wait4") { 583 pcmd("/* TODO */") 584 } else if (syscall == "compat_43_ocreat") { 585 pcmd("/* TODO */") 586 } else if (syscall == "link") { 587 if (mode == "pre") { 588 pcmd("const char *path = (const char *)path_;") 589 pcmd("const char *link = (const char *)link_;") 590 pcmd("if (path) {") 591 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 592 pcmd("}") 593 pcmd("if (link) {") 594 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(link) + 1);") 595 pcmd("}") 596 } else { 597 pcmd("if (res == 0) {") 598 pcmd(" const char *path = (const char *)path_;") 599 pcmd(" const char *link = (const char *)link_;") 600 pcmd(" if (path) {") 601 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 602 pcmd(" }") 603 pcmd(" if (link) {") 604 pcmd(" POST_READ(path, __sanitizer::internal_strlen(link) + 1);") 605 pcmd(" }") 606 pcmd("}") 607 } 608 } else if (syscall == "unlink") { 609 if (mode == "pre") { 610 pcmd("const char *path = (const char *)path_;") 611 pcmd("if (path) {") 612 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 613 pcmd("}") 614 } else { 615 pcmd("if (res == 0) {") 616 pcmd(" const char *path = (const char *)path_;") 617 pcmd(" if (path) {") 618 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 619 pcmd(" }") 620 pcmd("}") 621 } 622 } else if (syscall == "chdir") { 623 if (mode == "pre") { 624 pcmd("const char *path = (const char *)path_;") 625 pcmd("if (path) {") 626 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 627 pcmd("}") 628 } else { 629 pcmd("if (res == 0) {") 630 pcmd(" const char *path = (const char *)path_;") 631 pcmd(" if (path) {") 632 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 633 pcmd(" }") 634 pcmd("}") 635 } 636 } else if (syscall == "fchdir") { 637 pcmd("/* Nothing to do */") 638 } else if (syscall == "compat_50_mknod") { 639 pcmd("/* TODO */") 640 } else if (syscall == "chmod") { 641 if (mode == "pre") { 642 pcmd("const char *path = (const char *)path_;") 643 pcmd("if (path) {") 644 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 645 pcmd("}") 646 } else { 647 pcmd("if (res == 0) {") 648 pcmd(" const char *path = (const char *)path_;") 649 pcmd(" if (path) {") 650 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 651 pcmd(" }") 652 pcmd("}") 653 } 654 } else if (syscall == "chown") { 655 if (mode == "pre") { 656 pcmd("const char *path = (const char *)path_;") 657 pcmd("if (path) {") 658 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 659 pcmd("}") 660 } else { 661 pcmd("if (res == 0) {") 662 pcmd(" const char *path = (const char *)path_;") 663 pcmd(" if (path) {") 664 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 665 pcmd(" }") 666 pcmd("}") 667 } 668 } else if (syscall == "break") { 669 pcmd("/* Nothing to do */") 670 } else if (syscall == "compat_20_getfsstat") { 671 pcmd("/* TODO */") 672 } else if (syscall == "compat_43_olseek") { 673 pcmd("/* TODO */") 674 } else if (syscall == "getpid") { 675 pcmd("/* Nothing to do */") 676 } else if (syscall == "compat_40_mount") { 677 pcmd("/* TODO */") 678 } else if (syscall == "unmount") { 679 if (mode == "pre") { 680 pcmd("const char *path = (const char *)path_;") 681 pcmd("if (path) {") 682 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 683 pcmd("}") 684 } else { 685 pcmd("if (res == 0) {") 686 pcmd(" const char *path = (const char *)path_;") 687 pcmd(" if (path) {") 688 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 689 pcmd(" }") 690 pcmd("}") 691 } 692 } else if (syscall == "setuid") { 693 pcmd("/* Nothing to do */") 694 } else if (syscall == "getuid") { 695 pcmd("/* Nothing to do */") 696 } else if (syscall == "geteuid") { 697 pcmd("/* Nothing to do */") 698 } else if (syscall == "ptrace") { 699 if (mode == "pre") { 700 pcmd("if (req_ == ptrace_pt_io) {") 701 pcmd(" struct __sanitizer_ptrace_io_desc *addr = (struct __sanitizer_ptrace_io_desc *)addr_;") 702 pcmd(" PRE_READ(addr, struct_ptrace_ptrace_io_desc_struct_sz);") 703 pcmd(" if (addr->piod_op == ptrace_piod_write_d || addr->piod_op == ptrace_piod_write_i) {") 704 pcmd(" PRE_READ(addr->piod_addr, addr->piod_len);") 705 pcmd(" }") 706 pcmd(" if (addr->piod_op == ptrace_piod_read_d || addr->piod_op == ptrace_piod_read_i || addr->piod_op == ptrace_piod_read_auxv) {") 707 pcmd(" PRE_WRITE(addr->piod_addr, addr->piod_len);") 708 pcmd(" }") 709 pcmd("} else if (req_ == ptrace_pt_lwpinfo) {") 710 pcmd(" struct __sanitizer_ptrace_lwpinfo *addr = (struct __sanitizer_ptrace_lwpinfo *)addr_;") 711 pcmd(" PRE_READ(&addr->pl_lwpid, sizeof(__sanitizer_lwpid_t));") 712 pcmd(" PRE_WRITE(addr, struct_ptrace_ptrace_lwpinfo_struct_sz);") 713 pcmd("} else if (req_ == ptrace_pt_set_event_mask) {") 714 pcmd(" PRE_READ(addr_, struct_ptrace_ptrace_event_struct_sz);") 715 pcmd("} else if (req_ == ptrace_pt_get_event_mask) {") 716 pcmd(" PRE_WRITE(addr_, struct_ptrace_ptrace_event_struct_sz);") 717 pcmd("} else if (req_ == ptrace_pt_set_siginfo) {") 718 pcmd(" PRE_READ(addr_, struct_ptrace_ptrace_siginfo_struct_sz);") 719 pcmd("} else if (req_ == ptrace_pt_get_siginfo) {") 720 pcmd(" PRE_WRITE(addr_, struct_ptrace_ptrace_siginfo_struct_sz);") 721 pcmd("} else if (req_ == ptrace_pt_setregs) {") 722 pcmd(" PRE_READ(addr_, struct_ptrace_reg_struct_sz);") 723 pcmd("} else if (req_ == ptrace_pt_getregs) {") 724 pcmd(" PRE_WRITE(addr_, struct_ptrace_reg_struct_sz);") 725 pcmd("} else if (req_ == ptrace_pt_setfpregs) {") 726 pcmd(" PRE_READ(addr_, struct_ptrace_fpreg_struct_sz);") 727 pcmd("} else if (req_ == ptrace_pt_getfpregs) {") 728 pcmd(" PRE_WRITE(addr_, struct_ptrace_fpreg_struct_sz);") 729 pcmd("} else if (req_ == ptrace_pt_setdbregs) {") 730 pcmd(" PRE_READ(addr_, struct_ptrace_dbreg_struct_sz);") 731 pcmd("} else if (req_ == ptrace_pt_getdbregs) {") 732 pcmd(" PRE_WRITE(addr_, struct_ptrace_dbreg_struct_sz);") 733 pcmd("}") 734 } else { 735 pcmd("if (res == 0) {") 736 pcmd(" if (req_ == ptrace_pt_io) {") 737 pcmd(" struct __sanitizer_ptrace_io_desc *addr = (struct __sanitizer_ptrace_io_desc *)addr_;") 738 pcmd(" POST_READ(addr, struct_ptrace_ptrace_io_desc_struct_sz);") 739 pcmd(" if (addr->piod_op == ptrace_piod_write_d || addr->piod_op == ptrace_piod_write_i) {") 740 pcmd(" POST_READ(addr->piod_addr, addr->piod_len);") 741 pcmd(" }") 742 pcmd(" if (addr->piod_op == ptrace_piod_read_d || addr->piod_op == ptrace_piod_read_i || addr->piod_op == ptrace_piod_read_auxv) {") 743 pcmd(" POST_WRITE(addr->piod_addr, addr->piod_len);") 744 pcmd(" }") 745 pcmd(" } else if (req_ == ptrace_pt_lwpinfo) {") 746 pcmd(" struct __sanitizer_ptrace_lwpinfo *addr = (struct __sanitizer_ptrace_lwpinfo *)addr_;") 747 pcmd(" POST_READ(&addr->pl_lwpid, sizeof(__sanitizer_lwpid_t));") 748 pcmd(" POST_WRITE(addr, struct_ptrace_ptrace_lwpinfo_struct_sz);") 749 pcmd(" } else if (req_ == ptrace_pt_set_event_mask) {") 750 pcmd(" POST_READ(addr_, struct_ptrace_ptrace_event_struct_sz);") 751 pcmd(" } else if (req_ == ptrace_pt_get_event_mask) {") 752 pcmd(" POST_WRITE(addr_, struct_ptrace_ptrace_event_struct_sz);") 753 pcmd(" } else if (req_ == ptrace_pt_set_siginfo) {") 754 pcmd(" POST_READ(addr_, struct_ptrace_ptrace_siginfo_struct_sz);") 755 pcmd(" } else if (req_ == ptrace_pt_get_siginfo) {") 756 pcmd(" POST_WRITE(addr_, struct_ptrace_ptrace_siginfo_struct_sz);") 757 pcmd(" } else if (req_ == ptrace_pt_setregs) {") 758 pcmd(" POST_READ(addr_, struct_ptrace_reg_struct_sz);") 759 pcmd(" } else if (req_ == ptrace_pt_getregs) {") 760 pcmd(" POST_WRITE(addr_, struct_ptrace_reg_struct_sz);") 761 pcmd(" } else if (req_ == ptrace_pt_setfpregs) {") 762 pcmd(" POST_READ(addr_, struct_ptrace_fpreg_struct_sz);") 763 pcmd(" } else if (req_ == ptrace_pt_getfpregs) {") 764 pcmd(" POST_WRITE(addr_, struct_ptrace_fpreg_struct_sz);") 765 pcmd(" } else if (req_ == ptrace_pt_setdbregs) {") 766 pcmd(" POST_READ(addr_, struct_ptrace_dbreg_struct_sz);") 767 pcmd(" } else if (req_ == ptrace_pt_getdbregs) {") 768 pcmd(" POST_WRITE(addr_, struct_ptrace_dbreg_struct_sz);") 769 pcmd(" }") 770 pcmd("}") 771 } 772 } else if (syscall == "recvmsg") { 773 if (mode == "pre") { 774 pcmd("PRE_WRITE(msg_, sizeof(__sanitizer_msghdr));") 775 } else { 776 pcmd("if (res > 0) {") 777 pcmd(" POST_WRITE(msg_, sizeof(__sanitizer_msghdr));") 778 pcmd("}") 779 } 780 } else if (syscall == "sendmsg") { 781 if (mode == "pre") { 782 pcmd("PRE_READ(msg_, sizeof(__sanitizer_msghdr));") 783 } else { 784 pcmd("if (res > 0) {") 785 pcmd(" POST_READ(msg_, sizeof(__sanitizer_msghdr));") 786 pcmd("}") 787 } 788 } else if (syscall == "recvfrom") { 789 if (mode == "pre") { 790 pcmd("PRE_WRITE(buf_, len_);") 791 pcmd("PRE_WRITE(from_, struct_sockaddr_sz);") 792 pcmd("PRE_WRITE(fromlenaddr_, sizeof(__sanitizer_socklen_t));") 793 } else { 794 pcmd("if (res >= 0) {") 795 pcmd(" POST_WRITE(buf_, res);") 796 pcmd(" POST_WRITE(from_, struct_sockaddr_sz);") 797 pcmd(" POST_WRITE(fromlenaddr_, sizeof(__sanitizer_socklen_t));") 798 pcmd("}") 799 } 800 } else if (syscall == "accept") { 801 if (mode == "pre") { 802 pcmd("PRE_WRITE(name_, struct_sockaddr_sz);") 803 pcmd("PRE_WRITE(anamelen_, sizeof(__sanitizer_socklen_t));") 804 } else { 805 pcmd("if (res == 0) {") 806 pcmd(" POST_WRITE(name_, struct_sockaddr_sz);") 807 pcmd(" POST_WRITE(anamelen_, sizeof(__sanitizer_socklen_t));") 808 pcmd("}") 809 } 810 } else if (syscall == "getpeername") { 811 if (mode == "pre") { 812 pcmd("PRE_WRITE(asa_, struct_sockaddr_sz);") 813 pcmd("PRE_WRITE(alen_, sizeof(__sanitizer_socklen_t));") 814 } else { 815 pcmd("if (res == 0) {") 816 pcmd(" POST_WRITE(asa_, struct_sockaddr_sz);") 817 pcmd(" POST_WRITE(alen_, sizeof(__sanitizer_socklen_t));") 818 pcmd("}") 819 } 820 } else if (syscall == "getsockname") { 821 if (mode == "pre") { 822 pcmd("PRE_WRITE(asa_, struct_sockaddr_sz);") 823 pcmd("PRE_WRITE(alen_, sizeof(__sanitizer_socklen_t));") 824 } else { 825 pcmd("if (res == 0) {") 826 pcmd(" POST_WRITE(asa_, struct_sockaddr_sz);") 827 pcmd(" POST_WRITE(alen_, sizeof(__sanitizer_socklen_t));") 828 pcmd("}") 829 } 830 } else if (syscall == "access") { 831 if (mode == "pre") { 832 pcmd("const char *path = (const char *)path_;") 833 pcmd("if (path) {") 834 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 835 pcmd("}") 836 } else { 837 pcmd("if (res == 0) {") 838 pcmd(" const char *path = (const char *)path_;") 839 pcmd(" if (path) {") 840 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 841 pcmd(" }") 842 pcmd("}") 843 } 844 } else if (syscall == "chflags") { 845 if (mode == "pre") { 846 pcmd("const char *path = (const char *)path_;") 847 pcmd("if (path) {") 848 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 849 pcmd("}") 850 } else { 851 pcmd("if (res == 0) {") 852 pcmd(" const char *path = (const char *)path_;") 853 pcmd(" if (path) {") 854 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 855 pcmd(" }") 856 pcmd("}") 857 } 858 } else if (syscall == "fchflags") { 859 pcmd("/* Nothing to do */") 860 } else if (syscall == "sync") { 861 pcmd("/* Nothing to do */") 862 } else if (syscall == "kill") { 863 pcmd("/* Nothing to do */") 864 } else if (syscall == "compat_43_stat43") { 865 pcmd("/* TODO */") 866 } else if (syscall == "getppid") { 867 pcmd("/* Nothing to do */") 868 } else if (syscall == "compat_43_lstat43") { 869 pcmd("/* TODO */") 870 } else if (syscall == "dup") { 871 pcmd("/* Nothing to do */") 872 } else if (syscall == "pipe") { 873 pcmd("/* pipe returns two descriptors through two returned values */") 874 } else if (syscall == "getegid") { 875 pcmd("/* Nothing to do */") 876 } else if (syscall == "profil") { 877 if (mode == "pre") { 878 pcmd("if (samples_) {") 879 pcmd(" PRE_WRITE(samples_, size_);") 880 pcmd("}") 881 } else { 882 pcmd("if (res == 0) {") 883 pcmd(" if (samples_) {") 884 pcmd(" POST_WRITE(samples_, size_);") 885 pcmd(" }") 886 pcmd("}") 887 } 888 } else if (syscall == "ktrace") { 889 if (mode == "pre") { 890 pcmd("const char *fname = (const char *)fname_;") 891 pcmd("if (fname) {") 892 pcmd(" PRE_READ(fname, __sanitizer::internal_strlen(fname) + 1);") 893 pcmd("}") 894 } else { 895 pcmd("const char *fname = (const char *)fname_;") 896 pcmd("if (res == 0) {") 897 pcmd(" if (fname) {") 898 pcmd(" POST_READ(fname, __sanitizer::internal_strlen(fname) + 1);") 899 pcmd(" }") 900 pcmd("}") 901 } 902 } else if (syscall == "compat_13_sigaction13") { 903 pcmd("/* TODO */") 904 } else if (syscall == "getgid") { 905 pcmd("/* Nothing to do */") 906 } else if (syscall == "compat_13_sigprocmask13") { 907 pcmd("/* TODO */") 908 } else if (syscall == "__getlogin") { 909 if (mode == "pre") { 910 pcmd("if (namebuf_) {") 911 pcmd(" PRE_WRITE(namebuf_, namelen_);") 912 pcmd("}") 913 } else { 914 pcmd("if (res == 0) {") 915 pcmd(" if (namebuf_) {") 916 pcmd(" POST_WRITE(namebuf_, namelen_);") 917 pcmd(" }") 918 pcmd("}") 919 } 920 } else if (syscall == "__setlogin") { 921 if (mode == "pre") { 922 pcmd("const char *namebuf = (const char *)namebuf_;") 923 pcmd("if (namebuf) {") 924 pcmd(" PRE_READ(namebuf, __sanitizer::internal_strlen(namebuf) + 1);") 925 pcmd("}") 926 } else { 927 pcmd("if (res == 0) {") 928 pcmd(" const char *namebuf = (const char *)namebuf_;") 929 pcmd(" if (namebuf) {") 930 pcmd(" POST_READ(namebuf, __sanitizer::internal_strlen(namebuf) + 1);") 931 pcmd(" }") 932 pcmd("}") 933 } 934 } else if (syscall == "acct") { 935 if (mode == "pre") { 936 pcmd("const char *path = (const char *)path_;") 937 pcmd("if (path) {") 938 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 939 pcmd("}") 940 } else { 941 pcmd("if (res == 0) {") 942 pcmd(" const char *path = (const char *)path_;") 943 pcmd(" if (path) {") 944 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 945 pcmd(" }") 946 pcmd("}") 947 } 948 } else if (syscall == "compat_13_sigpending13") { 949 pcmd("/* TODO */") 950 } else if (syscall == "compat_13_sigaltstack13") { 951 pcmd("/* TODO */") 952 } else if (syscall == "ioctl") { 953 pcmd("/* Nothing to do */") 954 } else if (syscall == "compat_12_oreboot") { 955 pcmd("/* TODO */") 956 } else if (syscall == "revoke") { 957 if (mode == "pre") { 958 pcmd("const char *path = (const char *)path_;") 959 pcmd("if (path) {") 960 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 961 pcmd("}") 962 } else { 963 pcmd("if (res == 0) {") 964 pcmd(" const char *path = (const char *)path_;") 965 pcmd(" if (path) {") 966 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 967 pcmd(" }") 968 pcmd("}") 969 } 970 } else if (syscall == "symlink") { 971 if (mode == "pre") { 972 pcmd("const char *path = (const char *)path_;") 973 pcmd("const char *link = (const char *)link_;") 974 pcmd("if (path) {") 975 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 976 pcmd("}") 977 pcmd("if (link) {") 978 pcmd(" PRE_READ(link, __sanitizer::internal_strlen(link) + 1);") 979 pcmd("}") 980 } else { 981 pcmd("if (res == 0) {") 982 pcmd(" const char *path = (const char *)path_;") 983 pcmd(" const char *link = (const char *)link_;") 984 pcmd(" if (path) {") 985 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 986 pcmd(" }") 987 pcmd(" if (link) {") 988 pcmd(" POST_READ(link, __sanitizer::internal_strlen(link) + 1);") 989 pcmd(" }") 990 pcmd("}") 991 } 992 } else if (syscall == "readlink") { 993 if (mode == "pre") { 994 pcmd("const char *path = (const char *)path_;") 995 pcmd("if (path) {") 996 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 997 pcmd("}") 998 pcmd("if (buf_) {") 999 pcmd(" PRE_WRITE(buf_, count_);") 1000 pcmd("}") 1001 } else { 1002 pcmd("if (res > 0) {") 1003 pcmd(" const char *path = (const char *)path_;") 1004 pcmd(" if (path) {") 1005 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1006 pcmd(" }") 1007 pcmd(" if (buf_) {") 1008 pcmd(" PRE_WRITE(buf_, res);") 1009 pcmd(" }") 1010 pcmd("}") 1011 } 1012 } else if (syscall == "execve") { 1013 if (mode == "pre") { 1014 pcmd("const char *path = (const char *)path_;") 1015 pcmd("char **argp = (char **)argp_;") 1016 pcmd("char **envp = (char **)envp_;") 1017 pcmd("if (path) {") 1018 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1019 pcmd("}") 1020 pcmd("if (argp && argp[0]) {") 1021 pcmd(" char *a = argp[0];") 1022 pcmd(" while (a++) {") 1023 pcmd(" PRE_READ(a, __sanitizer::internal_strlen(a) + 1);") 1024 pcmd(" }") 1025 pcmd("}") 1026 pcmd("if (envp && envp[0]) {") 1027 pcmd(" char *e = envp[0];") 1028 pcmd(" while (e++) {") 1029 pcmd(" PRE_READ(e, __sanitizer::internal_strlen(e) + 1);") 1030 pcmd(" }") 1031 pcmd("}") 1032 } else { 1033 pcmd("/* If we are here, something went wrong */") 1034 pcmd("const char *path = (const char *)path_;") 1035 pcmd("char **argp = (char **)argp_;") 1036 pcmd("char **envp = (char **)envp_;") 1037 pcmd("if (path) {") 1038 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1039 pcmd("}") 1040 pcmd("if (argp && argp[0]) {") 1041 pcmd(" char *a = argp[0];") 1042 pcmd(" while (a++) {") 1043 pcmd(" POST_READ(a, __sanitizer::internal_strlen(a) + 1);") 1044 pcmd(" }") 1045 pcmd("}") 1046 pcmd("if (envp && envp[0]) {") 1047 pcmd(" char *e = envp[0];") 1048 pcmd(" while (e++) {") 1049 pcmd(" POST_READ(e, __sanitizer::internal_strlen(e) + 1);") 1050 pcmd(" }") 1051 pcmd("}") 1052 } 1053 } else if (syscall == "umask") { 1054 pcmd("/* Nothing to do */") 1055 } else if (syscall == "chroot") { 1056 if (mode == "pre") { 1057 pcmd("const char *path = (const char *)path_;") 1058 pcmd("if (path) {") 1059 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1060 pcmd("}") 1061 } else { 1062 pcmd("if (res == 0) {") 1063 pcmd(" const char *path = (const char *)path_;") 1064 pcmd(" if (path) {") 1065 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1066 pcmd(" }") 1067 pcmd("}") 1068 } 1069 } else if (syscall == "compat_43_fstat43") { 1070 pcmd("/* TODO */") 1071 } else if (syscall == "compat_43_ogetkerninfo") { 1072 pcmd("/* TODO */") 1073 } else if (syscall == "compat_43_ogetpagesize") { 1074 pcmd("/* TODO */") 1075 } else if (syscall == "compat_12_msync") { 1076 pcmd("/* TODO */") 1077 } else if (syscall == "vfork") { 1078 pcmd("/* Nothing to do */") 1079 } else if (syscall == "compat_43_ommap") { 1080 pcmd("/* TODO */") 1081 } else if (syscall == "vadvise") { 1082 pcmd("/* Nothing to do */") 1083 } else if (syscall == "munmap") { 1084 pcmd("/* Nothing to do */") 1085 } else if (syscall == "mprotect") { 1086 pcmd("/* Nothing to do */") 1087 } else if (syscall == "madvise") { 1088 pcmd("/* Nothing to do */") 1089 } else if (syscall == "mincore") { 1090 pcmd("/* Nothing to do */") 1091 } else if (syscall == "getgroups") { 1092 if (mode == "pre") { 1093 pcmd("unsigned int *gidset = (unsigned int *)gidset_;") 1094 pcmd("if (gidset) {") 1095 pcmd(" PRE_WRITE(gidset, sizeof(*gidset) * gidsetsize_);") 1096 pcmd("}") 1097 } else { 1098 pcmd("if (res == 0) {") 1099 pcmd(" unsigned int *gidset = (unsigned int *)gidset_;") 1100 pcmd(" if (gidset) {") 1101 pcmd(" POST_WRITE(gidset, sizeof(*gidset) * gidsetsize_);") 1102 pcmd(" }") 1103 pcmd("}") 1104 } 1105 } else if (syscall == "setgroups") { 1106 if (mode == "pre") { 1107 pcmd("unsigned int *gidset = (unsigned int *)gidset_;") 1108 pcmd("if (gidset) {") 1109 pcmd(" PRE_READ(gidset, sizeof(*gidset) * gidsetsize_);") 1110 pcmd("}") 1111 } else { 1112 pcmd("if (res == 0) {") 1113 pcmd(" unsigned int *gidset = (unsigned int *)gidset_;") 1114 pcmd(" if (gidset) {") 1115 pcmd(" POST_READ(gidset, sizeof(*gidset) * gidsetsize_);") 1116 pcmd(" }") 1117 pcmd("}") 1118 } 1119 } else if (syscall == "getpgrp") { 1120 pcmd("/* Nothing to do */") 1121 } else if (syscall == "setpgid") { 1122 pcmd("/* Nothing to do */") 1123 } else if (syscall == "compat_50_setitimer") { 1124 pcmd("/* TODO */") 1125 } else if (syscall == "compat_43_owait") { 1126 pcmd("/* TODO */") 1127 } else if (syscall == "compat_12_oswapon") { 1128 pcmd("/* TODO */") 1129 } else if (syscall == "compat_50_getitimer") { 1130 pcmd("/* TODO */") 1131 } else if (syscall == "compat_43_ogethostname") { 1132 pcmd("/* TODO */") 1133 } else if (syscall == "compat_43_osethostname") { 1134 pcmd("/* TODO */") 1135 } else if (syscall == "compat_43_ogetdtablesize") { 1136 pcmd("/* TODO */") 1137 } else if (syscall == "dup2") { 1138 pcmd("/* Nothing to do */") 1139 } else if (syscall == "fcntl") { 1140 pcmd("/* Nothing to do */") 1141 } else if (syscall == "compat_50_select") { 1142 pcmd("/* TODO */") 1143 } else if (syscall == "fsync") { 1144 pcmd("/* Nothing to do */") 1145 } else if (syscall == "setpriority") { 1146 pcmd("/* Nothing to do */") 1147 } else if (syscall == "compat_30_socket") { 1148 pcmd("/* TODO */") 1149 } else if (syscall == "connect") { 1150 if (mode == "pre") { 1151 pcmd("PRE_READ(name_, namelen_);") 1152 } else { 1153 pcmd("if (res == 0) {") 1154 pcmd(" POST_READ(name_, namelen_);") 1155 pcmd("}") 1156 } 1157 } else if (syscall == "compat_43_oaccept") { 1158 pcmd("/* TODO */") 1159 } else if (syscall == "getpriority") { 1160 pcmd("/* Nothing to do */") 1161 } else if (syscall == "compat_43_osend") { 1162 pcmd("/* TODO */") 1163 } else if (syscall == "compat_43_orecv") { 1164 pcmd("/* TODO */") 1165 } else if (syscall == "compat_13_sigreturn13") { 1166 pcmd("/* TODO */") 1167 } else if (syscall == "bind") { 1168 if (mode == "pre") { 1169 pcmd("PRE_READ(name_, namelen_);") 1170 } else { 1171 pcmd("if (res == 0) {") 1172 pcmd(" PRE_READ(name_, namelen_);") 1173 pcmd("}") 1174 } 1175 } else if (syscall == "setsockopt") { 1176 if (mode == "pre") { 1177 pcmd("if (val_) {") 1178 pcmd(" PRE_READ(val_, valsize_);") 1179 pcmd("}") 1180 } else { 1181 pcmd("if (res == 0) {") 1182 pcmd(" if (val_) {") 1183 pcmd(" POST_READ(val_, valsize_);") 1184 pcmd(" }") 1185 pcmd("}") 1186 } 1187 } else if (syscall == "listen") { 1188 pcmd("/* Nothing to do */") 1189 } else if (syscall == "compat_43_osigvec") { 1190 pcmd("/* TODO */") 1191 } else if (syscall == "compat_43_osigblock") { 1192 pcmd("/* TODO */") 1193 } else if (syscall == "compat_43_osigsetmask") { 1194 pcmd("/* TODO */") 1195 } else if (syscall == "compat_13_sigsuspend13") { 1196 pcmd("/* TODO */") 1197 } else if (syscall == "compat_43_osigstack") { 1198 pcmd("/* TODO */") 1199 } else if (syscall == "compat_43_orecvmsg") { 1200 pcmd("/* TODO */") 1201 } else if (syscall == "compat_43_osendmsg") { 1202 pcmd("/* TODO */") 1203 } else if (syscall == "compat_50_gettimeofday") { 1204 pcmd("/* TODO */") 1205 } else if (syscall == "compat_50_getrusage") { 1206 pcmd("/* TODO */") 1207 } else if (syscall == "getsockopt") { 1208 pcmd("/* TODO */") 1209 } else if (syscall == "readv") { 1210 if (mode == "pre") { 1211 pcmd("struct __sanitizer_iovec *iovp = (struct __sanitizer_iovec *)iovp_;") 1212 pcmd("int i;") 1213 pcmd("if (iovp) {") 1214 pcmd(" PRE_READ(iovp, sizeof(struct __sanitizer_iovec) * iovcnt_);") 1215 pcmd(" for (i = 0; i < iovcnt_; i++) {") 1216 pcmd(" PRE_WRITE(iovp[i].iov_base, iovp[i].iov_len);") 1217 pcmd(" }") 1218 pcmd("}") 1219 } else { 1220 pcmd("struct __sanitizer_iovec *iovp = (struct __sanitizer_iovec *)iovp_;") 1221 pcmd("int i;") 1222 pcmd("uptr m, n = res;") 1223 pcmd("if (res > 0) {") 1224 pcmd(" if (iovp) {") 1225 pcmd(" POST_READ(iovp, sizeof(struct __sanitizer_iovec) * iovcnt_);") 1226 pcmd(" for (i = 0; i < iovcnt_ && n > 0; i++) {") 1227 pcmd(" m = n > iovp[i].iov_len ? iovp[i].iov_len : n;") 1228 pcmd(" POST_WRITE(iovp[i].iov_base, m);") 1229 pcmd(" n -= m;") 1230 pcmd(" }") 1231 pcmd(" }") 1232 pcmd("}") 1233 } 1234 } else if (syscall == "writev") { 1235 if (mode == "pre") { 1236 pcmd("struct __sanitizer_iovec *iovp = (struct __sanitizer_iovec *)iovp_;") 1237 pcmd("int i;") 1238 pcmd("if (iovp) {") 1239 pcmd(" PRE_READ(iovp, sizeof(struct __sanitizer_iovec) * iovcnt_);") 1240 pcmd(" for (i = 0; i < iovcnt_; i++) {") 1241 pcmd(" PRE_READ(iovp[i].iov_base, iovp[i].iov_len);") 1242 pcmd(" }") 1243 pcmd("}") 1244 } else { 1245 pcmd("struct __sanitizer_iovec *iovp = (struct __sanitizer_iovec *)iovp_;") 1246 pcmd("int i;") 1247 pcmd("uptr m, n = res;") 1248 pcmd("if (res > 0) {") 1249 pcmd(" if (iovp) {") 1250 pcmd(" POST_READ(iovp, sizeof(struct __sanitizer_iovec) * iovcnt_);") 1251 pcmd(" for (i = 0; i < iovcnt_ && n > 0; i++) {") 1252 pcmd(" m = n > iovp[i].iov_len ? iovp[i].iov_len : n;") 1253 pcmd(" POST_READ(iovp[i].iov_base, m);") 1254 pcmd(" n -= m;") 1255 pcmd(" }") 1256 pcmd(" }") 1257 pcmd("}") 1258 } 1259 } else if (syscall == "compat_50_settimeofday") { 1260 pcmd("/* TODO */") 1261 } else if (syscall == "fchown") { 1262 pcmd("/* Nothing to do */") 1263 } else if (syscall == "fchmod") { 1264 pcmd("/* Nothing to do */") 1265 } else if (syscall == "compat_43_orecvfrom") { 1266 pcmd("/* TODO */") 1267 } else if (syscall == "setreuid") { 1268 pcmd("/* Nothing to do */") 1269 } else if (syscall == "setregid") { 1270 pcmd("/* Nothing to do */") 1271 } else if (syscall == "rename") { 1272 if (mode == "pre") { 1273 pcmd("const char *from = (const char *)from_;") 1274 pcmd("const char *to = (const char *)to_;") 1275 pcmd("if (from) {") 1276 pcmd(" PRE_READ(from, __sanitizer::internal_strlen(from) + 1);") 1277 pcmd("}") 1278 pcmd("if (to) {") 1279 pcmd(" PRE_READ(to, __sanitizer::internal_strlen(to) + 1);") 1280 pcmd("}") 1281 } else { 1282 pcmd("if (res == 0) {") 1283 pcmd(" const char *from = (const char *)from_;") 1284 pcmd(" const char *to = (const char *)to_;") 1285 pcmd(" if (from) {") 1286 pcmd(" POST_READ(from, __sanitizer::internal_strlen(from) + 1);") 1287 pcmd(" }") 1288 pcmd(" if (to) {") 1289 pcmd(" POST_READ(to, __sanitizer::internal_strlen(to) + 1);") 1290 pcmd(" }") 1291 pcmd("}") 1292 } 1293 } else if (syscall == "compat_43_otruncate") { 1294 pcmd("/* TODO */") 1295 } else if (syscall == "compat_43_oftruncate") { 1296 pcmd("/* TODO */") 1297 } else if (syscall == "flock") { 1298 pcmd("/* Nothing to do */") 1299 } else if (syscall == "mkfifo") { 1300 if (mode == "pre") { 1301 pcmd("const char *path = (const char *)path_;") 1302 pcmd("if (path) {") 1303 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1304 pcmd("}") 1305 } else { 1306 pcmd("if (res == 0) {") 1307 pcmd(" const char *path = (const char *)path_;") 1308 pcmd(" if (path) {") 1309 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1310 pcmd(" }") 1311 pcmd("}") 1312 } 1313 } else if (syscall == "sendto") { 1314 if (mode == "pre") { 1315 pcmd("PRE_READ(buf_, len_);") 1316 pcmd("PRE_READ(to_, tolen_);") 1317 } else { 1318 pcmd("if (res >= 0) {") 1319 pcmd(" POST_READ(buf_, len_);") 1320 pcmd(" POST_READ(to_, tolen_);") 1321 pcmd("}") 1322 } 1323 } else if (syscall == "shutdown") { 1324 pcmd("/* Nothing to do */") 1325 } else if (syscall == "socketpair") { 1326 if (mode == "pre") { 1327 pcmd("PRE_WRITE(rsv_, 2 * sizeof(int));") 1328 } else { 1329 pcmd("if (res == 0) {") 1330 pcmd(" POST_WRITE(rsv_, 2 * sizeof(int));") 1331 pcmd("}") 1332 } 1333 } else if (syscall == "mkdir") { 1334 if (mode == "pre") { 1335 pcmd("const char *path = (const char *)path_;") 1336 pcmd("if (path) {") 1337 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1338 pcmd("}") 1339 } else { 1340 pcmd("if (res == 0) {") 1341 pcmd(" const char *path = (const char *)path_;") 1342 pcmd(" if (path) {") 1343 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1344 pcmd(" }") 1345 pcmd("}") 1346 } 1347 } else if (syscall == "rmdir") { 1348 if (mode == "pre") { 1349 pcmd("const char *path = (const char *)path_;") 1350 pcmd("if (path) {") 1351 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1352 pcmd("}") 1353 } else { 1354 pcmd("if (res == 0) {") 1355 pcmd(" const char *path = (const char *)path_;") 1356 pcmd(" if (path) {") 1357 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1358 pcmd(" }") 1359 pcmd("}") 1360 } 1361 } else if (syscall == "compat_50_utimes") { 1362 pcmd("/* TODO */") 1363 } else if (syscall == "compat_50_adjtime") { 1364 pcmd("/* TODO */") 1365 } else if (syscall == "compat_43_ogetpeername") { 1366 pcmd("/* TODO */") 1367 } else if (syscall == "compat_43_ogethostid") { 1368 pcmd("/* TODO */") 1369 } else if (syscall == "compat_43_osethostid") { 1370 pcmd("/* TODO */") 1371 } else if (syscall == "compat_43_ogetrlimit") { 1372 pcmd("/* TODO */") 1373 } else if (syscall == "compat_43_osetrlimit") { 1374 pcmd("/* TODO */") 1375 } else if (syscall == "compat_43_okillpg") { 1376 pcmd("/* TODO */") 1377 } else if (syscall == "setsid") { 1378 pcmd("/* Nothing to do */") 1379 } else if (syscall == "compat_50_quotactl") { 1380 pcmd("/* TODO */") 1381 } else if (syscall == "compat_43_oquota") { 1382 pcmd("/* TODO */") 1383 } else if (syscall == "compat_43_ogetsockname") { 1384 pcmd("/* TODO */") 1385 } else if (syscall == "nfssvc") { 1386 pcmd("/* Nothing to do */") 1387 } else if (syscall == "compat_43_ogetdirentries") { 1388 pcmd("/* TODO */") 1389 } else if (syscall == "compat_20_statfs") { 1390 pcmd("/* TODO */") 1391 } else if (syscall == "compat_20_fstatfs") { 1392 pcmd("/* TODO */") 1393 } else if (syscall == "compat_30_getfh") { 1394 pcmd("/* TODO */") 1395 } else if (syscall == "compat_09_ogetdomainname") { 1396 pcmd("/* TODO */") 1397 } else if (syscall == "compat_09_osetdomainname") { 1398 pcmd("/* TODO */") 1399 } else if (syscall == "compat_09_ouname") { 1400 pcmd("/* TODO */") 1401 } else if (syscall == "sysarch") { 1402 pcmd("/* TODO */") 1403 } else if (syscall == "compat_10_osemsys") { 1404 pcmd("/* TODO */") 1405 } else if (syscall == "compat_10_omsgsys") { 1406 pcmd("/* TODO */") 1407 } else if (syscall == "compat_10_oshmsys") { 1408 pcmd("/* TODO */") 1409 } else if (syscall == "pread") { 1410 if (mode == "pre") { 1411 pcmd("if (buf_) {") 1412 pcmd(" PRE_WRITE(buf_, nbyte_);") 1413 pcmd("}") 1414 } else { 1415 pcmd("if (res > 0) {") 1416 pcmd(" POST_WRITE(buf_, res);") 1417 pcmd("}") 1418 } 1419 } else if (syscall == "pwrite") { 1420 if (mode == "pre") { 1421 pcmd("if (buf_) {") 1422 pcmd(" PRE_READ(buf_, nbyte_);") 1423 pcmd("}") 1424 } else { 1425 pcmd("if (res > 0) {") 1426 pcmd(" POST_READ(buf_, res);") 1427 pcmd("}") 1428 } 1429 } else if (syscall == "compat_30_ntp_gettime") { 1430 pcmd("/* TODO */") 1431 } else if (syscall == "ntp_adjtime") { 1432 pcmd("/* Nothing to do */") 1433 } else if (syscall == "setgid") { 1434 pcmd("/* Nothing to do */") 1435 } else if (syscall == "setegid") { 1436 pcmd("/* Nothing to do */") 1437 } else if (syscall == "seteuid") { 1438 pcmd("/* Nothing to do */") 1439 } else if (syscall == "lfs_bmapv") { 1440 pcmd("/* TODO */") 1441 } else if (syscall == "lfs_markv") { 1442 pcmd("/* TODO */") 1443 } else if (syscall == "lfs_segclean") { 1444 pcmd("/* TODO */") 1445 } else if (syscall == "compat_50_lfs_segwait") { 1446 pcmd("/* TODO */") 1447 } else if (syscall == "compat_12_stat12") { 1448 pcmd("/* TODO */") 1449 } else if (syscall == "compat_12_fstat12") { 1450 pcmd("/* TODO */") 1451 } else if (syscall == "compat_12_lstat12") { 1452 pcmd("/* TODO */") 1453 } else if (syscall == "pathconf") { 1454 if (mode == "pre") { 1455 pcmd("const char *path = (const char *)path_;") 1456 pcmd("if (path) {") 1457 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1458 pcmd("}") 1459 } else { 1460 pcmd("if (res != -1) {") 1461 pcmd(" const char *path = (const char *)path_;") 1462 pcmd(" if (path) {") 1463 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1464 pcmd(" }") 1465 pcmd("}") 1466 } 1467 } else if (syscall == "getsockopt2") { 1468 pcmd("/* TODO */") 1469 } else if (syscall == "fpathconf") { 1470 pcmd("/* Nothing to do */") 1471 } else if (syscall == "getrlimit") { 1472 if (mode == "pre") { 1473 pcmd("PRE_WRITE(rlp_, struct_rlimit_sz);") 1474 } else { 1475 pcmd("if (res == 0) {") 1476 pcmd(" POST_WRITE(rlp_, struct_rlimit_sz);") 1477 pcmd("}") 1478 } 1479 } else if (syscall == "setrlimit") { 1480 if (mode == "pre") { 1481 pcmd("PRE_READ(rlp_, struct_rlimit_sz);") 1482 } else { 1483 pcmd("if (res == 0) {") 1484 pcmd(" POST_READ(rlp_, struct_rlimit_sz);") 1485 pcmd("}") 1486 } 1487 } else if (syscall == "compat_12_getdirentries") { 1488 pcmd("/* TODO */") 1489 } else if (syscall == "mmap") { 1490 pcmd("/* Nothing to do */") 1491 } else if (syscall == "__syscall") { 1492 pcmd("/* Nothing to do */") 1493 } else if (syscall == "lseek") { 1494 pcmd("/* Nothing to do */") 1495 } else if (syscall == "truncate") { 1496 if (mode == "pre") { 1497 pcmd("const char *path = (const char *)path_;") 1498 pcmd("if (path) {") 1499 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1500 pcmd("}") 1501 } else { 1502 pcmd("if (res == 0) {") 1503 pcmd(" const char *path = (const char *)path_;") 1504 pcmd(" if (path) {") 1505 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1506 pcmd(" }") 1507 pcmd("}") 1508 } 1509 } else if (syscall == "ftruncate") { 1510 pcmd("/* Nothing to do */") 1511 } else if (syscall == "__sysctl") { 1512 if (mode == "pre") { 1513 pcmd("const int *name = (const int *)name_;") 1514 pcmd("if (name) {") 1515 pcmd(" PRE_READ(name, namelen_ * sizeof(*name));") 1516 pcmd("}") 1517 pcmd("if (newv_) {") 1518 pcmd(" PRE_READ(name, newlen_);") 1519 pcmd("}") 1520 } else { 1521 pcmd("if (res == 0) {") 1522 pcmd(" const int *name = (const int *)name_;") 1523 pcmd(" if (name) {") 1524 pcmd(" POST_READ(name, namelen_ * sizeof(*name));") 1525 pcmd(" }") 1526 pcmd(" if (newv_) {") 1527 pcmd(" POST_READ(name, newlen_);") 1528 pcmd(" }") 1529 pcmd("}") 1530 } 1531 } else if (syscall == "mlock") { 1532 pcmd("/* Nothing to do */") 1533 } else if (syscall == "munlock") { 1534 pcmd("/* Nothing to do */") 1535 } else if (syscall == "undelete") { 1536 if (mode == "pre") { 1537 pcmd("const char *path = (const char *)path_;") 1538 pcmd("if (path) {") 1539 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1540 pcmd("}") 1541 } else { 1542 pcmd("if (res == 0) {") 1543 pcmd(" const char *path = (const char *)path_;") 1544 pcmd(" if (path) {") 1545 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1546 pcmd(" }") 1547 pcmd("}") 1548 } 1549 } else if (syscall == "compat_50_futimes") { 1550 pcmd("/* TODO */") 1551 } else if (syscall == "getpgid") { 1552 pcmd("/* Nothing to do */") 1553 } else if (syscall == "reboot") { 1554 if (mode == "pre") { 1555 pcmd("const char *bootstr = (const char *)bootstr_;") 1556 pcmd("if (bootstr) {") 1557 pcmd(" PRE_READ(bootstr, __sanitizer::internal_strlen(bootstr) + 1);") 1558 pcmd("}") 1559 } else { 1560 pcmd("/* This call should never return */") 1561 pcmd("const char *bootstr = (const char *)bootstr_;") 1562 pcmd("if (bootstr) {") 1563 pcmd(" POST_READ(bootstr, __sanitizer::internal_strlen(bootstr) + 1);") 1564 pcmd("}") 1565 } 1566 } else if (syscall == "poll") { 1567 pcmd("/* Nothing to do */") 1568 } else if (syscall == "afssys") { 1569 pcmd("/* TODO */") 1570 } else if (syscall == "compat_14___semctl") { 1571 pcmd("/* TODO */") 1572 } else if (syscall == "semget") { 1573 pcmd("/* Nothing to do */") 1574 } else if (syscall == "semop") { 1575 if (mode == "pre") { 1576 pcmd("if (sops_) {") 1577 pcmd(" PRE_READ(sops_, nsops_ * struct_sembuf_sz);") 1578 pcmd("}") 1579 } else { 1580 pcmd("if (res == 0) {") 1581 pcmd(" if (sops_) {") 1582 pcmd(" POST_READ(sops_, nsops_ * struct_sembuf_sz);") 1583 pcmd(" }") 1584 pcmd("}") 1585 } 1586 } else if (syscall == "semconfig") { 1587 pcmd("/* Nothing to do */") 1588 } else if (syscall == "compat_14_msgctl") { 1589 pcmd("/* TODO */") 1590 } else if (syscall == "msgget") { 1591 pcmd("/* Nothing to do */") 1592 } else if (syscall == "msgsnd") { 1593 if (mode == "pre") { 1594 pcmd("if (msgp_) {") 1595 pcmd(" PRE_READ(msgp_, msgsz_);") 1596 pcmd("}") 1597 } else { 1598 pcmd("if (res == 0) {") 1599 pcmd(" if (msgp_) {") 1600 pcmd(" POST_READ(msgp_, msgsz_);") 1601 pcmd(" }") 1602 pcmd("}") 1603 } 1604 } else if (syscall == "msgrcv") { 1605 pcmd("/* Nothing to do */") 1606 } else if (syscall == "shmat") { 1607 pcmd("/* Nothing to do */") 1608 } else if (syscall == "compat_14_shmctl") { 1609 pcmd("/* TODO */") 1610 } else if (syscall == "shmdt") { 1611 pcmd("/* Nothing to do */") 1612 } else if (syscall == "shmget") { 1613 pcmd("/* Nothing to do */") 1614 } else if (syscall == "compat_50_clock_gettime") { 1615 pcmd("/* TODO */") 1616 } else if (syscall == "compat_50_clock_settime") { 1617 pcmd("/* TODO */") 1618 } else if (syscall == "compat_50_clock_getres") { 1619 pcmd("/* TODO */") 1620 } else if (syscall == "timer_create") { 1621 pcmd("/* Nothing to do */") 1622 } else if (syscall == "timer_delete") { 1623 pcmd("/* Nothing to do */") 1624 } else if (syscall == "compat_50_timer_settime") { 1625 pcmd("/* TODO */") 1626 } else if (syscall == "compat_50_timer_gettime") { 1627 pcmd("/* TODO */") 1628 } else if (syscall == "timer_getoverrun") { 1629 pcmd("/* Nothing to do */") 1630 } else if (syscall == "compat_50_nanosleep") { 1631 pcmd("/* TODO */") 1632 } else if (syscall == "fdatasync") { 1633 pcmd("/* Nothing to do */") 1634 } else if (syscall == "mlockall") { 1635 pcmd("/* Nothing to do */") 1636 } else if (syscall == "munlockall") { 1637 pcmd("/* Nothing to do */") 1638 } else if (syscall == "compat_50___sigtimedwait") { 1639 pcmd("/* TODO */") 1640 } else if (syscall == "sigqueueinfo") { 1641 if (mode == "pre") { 1642 pcmd("if (info_) {") 1643 pcmd(" PRE_READ(info_, siginfo_t_sz);") 1644 pcmd("}") 1645 } 1646 } else if (syscall == "modctl") { 1647 pcmd("/* TODO */") 1648 } else if (syscall == "_ksem_init") { 1649 pcmd("/* Nothing to do */") 1650 } else if (syscall == "_ksem_open") { 1651 if (mode == "pre") { 1652 pcmd("const char *name = (const char *)name_;") 1653 pcmd("if (name) {") 1654 pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);") 1655 pcmd("}") 1656 } else { 1657 pcmd("const char *name = (const char *)name_;") 1658 pcmd("if (name) {") 1659 pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);") 1660 pcmd("}") 1661 } 1662 } else if (syscall == "_ksem_unlink") { 1663 if (mode == "pre") { 1664 pcmd("const char *name = (const char *)name_;") 1665 pcmd("if (name) {") 1666 pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);") 1667 pcmd("}") 1668 } else { 1669 pcmd("const char *name = (const char *)name_;") 1670 pcmd("if (name) {") 1671 pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);") 1672 pcmd("}") 1673 } 1674 } else if (syscall == "_ksem_close") { 1675 pcmd("/* Nothing to do */") 1676 } else if (syscall == "_ksem_post") { 1677 pcmd("/* Nothing to do */") 1678 } else if (syscall == "_ksem_wait") { 1679 pcmd("/* Nothing to do */") 1680 } else if (syscall == "_ksem_trywait") { 1681 pcmd("/* Nothing to do */") 1682 } else if (syscall == "_ksem_getvalue") { 1683 pcmd("/* Nothing to do */") 1684 } else if (syscall == "_ksem_destroy") { 1685 pcmd("/* Nothing to do */") 1686 } else if (syscall == "_ksem_timedwait") { 1687 if (mode == "pre") { 1688 pcmd("if (abstime_) {") 1689 pcmd(" PRE_READ(abstime_, struct_timespec_sz);") 1690 pcmd("}") 1691 } 1692 } else if (syscall == "mq_open") { 1693 if (mode == "pre") { 1694 pcmd("const char *name = (const char *)name_;") 1695 pcmd("if (name) {") 1696 pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);") 1697 pcmd("}") 1698 } else { 1699 pcmd("const char *name = (const char *)name_;") 1700 pcmd("if (name) {") 1701 pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);") 1702 pcmd("}") 1703 } 1704 } else if (syscall == "mq_close") { 1705 pcmd("/* Nothing to do */") 1706 } else if (syscall == "mq_unlink") { 1707 if (mode == "pre") { 1708 pcmd("const char *name = (const char *)name_;") 1709 pcmd("if (name) {") 1710 pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);") 1711 pcmd("}") 1712 } else { 1713 pcmd("const char *name = (const char *)name_;") 1714 pcmd("if (name) {") 1715 pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);") 1716 pcmd("}") 1717 } 1718 } else if (syscall == "mq_getattr") { 1719 pcmd("/* Nothing to do */") 1720 } else if (syscall == "mq_setattr") { 1721 if (mode == "pre") { 1722 pcmd("if (mqstat_) {") 1723 pcmd(" PRE_READ(mqstat_, struct_mq_attr_sz);") 1724 pcmd("}") 1725 } 1726 } else if (syscall == "mq_notify") { 1727 if (mode == "pre") { 1728 pcmd("if (notification_) {") 1729 pcmd(" PRE_READ(notification_, struct_sigevent_sz);") 1730 pcmd("}") 1731 } 1732 } else if (syscall == "mq_send") { 1733 if (mode == "pre") { 1734 pcmd("if (msg_ptr_) {") 1735 pcmd(" PRE_READ(msg_ptr_, msg_len_);") 1736 pcmd("}") 1737 } 1738 } else if (syscall == "mq_receive") { 1739 pcmd("/* Nothing to do */") 1740 } else if (syscall == "compat_50_mq_timedsend") { 1741 pcmd("/* TODO */") 1742 } else if (syscall == "compat_50_mq_timedreceive") { 1743 pcmd("/* TODO */") 1744 } else if (syscall == "__posix_rename") { 1745 if (mode == "pre") { 1746 pcmd("const char *from = (const char *)from_;") 1747 pcmd("const char *to = (const char *)to_;") 1748 pcmd("if (from_) {") 1749 pcmd(" PRE_READ(from, __sanitizer::internal_strlen(from) + 1);") 1750 pcmd("}") 1751 pcmd("if (to) {") 1752 pcmd(" PRE_READ(to, __sanitizer::internal_strlen(to) + 1);") 1753 pcmd("}") 1754 } else { 1755 pcmd("const char *from = (const char *)from_;") 1756 pcmd("const char *to = (const char *)to_;") 1757 pcmd("if (from) {") 1758 pcmd(" POST_READ(from, __sanitizer::internal_strlen(from) + 1);") 1759 pcmd("}") 1760 pcmd("if (to) {") 1761 pcmd(" POST_READ(to, __sanitizer::internal_strlen(to) + 1);") 1762 pcmd("}") 1763 } 1764 } else if (syscall == "swapctl") { 1765 pcmd("/* TODO */") 1766 } else if (syscall == "compat_30_getdents") { 1767 pcmd("/* TODO */") 1768 } else if (syscall == "minherit") { 1769 pcmd("/* Nothing to do */") 1770 } else if (syscall == "lchmod") { 1771 if (mode == "pre") { 1772 pcmd("const char *path = (const char *)path_;") 1773 pcmd("if (path) {") 1774 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1775 pcmd("}") 1776 } else { 1777 pcmd("const char *path = (const char *)path_;") 1778 pcmd("if (path) {") 1779 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1780 pcmd("}") 1781 } 1782 } else if (syscall == "lchown") { 1783 if (mode == "pre") { 1784 pcmd("const char *path = (const char *)path_;") 1785 pcmd("if (path) {") 1786 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1787 pcmd("}") 1788 } else { 1789 pcmd("const char *path = (const char *)path_;") 1790 pcmd("if (path) {") 1791 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1792 pcmd("}") 1793 } 1794 } else if (syscall == "compat_50_lutimes") { 1795 pcmd("/* TODO */") 1796 } else if (syscall == "__msync13") { 1797 pcmd("/* Nothing to do */") 1798 } else if (syscall == "compat_30___stat13") { 1799 pcmd("/* TODO */") 1800 } else if (syscall == "compat_30___fstat13") { 1801 pcmd("/* TODO */") 1802 } else if (syscall == "compat_30___lstat13") { 1803 pcmd("/* TODO */") 1804 } else if (syscall == "__sigaltstack14") { 1805 if (mode == "pre") { 1806 pcmd("if (nss_) {") 1807 pcmd(" PRE_READ(nss_, struct_sigaltstack_sz);") 1808 pcmd("}") 1809 pcmd("if (oss_) {") 1810 pcmd(" PRE_READ(oss_, struct_sigaltstack_sz);") 1811 pcmd("}") 1812 } 1813 } else if (syscall == "__vfork14") { 1814 pcmd("/* Nothing to do */") 1815 } else if (syscall == "__posix_chown") { 1816 if (mode == "pre") { 1817 pcmd("const char *path = (const char *)path_;") 1818 pcmd("if (path) {") 1819 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1820 pcmd("}") 1821 } else { 1822 pcmd("const char *path = (const char *)path_;") 1823 pcmd("if (path) {") 1824 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1825 pcmd("}") 1826 } 1827 } else if (syscall == "__posix_fchown") { 1828 pcmd("/* Nothing to do */") 1829 } else if (syscall == "__posix_lchown") { 1830 if (mode == "pre") { 1831 pcmd("const char *path = (const char *)path_;") 1832 pcmd("if (path) {") 1833 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1834 pcmd("}") 1835 } else { 1836 pcmd("const char *path = (const char *)path_;") 1837 pcmd("if (path) {") 1838 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1839 pcmd("}") 1840 } 1841 } else if (syscall == "getsid") { 1842 pcmd("/* Nothing to do */") 1843 } else if (syscall == "__clone") { 1844 pcmd("/* Nothing to do */") 1845 } else if (syscall == "fktrace") { 1846 pcmd("/* Nothing to do */") 1847 } else if (syscall == "preadv") { 1848 pcmd("/* Nothing to do */") 1849 } else if (syscall == "pwritev") { 1850 pcmd("/* Nothing to do */") 1851 } else if (syscall == "compat_16___sigaction14") { 1852 pcmd("/* TODO */") 1853 } else if (syscall == "__sigpending14") { 1854 pcmd("/* Nothing to do */") 1855 } else if (syscall == "__sigprocmask14") { 1856 pcmd("/* Nothing to do */") 1857 } else if (syscall == "__sigsuspend14") { 1858 pcmd("if (set_) {") 1859 pcmd(" PRE_READ(set_, sizeof(__sanitizer_sigset_t));") 1860 pcmd("}") 1861 } else if (syscall == "compat_16___sigreturn14") { 1862 pcmd("/* TODO */") 1863 } else if (syscall == "__getcwd") { 1864 pcmd("/* Nothing to do */") 1865 } else if (syscall == "fchroot") { 1866 pcmd("/* Nothing to do */") 1867 } else if (syscall == "compat_30_fhopen") { 1868 pcmd("/* TODO */") 1869 } else if (syscall == "compat_30_fhstat") { 1870 pcmd("/* TODO */") 1871 } else if (syscall == "compat_20_fhstatfs") { 1872 pcmd("/* TODO */") 1873 } else if (syscall == "compat_50_____semctl13") { 1874 pcmd("/* TODO */") 1875 } else if (syscall == "compat_50___msgctl13") { 1876 pcmd("/* TODO */") 1877 } else if (syscall == "compat_50___shmctl13") { 1878 pcmd("/* TODO */") 1879 } else if (syscall == "lchflags") { 1880 if (mode == "pre") { 1881 pcmd("const char *path = (const char *)path_;") 1882 pcmd("if (path) {") 1883 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 1884 pcmd("}") 1885 } else { 1886 pcmd("const char *path = (const char *)path_;") 1887 pcmd("if (path) {") 1888 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 1889 pcmd("}") 1890 } 1891 } else if (syscall == "issetugid") { 1892 pcmd("/* Nothing to do */") 1893 } else if (syscall == "utrace") { 1894 if (mode == "pre") { 1895 pcmd("const char *label = (const char *)label_;") 1896 pcmd("if (label) {") 1897 pcmd(" PRE_READ(label, __sanitizer::internal_strlen(label) + 1);") 1898 pcmd("}") 1899 pcmd("if (addr_) {") 1900 pcmd(" PRE_READ(addr_, len_);") 1901 pcmd("}") 1902 } else { 1903 pcmd("const char *label = (const char *)label_;") 1904 pcmd("if (label) {") 1905 pcmd(" POST_READ(label, __sanitizer::internal_strlen(label) + 1);") 1906 pcmd("}") 1907 pcmd("if (addr_) {") 1908 pcmd(" POST_READ(addr_, len_);") 1909 pcmd("}") 1910 } 1911 } else if (syscall == "getcontext") { 1912 pcmd("/* Nothing to do */") 1913 } else if (syscall == "setcontext") { 1914 if (mode == "pre") { 1915 pcmd("if (ucp_) {") 1916 pcmd(" PRE_READ(ucp_, ucontext_t_sz);") 1917 pcmd("}") 1918 } 1919 } else if (syscall == "_lwp_create") { 1920 if (mode == "pre") { 1921 pcmd("if (ucp_) {") 1922 pcmd(" PRE_READ(ucp_, ucontext_t_sz);") 1923 pcmd("}") 1924 } 1925 } else if (syscall == "_lwp_exit") { 1926 pcmd("/* Nothing to do */") 1927 } else if (syscall == "_lwp_self") { 1928 pcmd("/* Nothing to do */") 1929 } else if (syscall == "_lwp_wait") { 1930 pcmd("/* Nothing to do */") 1931 } else if (syscall == "_lwp_suspend") { 1932 pcmd("/* Nothing to do */") 1933 } else if (syscall == "_lwp_continue") { 1934 pcmd("/* Nothing to do */") 1935 } else if (syscall == "_lwp_wakeup") { 1936 pcmd("/* Nothing to do */") 1937 } else if (syscall == "_lwp_getprivate") { 1938 pcmd("/* Nothing to do */") 1939 } else if (syscall == "_lwp_setprivate") { 1940 pcmd("/* Nothing to do */") 1941 } else if (syscall == "_lwp_kill") { 1942 pcmd("/* Nothing to do */") 1943 } else if (syscall == "_lwp_detach") { 1944 pcmd("/* Nothing to do */") 1945 } else if (syscall == "compat_50__lwp_park") { 1946 pcmd("/* TODO */") 1947 } else if (syscall == "_lwp_unpark") { 1948 pcmd("/* Nothing to do */") 1949 } else if (syscall == "_lwp_unpark_all") { 1950 if (mode == "pre") { 1951 pcmd("if (targets_) {") 1952 pcmd(" PRE_READ(targets_, ntargets_ * sizeof(__sanitizer_lwpid_t));") 1953 pcmd("}") 1954 } 1955 } else if (syscall == "_lwp_setname") { 1956 if (mode == "pre") { 1957 pcmd("const char *name = (const char *)name_;") 1958 pcmd("if (name) {") 1959 pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);") 1960 pcmd("}") 1961 } else { 1962 pcmd("const char *name = (const char *)name_;") 1963 pcmd("if (name) {") 1964 pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);") 1965 pcmd("}") 1966 } 1967 } else if (syscall == "_lwp_getname") { 1968 pcmd("/* Nothing to do */") 1969 } else if (syscall == "_lwp_ctl") { 1970 pcmd("/* Nothing to do */") 1971 } else if (syscall == "compat_60_sa_register") { 1972 pcmd("/* TODO */") 1973 } else if (syscall == "compat_60_sa_stacks") { 1974 pcmd("/* TODO */") 1975 } else if (syscall == "compat_60_sa_enable") { 1976 pcmd("/* TODO */") 1977 } else if (syscall == "compat_60_sa_setconcurrency") { 1978 pcmd("/* TODO */") 1979 } else if (syscall == "compat_60_sa_yield") { 1980 pcmd("/* TODO */") 1981 } else if (syscall == "compat_60_sa_preempt") { 1982 pcmd("/* TODO */") 1983 } else if (syscall == "__sigaction_sigtramp") { 1984 pcmd("if (nsa_) {") 1985 pcmd(" PRE_READ(nsa_, sizeof(__sanitizer_sigaction));") 1986 pcmd("}") 1987 } else if (syscall == "rasctl") { 1988 pcmd("/* Nothing to do */") 1989 } else if (syscall == "kqueue") { 1990 pcmd("/* Nothing to do */") 1991 } else if (syscall == "compat_50_kevent") { 1992 pcmd("/* TODO */") 1993 } else if (syscall == "_sched_setparam") { 1994 pcmd("if (params_) {") 1995 pcmd(" PRE_READ(params_, struct_sched_param_sz);") 1996 pcmd("}") 1997 } else if (syscall == "_sched_getparam") { 1998 pcmd("/* Nothing to do */") 1999 } else if (syscall == "_sched_setaffinity") { 2000 pcmd("if (cpuset_) {") 2001 pcmd(" PRE_READ(cpuset_, size_);") 2002 pcmd("}") 2003 } else if (syscall == "_sched_getaffinity") { 2004 pcmd("/* Nothing to do */") 2005 } else if (syscall == "sched_yield") { 2006 pcmd("/* Nothing to do */") 2007 } else if (syscall == "_sched_protect") { 2008 pcmd("/* Nothing to do */") 2009 } else if (syscall == "fsync_range") { 2010 pcmd("/* Nothing to do */") 2011 } else if (syscall == "uuidgen") { 2012 pcmd("/* Nothing to do */") 2013 } else if (syscall == "getvfsstat") { 2014 pcmd("/* Nothing to do */") 2015 } else if (syscall == "statvfs1") { 2016 if (mode == "pre") { 2017 pcmd("const char *path = (const char *)path_;") 2018 pcmd("if (path) {") 2019 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2020 pcmd("}") 2021 } else { 2022 pcmd("const char *path = (const char *)path_;") 2023 pcmd("if (path) {") 2024 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2025 pcmd("}") 2026 } 2027 } else if (syscall == "fstatvfs1") { 2028 pcmd("/* Nothing to do */") 2029 } else if (syscall == "compat_30_fhstatvfs1") { 2030 pcmd("/* TODO */") 2031 } else if (syscall == "extattrctl") { 2032 if (mode == "pre") { 2033 pcmd("const char *path = (const char *)path_;") 2034 pcmd("if (path) {") 2035 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2036 pcmd("}") 2037 } else { 2038 pcmd("const char *path = (const char *)path_;") 2039 pcmd("if (path) {") 2040 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2041 pcmd("}") 2042 } 2043 } else if (syscall == "extattr_set_file") { 2044 if (mode == "pre") { 2045 pcmd("const char *path = (const char *)path_;") 2046 pcmd("if (path) {") 2047 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2048 pcmd("}") 2049 } else { 2050 pcmd("const char *path = (const char *)path_;") 2051 pcmd("if (path) {") 2052 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2053 pcmd("}") 2054 } 2055 } else if (syscall == "extattr_get_file") { 2056 if (mode == "pre") { 2057 pcmd("const char *path = (const char *)path_;") 2058 pcmd("if (path) {") 2059 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2060 pcmd("}") 2061 } else { 2062 pcmd("const char *path = (const char *)path_;") 2063 pcmd("if (path) {") 2064 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2065 pcmd("}") 2066 } 2067 } else if (syscall == "extattr_delete_file") { 2068 if (mode == "pre") { 2069 pcmd("const char *path = (const char *)path_;") 2070 pcmd("if (path) {") 2071 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2072 pcmd("}") 2073 } else { 2074 pcmd("const char *path = (const char *)path_;") 2075 pcmd("if (path) {") 2076 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2077 pcmd("}") 2078 } 2079 } else if (syscall == "extattr_set_fd") { 2080 pcmd("/* TODO */") 2081 } else if (syscall == "extattr_get_fd") { 2082 pcmd("/* TODO */") 2083 } else if (syscall == "extattr_delete_fd") { 2084 pcmd("/* TODO */") 2085 } else if (syscall == "extattr_set_link") { 2086 if (mode == "pre") { 2087 pcmd("const char *path = (const char *)path_;") 2088 pcmd("if (path) {") 2089 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2090 pcmd("}") 2091 } else { 2092 pcmd("const char *path = (const char *)path_;") 2093 pcmd("if (path) {") 2094 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2095 pcmd("}") 2096 } 2097 } else if (syscall == "extattr_get_link") { 2098 if (mode == "pre") { 2099 pcmd("const char *path = (const char *)path_;") 2100 pcmd("if (path) {") 2101 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2102 pcmd("}") 2103 } else { 2104 pcmd("const char *path = (const char *)path_;") 2105 pcmd("if (path) {") 2106 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2107 pcmd("}") 2108 } 2109 } else if (syscall == "extattr_delete_link") { 2110 if (mode == "pre") { 2111 pcmd("const char *path = (const char *)path_;") 2112 pcmd("if (path) {") 2113 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2114 pcmd("}") 2115 } else { 2116 pcmd("const char *path = (const char *)path_;") 2117 pcmd("if (path) {") 2118 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2119 pcmd("}") 2120 } 2121 } else if (syscall == "extattr_list_fd") { 2122 pcmd("/* TODO */") 2123 } else if (syscall == "extattr_list_file") { 2124 if (mode == "pre") { 2125 pcmd("const char *path = (const char *)path_;") 2126 pcmd("if (path) {") 2127 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2128 pcmd("}") 2129 } else { 2130 pcmd("const char *path = (const char *)path_;") 2131 pcmd("if (path) {") 2132 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2133 pcmd("}") 2134 } 2135 } else if (syscall == "extattr_list_link") { 2136 if (mode == "pre") { 2137 pcmd("const char *path = (const char *)path_;") 2138 pcmd("if (path) {") 2139 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2140 pcmd("}") 2141 } else { 2142 pcmd("const char *path = (const char *)path_;") 2143 pcmd("if (path) {") 2144 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2145 pcmd("}") 2146 } 2147 } else if (syscall == "compat_50_pselect") { 2148 pcmd("/* TODO */") 2149 } else if (syscall == "compat_50_pollts") { 2150 pcmd("/* TODO */") 2151 } else if (syscall == "setxattr") { 2152 if (mode == "pre") { 2153 pcmd("const char *path = (const char *)path_;") 2154 pcmd("if (path) {") 2155 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2156 pcmd("}") 2157 } else { 2158 pcmd("const char *path = (const char *)path_;") 2159 pcmd("if (path) {") 2160 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2161 pcmd("}") 2162 } 2163 } else if (syscall == "lsetxattr") { 2164 if (mode == "pre") { 2165 pcmd("const char *path = (const char *)path_;") 2166 pcmd("if (path) {") 2167 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2168 pcmd("}") 2169 } else { 2170 pcmd("const char *path = (const char *)path_;") 2171 pcmd("if (path) {") 2172 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2173 pcmd("}") 2174 } 2175 } else if (syscall == "fsetxattr") { 2176 pcmd("/* Nothing to do */") 2177 } else if (syscall == "getxattr") { 2178 if (mode == "pre") { 2179 pcmd("const char *path = (const char *)path_;") 2180 pcmd("if (path) {") 2181 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2182 pcmd("}") 2183 } else { 2184 pcmd("const char *path = (const char *)path_;") 2185 pcmd("if (path) {") 2186 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2187 pcmd("}") 2188 } 2189 } else if (syscall == "lgetxattr") { 2190 if (mode == "pre") { 2191 pcmd("const char *path = (const char *)path_;") 2192 pcmd("if (path) {") 2193 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2194 pcmd("}") 2195 } else { 2196 pcmd("const char *path = (const char *)path_;") 2197 pcmd("if (path) {") 2198 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2199 pcmd("}") 2200 } 2201 } else if (syscall == "fgetxattr") { 2202 pcmd("/* Nothing to do */") 2203 } else if (syscall == "listxattr") { 2204 if (mode == "pre") { 2205 pcmd("const char *path = (const char *)path_;") 2206 pcmd("if (path) {") 2207 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2208 pcmd("}") 2209 } else { 2210 pcmd("const char *path = (const char *)path_;") 2211 pcmd("if (path) {") 2212 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2213 pcmd("}") 2214 } 2215 } else if (syscall == "llistxattr") { 2216 if (mode == "pre") { 2217 pcmd("const char *path = (const char *)path_;") 2218 pcmd("if (path) {") 2219 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2220 pcmd("}") 2221 } else { 2222 pcmd("const char *path = (const char *)path_;") 2223 pcmd("if (path) {") 2224 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2225 pcmd("}") 2226 } 2227 } else if (syscall == "flistxattr") { 2228 pcmd("/* TODO */") 2229 } else if (syscall == "removexattr") { 2230 if (mode == "pre") { 2231 pcmd("const char *path = (const char *)path_;") 2232 pcmd("if (path) {") 2233 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2234 pcmd("}") 2235 } else { 2236 pcmd("const char *path = (const char *)path_;") 2237 pcmd("if (path) {") 2238 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2239 pcmd("}") 2240 } 2241 } else if (syscall == "lremovexattr") { 2242 if (mode == "pre") { 2243 pcmd("const char *path = (const char *)path_;") 2244 pcmd("if (path) {") 2245 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2246 pcmd("}") 2247 } else { 2248 pcmd("const char *path = (const char *)path_;") 2249 pcmd("if (path) {") 2250 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2251 pcmd("}") 2252 } 2253 } else if (syscall == "fremovexattr") { 2254 pcmd("/* TODO */") 2255 } else if (syscall == "compat_50___stat30") { 2256 pcmd("/* TODO */") 2257 } else if (syscall == "compat_50___fstat30") { 2258 pcmd("/* TODO */") 2259 } else if (syscall == "compat_50___lstat30") { 2260 pcmd("/* TODO */") 2261 } else if (syscall == "__getdents30") { 2262 pcmd("/* Nothing to do */") 2263 } else if (syscall == "posix_fadvise") { 2264 pcmd("/* Nothing to do */") 2265 } else if (syscall == "compat_30___fhstat30") { 2266 pcmd("/* TODO */") 2267 } else if (syscall == "compat_50___ntp_gettime30") { 2268 pcmd("/* TODO */") 2269 } else if (syscall == "__socket30") { 2270 pcmd("/* Nothing to do */") 2271 } else if (syscall == "__getfh30") { 2272 if (mode == "pre") { 2273 pcmd("const char *fname = (const char *)fname_;") 2274 pcmd("if (fname) {") 2275 pcmd(" PRE_READ(fname, __sanitizer::internal_strlen(fname) + 1);") 2276 pcmd("}") 2277 } else { 2278 pcmd("const char *fname = (const char *)fname_;") 2279 pcmd("if (res == 0) {") 2280 pcmd(" if (fname) {") 2281 pcmd(" POST_READ(fname, __sanitizer::internal_strlen(fname) + 1);") 2282 pcmd(" }") 2283 pcmd("}") 2284 } 2285 } else if (syscall == "__fhopen40") { 2286 if (mode == "pre") { 2287 pcmd("if (fhp_) {") 2288 pcmd(" PRE_READ(fhp_, fh_size_);") 2289 pcmd("}") 2290 } 2291 } else if (syscall == "__fhstatvfs140") { 2292 if (mode == "pre") { 2293 pcmd("if (fhp_) {") 2294 pcmd(" PRE_READ(fhp_, fh_size_);") 2295 pcmd("}") 2296 } 2297 } else if (syscall == "compat_50___fhstat40") { 2298 if (mode == "pre") { 2299 pcmd("if (fhp_) {") 2300 pcmd(" PRE_READ(fhp_, fh_size_);") 2301 pcmd("}") 2302 } 2303 } else if (syscall == "aio_cancel") { 2304 if (mode == "pre") { 2305 pcmd("if (aiocbp_) {") 2306 pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));") 2307 pcmd("}") 2308 } 2309 } else if (syscall == "aio_error") { 2310 if (mode == "pre") { 2311 pcmd("if (aiocbp_) {") 2312 pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));") 2313 pcmd("}") 2314 } 2315 } else if (syscall == "aio_fsync") { 2316 if (mode == "pre") { 2317 pcmd("if (aiocbp_) {") 2318 pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));") 2319 pcmd("}") 2320 } 2321 } else if (syscall == "aio_read") { 2322 if (mode == "pre") { 2323 pcmd("if (aiocbp_) {") 2324 pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));") 2325 pcmd("}") 2326 } 2327 } else if (syscall == "aio_return") { 2328 if (mode == "pre") { 2329 pcmd("if (aiocbp_) {") 2330 pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));") 2331 pcmd("}") 2332 } 2333 } else if (syscall == "compat_50_aio_suspend") { 2334 pcmd("/* TODO */") 2335 } else if (syscall == "aio_write") { 2336 if (mode == "pre") { 2337 pcmd("if (aiocbp_) {") 2338 pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));") 2339 pcmd("}") 2340 } 2341 } else if (syscall == "lio_listio") { 2342 pcmd("/* Nothing to do */") 2343 } else if (syscall == "__mount50") { 2344 if (mode == "pre") { 2345 pcmd("const char *type = (const char *)type_;") 2346 pcmd("const char *path = (const char *)path_;") 2347 pcmd("if (type) {") 2348 pcmd(" PRE_READ(type, __sanitizer::internal_strlen(type) + 1);") 2349 pcmd("}") 2350 pcmd("if (path) {") 2351 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2352 pcmd("}") 2353 pcmd("if (data_) {") 2354 pcmd(" PRE_READ(data_, data_len_);") 2355 pcmd("}") 2356 } else { 2357 pcmd("const char *type = (const char *)type_;") 2358 pcmd("const char *path = (const char *)path_;") 2359 pcmd("if (type) {") 2360 pcmd(" POST_READ(type, __sanitizer::internal_strlen(type) + 1);") 2361 pcmd("}") 2362 pcmd("if (path) {") 2363 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2364 pcmd("}") 2365 pcmd("if (data_) {") 2366 pcmd(" POST_READ(data_, data_len_);") 2367 pcmd("}") 2368 } 2369 } else if (syscall == "mremap") { 2370 pcmd("/* Nothing to do */") 2371 } else if (syscall == "pset_create") { 2372 pcmd("/* Nothing to do */") 2373 } else if (syscall == "pset_destroy") { 2374 pcmd("/* Nothing to do */") 2375 } else if (syscall == "pset_assign") { 2376 pcmd("/* Nothing to do */") 2377 } else if (syscall == "_pset_bind") { 2378 pcmd("/* Nothing to do */") 2379 } else if (syscall == "__posix_fadvise50") { 2380 pcmd("/* Nothing to do */") 2381 } else if (syscall == "__select50") { 2382 pcmd("/* Nothing to do */") 2383 } else if (syscall == "__gettimeofday50") { 2384 pcmd("/* Nothing to do */") 2385 } else if (syscall == "__settimeofday50") { 2386 if (mode == "pre") { 2387 pcmd("if (tv_) {") 2388 pcmd(" PRE_READ(tv_, timeval_sz);") 2389 pcmd("}") 2390 pcmd("if (tzp_) {") 2391 pcmd(" PRE_READ(tzp_, struct_timezone_sz);") 2392 pcmd("}") 2393 } 2394 } else if (syscall == "__utimes50") { 2395 if (mode == "pre") { 2396 pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;") 2397 pcmd("const char *path = (const char *)path_;") 2398 pcmd("if (path) {") 2399 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2400 pcmd("}") 2401 pcmd("if (tptr) {") 2402 pcmd(" PRE_READ(tptr[0], struct_timespec_sz);") 2403 pcmd(" PRE_READ(tptr[1], struct_timespec_sz);") 2404 pcmd("}") 2405 } 2406 } else if (syscall == "__adjtime50") { 2407 if (mode == "pre") { 2408 pcmd("if (delta_) {") 2409 pcmd(" PRE_READ(delta_, timeval_sz);") 2410 pcmd("}") 2411 } 2412 } else if (syscall == "__lfs_segwait50") { 2413 pcmd("/* TODO */") 2414 } else if (syscall == "__futimes50") { 2415 if (mode == "pre") { 2416 pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;") 2417 pcmd("if (tptr) {") 2418 pcmd(" PRE_READ(tptr[0], struct_timespec_sz);") 2419 pcmd(" PRE_READ(tptr[1], struct_timespec_sz);") 2420 pcmd("}") 2421 } 2422 } else if (syscall == "__lutimes50") { 2423 if (mode == "pre") { 2424 pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;") 2425 pcmd("const char *path = (const char *)path_;") 2426 pcmd("if (path) {") 2427 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2428 pcmd("}") 2429 pcmd("if (tptr) {") 2430 pcmd(" PRE_READ(tptr[0], struct_timespec_sz);") 2431 pcmd(" PRE_READ(tptr[1], struct_timespec_sz);") 2432 pcmd("}") 2433 } else { 2434 pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;") 2435 pcmd("const char *path = (const char *)path_;") 2436 pcmd("if (path) {") 2437 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2438 pcmd("}") 2439 pcmd("if (tptr) {") 2440 pcmd(" POST_READ(tptr[0], struct_timespec_sz);") 2441 pcmd(" POST_READ(tptr[1], struct_timespec_sz);") 2442 pcmd("}") 2443 } 2444 } else if (syscall == "__setitimer50") { 2445 if (mode == "pre") { 2446 pcmd("struct __sanitizer_itimerval *itv = (struct __sanitizer_itimerval *)itv_;") 2447 pcmd("if (itv) {") 2448 pcmd(" PRE_READ(&itv->it_interval.tv_sec, sizeof(__sanitizer_time_t));") 2449 pcmd(" PRE_READ(&itv->it_interval.tv_usec, sizeof(__sanitizer_suseconds_t));") 2450 pcmd(" PRE_READ(&itv->it_value.tv_sec, sizeof(__sanitizer_time_t));") 2451 pcmd(" PRE_READ(&itv->it_value.tv_usec, sizeof(__sanitizer_suseconds_t));") 2452 pcmd("}") 2453 } 2454 } else if (syscall == "__getitimer50") { 2455 pcmd("/* Nothing to do */") 2456 } else if (syscall == "__clock_gettime50") { 2457 pcmd("/* Nothing to do */") 2458 } else if (syscall == "__clock_settime50") { 2459 if (mode == "pre") { 2460 pcmd("if (tp_) {") 2461 pcmd(" PRE_READ(tp_, struct_timespec_sz);") 2462 pcmd("}") 2463 } 2464 } else if (syscall == "__clock_getres50") { 2465 pcmd("/* Nothing to do */") 2466 } else if (syscall == "__nanosleep50") { 2467 if (mode == "pre") { 2468 pcmd("if (rqtp_) {") 2469 pcmd(" PRE_READ(rqtp_, struct_timespec_sz);") 2470 pcmd("}") 2471 } 2472 } else if (syscall == "____sigtimedwait50") { 2473 if (mode == "pre") { 2474 pcmd("if (set_) {") 2475 pcmd(" PRE_READ(set_, sizeof(__sanitizer_sigset_t));") 2476 pcmd("}") 2477 pcmd("if (timeout_) {") 2478 pcmd(" PRE_READ(timeout_, struct_timespec_sz);") 2479 pcmd("}") 2480 } 2481 } else if (syscall == "__mq_timedsend50") { 2482 if (mode == "pre") { 2483 pcmd("if (msg_ptr_) {") 2484 pcmd(" PRE_READ(msg_ptr_, msg_len_);") 2485 pcmd("}") 2486 pcmd("if (abs_timeout_) {") 2487 pcmd(" PRE_READ(abs_timeout_, struct_timespec_sz);") 2488 pcmd("}") 2489 } 2490 } else if (syscall == "__mq_timedreceive50") { 2491 if (mode == "pre") { 2492 pcmd("if (msg_ptr_) {") 2493 pcmd(" PRE_READ(msg_ptr_, msg_len_);") 2494 pcmd("}") 2495 pcmd("if (abs_timeout_) {") 2496 pcmd(" PRE_READ(abs_timeout_, struct_timespec_sz);") 2497 pcmd("}") 2498 } 2499 } else if (syscall == "compat_60__lwp_park") { 2500 pcmd("/* TODO */") 2501 } else if (syscall == "__kevent50") { 2502 if (mode == "pre") { 2503 pcmd("if (changelist_) {") 2504 pcmd(" PRE_READ(changelist_, nchanges_ * struct_kevent_sz);") 2505 pcmd("}") 2506 pcmd("if (timeout_) {") 2507 pcmd(" PRE_READ(timeout_, struct_timespec_sz);") 2508 pcmd("}") 2509 } 2510 } else if (syscall == "__pselect50") { 2511 if (mode == "pre") { 2512 pcmd("if (ts_) {") 2513 pcmd(" PRE_READ(ts_, struct_timespec_sz);") 2514 pcmd("}") 2515 pcmd("if (mask_) {") 2516 pcmd(" PRE_READ(mask_, sizeof(struct __sanitizer_sigset_t));") 2517 pcmd("}") 2518 } 2519 } else if (syscall == "__pollts50") { 2520 if (mode == "pre") { 2521 pcmd("if (ts_) {") 2522 pcmd(" PRE_READ(ts_, struct_timespec_sz);") 2523 pcmd("}") 2524 pcmd("if (mask_) {") 2525 pcmd(" PRE_READ(mask_, sizeof(struct __sanitizer_sigset_t));") 2526 pcmd("}") 2527 } 2528 } else if (syscall == "__aio_suspend50") { 2529 if (mode == "pre") { 2530 pcmd("int i;") 2531 pcmd("const struct aiocb * const *list = (const struct aiocb * const *)list_;") 2532 pcmd("if (list) {") 2533 pcmd(" for (i = 0; i < nent_; i++) {") 2534 pcmd(" if (list[i]) {") 2535 pcmd(" PRE_READ(list[i], sizeof(struct __sanitizer_aiocb));") 2536 pcmd(" }") 2537 pcmd(" }") 2538 pcmd("}") 2539 pcmd("if (timeout_) {") 2540 pcmd(" PRE_READ(timeout_, struct_timespec_sz);") 2541 pcmd("}") 2542 } 2543 } else if (syscall == "__stat50") { 2544 if (mode == "pre") { 2545 pcmd("const char *path = (const char *)path_;") 2546 pcmd("if (path) {") 2547 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2548 pcmd("}") 2549 } else { 2550 pcmd("const char *path = (const char *)path_;") 2551 pcmd("if (res == 0) {") 2552 pcmd(" if (path) {") 2553 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2554 pcmd(" }") 2555 pcmd("}") 2556 } 2557 } else if (syscall == "__fstat50") { 2558 pcmd("/* Nothing to do */") 2559 } else if (syscall == "__lstat50") { 2560 if (mode == "pre") { 2561 pcmd("const char *path = (const char *)path_;") 2562 pcmd("if (path) {") 2563 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2564 pcmd("}") 2565 } else { 2566 pcmd("const char *path = (const char *)path_;") 2567 pcmd("if (res == 0) {") 2568 pcmd(" if (path) {") 2569 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2570 pcmd(" }") 2571 pcmd("}") 2572 } 2573 } else if (syscall == "____semctl50") { 2574 pcmd("/* Nothing to do */") 2575 } else if (syscall == "__shmctl50") { 2576 pcmd("/* Nothing to do */") 2577 } else if (syscall == "__msgctl50") { 2578 pcmd("/* Nothing to do */") 2579 } else if (syscall == "__getrusage50") { 2580 pcmd("/* Nothing to do */") 2581 } else if (syscall == "__timer_settime50") { 2582 if (mode == "pre") { 2583 pcmd("struct __sanitizer_itimerval *value = (struct __sanitizer_itimerval *)value_;") 2584 pcmd("if (value) {") 2585 pcmd(" PRE_READ(&value->it_interval.tv_sec, sizeof(__sanitizer_time_t));") 2586 pcmd(" PRE_READ(&value->it_interval.tv_usec, sizeof(__sanitizer_suseconds_t));") 2587 pcmd(" PRE_READ(&value->it_value.tv_sec, sizeof(__sanitizer_time_t));") 2588 pcmd(" PRE_READ(&value->it_value.tv_usec, sizeof(__sanitizer_suseconds_t));") 2589 pcmd("}") 2590 } else { 2591 pcmd("struct __sanitizer_itimerval *value = (struct __sanitizer_itimerval *)value_;") 2592 pcmd("if (res == 0) {") 2593 pcmd(" if (value) {") 2594 pcmd(" POST_READ(&value->it_interval.tv_sec, sizeof(__sanitizer_time_t));") 2595 pcmd(" POST_READ(&value->it_interval.tv_usec, sizeof(__sanitizer_suseconds_t));") 2596 pcmd(" POST_READ(&value->it_value.tv_sec, sizeof(__sanitizer_time_t));") 2597 pcmd(" POST_READ(&value->it_value.tv_usec, sizeof(__sanitizer_suseconds_t));") 2598 pcmd(" }") 2599 pcmd("}") 2600 } 2601 } else if (syscall == "__timer_gettime50") { 2602 pcmd("/* Nothing to do */") 2603 } else if (syscall == "__ntp_gettime50") { 2604 pcmd("/* Nothing to do */") 2605 } else if (syscall == "__wait450") { 2606 pcmd("/* Nothing to do */") 2607 } else if (syscall == "__mknod50") { 2608 if (mode == "pre") { 2609 pcmd("const char *path = (const char *)path_;") 2610 pcmd("if (path) {") 2611 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2612 pcmd("}") 2613 } else { 2614 pcmd("const char *path = (const char *)path_;") 2615 pcmd("if (res == 0) {") 2616 pcmd(" if (path) {") 2617 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2618 pcmd(" }") 2619 pcmd("}") 2620 } 2621 } else if (syscall == "__fhstat50") { 2622 if (mode == "pre") { 2623 pcmd("if (fhp_) {") 2624 pcmd(" PRE_READ(fhp_, fh_size_);") 2625 pcmd("}") 2626 } else { 2627 pcmd("if (res == 0) {") 2628 pcmd(" if (fhp_) {") 2629 pcmd(" POST_READ(fhp_, fh_size_);") 2630 pcmd(" }") 2631 pcmd("}") 2632 } 2633 } else if (syscall == "pipe2") { 2634 pcmd("/* Nothing to do */") 2635 } else if (syscall == "dup3") { 2636 pcmd("/* Nothing to do */") 2637 } else if (syscall == "kqueue1") { 2638 pcmd("/* Nothing to do */") 2639 } else if (syscall == "paccept") { 2640 if (mode == "pre") { 2641 pcmd("if (mask_) {") 2642 pcmd(" PRE_READ(mask_, sizeof(__sanitizer_sigset_t));") 2643 pcmd("}") 2644 } else { 2645 pcmd("if (res >= 0) {") 2646 pcmd(" if (mask_) {") 2647 pcmd(" PRE_READ(mask_, sizeof(__sanitizer_sigset_t));") 2648 pcmd(" }") 2649 pcmd("}") 2650 } 2651 } else if (syscall == "linkat") { 2652 if (mode == "pre") { 2653 pcmd("const char *name1 = (const char *)name1_;") 2654 pcmd("const char *name2 = (const char *)name2_;") 2655 pcmd("if (name1) {") 2656 pcmd(" PRE_READ(name1, __sanitizer::internal_strlen(name1) + 1);") 2657 pcmd("}") 2658 pcmd("if (name2) {") 2659 pcmd(" PRE_READ(name2, __sanitizer::internal_strlen(name2) + 1);") 2660 pcmd("}") 2661 } else { 2662 pcmd("const char *name1 = (const char *)name1_;") 2663 pcmd("const char *name2 = (const char *)name2_;") 2664 pcmd("if (res == 0) {") 2665 pcmd(" if (name1) {") 2666 pcmd(" POST_READ(name1, __sanitizer::internal_strlen(name1) + 1);") 2667 pcmd(" }") 2668 pcmd(" if (name2) {") 2669 pcmd(" POST_READ(name2, __sanitizer::internal_strlen(name2) + 1);") 2670 pcmd(" }") 2671 pcmd("}") 2672 } 2673 } else if (syscall == "renameat") { 2674 if (mode == "pre") { 2675 pcmd("const char *from = (const char *)from_;") 2676 pcmd("const char *to = (const char *)to_;") 2677 pcmd("if (from) {") 2678 pcmd(" PRE_READ(from, __sanitizer::internal_strlen(from) + 1);") 2679 pcmd("}") 2680 pcmd("if (to) {") 2681 pcmd(" PRE_READ(to, __sanitizer::internal_strlen(to) + 1);") 2682 pcmd("}") 2683 } else { 2684 pcmd("const char *from = (const char *)from_;") 2685 pcmd("const char *to = (const char *)to_;") 2686 pcmd("if (res == 0) {") 2687 pcmd(" if (from) {") 2688 pcmd(" POST_READ(from, __sanitizer::internal_strlen(from) + 1);") 2689 pcmd(" }") 2690 pcmd(" if (to) {") 2691 pcmd(" POST_READ(to, __sanitizer::internal_strlen(to) + 1);") 2692 pcmd(" }") 2693 pcmd("}") 2694 } 2695 } else if (syscall == "mkfifoat") { 2696 if (mode == "pre") { 2697 pcmd("const char *path = (const char *)path_;") 2698 pcmd("if (path) {") 2699 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2700 pcmd("}") 2701 } else { 2702 pcmd("const char *path = (const char *)path_;") 2703 pcmd("if (res == 0) {") 2704 pcmd(" if (path) {") 2705 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2706 pcmd(" }") 2707 pcmd("}") 2708 } 2709 } else if (syscall == "mknodat") { 2710 if (mode == "pre") { 2711 pcmd("const char *path = (const char *)path_;") 2712 pcmd("if (path) {") 2713 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2714 pcmd("}") 2715 } else { 2716 pcmd("const char *path = (const char *)path_;") 2717 pcmd("if (res == 0) {") 2718 pcmd(" if (path) {") 2719 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2720 pcmd(" }") 2721 pcmd("}") 2722 } 2723 } else if (syscall == "mkdirat") { 2724 if (mode == "pre") { 2725 pcmd("const char *path = (const char *)path_;") 2726 pcmd("if (path) {") 2727 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2728 pcmd("}") 2729 } else { 2730 pcmd("const char *path = (const char *)path_;") 2731 pcmd("if (res == 0) {") 2732 pcmd(" if (path) {") 2733 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2734 pcmd(" }") 2735 pcmd("}") 2736 } 2737 } else if (syscall == "faccessat") { 2738 if (mode == "pre") { 2739 pcmd("const char *path = (const char *)path_;") 2740 pcmd("if (path) {") 2741 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2742 pcmd("}") 2743 } else { 2744 pcmd("const char *path = (const char *)path_;") 2745 pcmd("if (res == 0) {") 2746 pcmd(" if (path) {") 2747 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2748 pcmd(" }") 2749 pcmd("}") 2750 } 2751 } else if (syscall == "fchmodat") { 2752 if (mode == "pre") { 2753 pcmd("const char *path = (const char *)path_;") 2754 pcmd("if (path) {") 2755 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2756 pcmd("}") 2757 } else { 2758 pcmd("const char *path = (const char *)path_;") 2759 pcmd("if (res == 0) {") 2760 pcmd(" if (path) {") 2761 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2762 pcmd(" }") 2763 pcmd("}") 2764 } 2765 } else if (syscall == "fchownat") { 2766 if (mode == "pre") { 2767 pcmd("const char *path = (const char *)path_;") 2768 pcmd("if (path) {") 2769 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2770 pcmd("}") 2771 } else { 2772 pcmd("const char *path = (const char *)path_;") 2773 pcmd("if (res == 0) {") 2774 pcmd(" if (path) {") 2775 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2776 pcmd(" }") 2777 pcmd("}") 2778 } 2779 } else if (syscall == "fexecve") { 2780 pcmd("/* TODO */") 2781 } else if (syscall == "fstatat") { 2782 if (mode == "pre") { 2783 pcmd("const char *path = (const char *)path_;") 2784 pcmd("if (path) {") 2785 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2786 pcmd("}") 2787 } else { 2788 pcmd("const char *path = (const char *)path_;") 2789 pcmd("if (path) {") 2790 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2791 pcmd("}") 2792 } 2793 } else if (syscall == "utimensat") { 2794 if (mode == "pre") { 2795 pcmd("const char *path = (const char *)path_;") 2796 pcmd("if (path) {") 2797 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2798 pcmd("}") 2799 pcmd("if (tptr_) {") 2800 pcmd(" PRE_READ(tptr_, struct_timespec_sz);") 2801 pcmd("}") 2802 } else { 2803 pcmd("const char *path = (const char *)path_;") 2804 pcmd("if (res > 0) {") 2805 pcmd(" if (path) {") 2806 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2807 pcmd(" }") 2808 pcmd(" if (tptr_) {") 2809 pcmd(" POST_READ(tptr_, struct_timespec_sz);") 2810 pcmd(" }") 2811 pcmd("}") 2812 } 2813 } else if (syscall == "openat") { 2814 if (mode == "pre") { 2815 pcmd("const char *path = (const char *)path_;") 2816 pcmd("if (path) {") 2817 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2818 pcmd("}") 2819 } else { 2820 pcmd("const char *path = (const char *)path_;") 2821 pcmd("if (res > 0) {") 2822 pcmd(" if (path) {") 2823 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2824 pcmd(" }") 2825 pcmd("}") 2826 } 2827 } else if (syscall == "readlinkat") { 2828 if (mode == "pre") { 2829 pcmd("const char *path = (const char *)path_;") 2830 pcmd("if (path) {") 2831 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2832 pcmd("}") 2833 } else { 2834 pcmd("const char *path = (const char *)path_;") 2835 pcmd("if (res > 0) {") 2836 pcmd(" if (path) {") 2837 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2838 pcmd(" }") 2839 pcmd("}") 2840 } 2841 } else if (syscall == "symlinkat") { 2842 if (mode == "pre") { 2843 pcmd("const char *path1 = (const char *)path1_;") 2844 pcmd("const char *path2 = (const char *)path2_;") 2845 pcmd("if (path1) {") 2846 pcmd(" PRE_READ(path1, __sanitizer::internal_strlen(path1) + 1);") 2847 pcmd("}") 2848 pcmd("if (path2) {") 2849 pcmd(" PRE_READ(path2, __sanitizer::internal_strlen(path2) + 1);") 2850 pcmd("}") 2851 } else { 2852 pcmd("const char *path1 = (const char *)path1_;") 2853 pcmd("const char *path2 = (const char *)path2_;") 2854 pcmd("if (res == 0) {") 2855 pcmd(" if (path1) {") 2856 pcmd(" POST_READ(path1, __sanitizer::internal_strlen(path1) + 1);") 2857 pcmd(" }") 2858 pcmd(" if (path2) {") 2859 pcmd(" POST_READ(path2, __sanitizer::internal_strlen(path2) + 1);") 2860 pcmd(" }") 2861 pcmd("}") 2862 } 2863 } else if (syscall == "unlinkat") { 2864 if (mode == "pre") { 2865 pcmd("const char *path = (const char *)path_;") 2866 pcmd("if (path) {") 2867 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2868 pcmd("}") 2869 } else { 2870 pcmd("const char *path = (const char *)path_;") 2871 pcmd("if (res == 0) {") 2872 pcmd(" if (path) {") 2873 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2874 pcmd(" }") 2875 pcmd("}") 2876 } 2877 } else if (syscall == "futimens") { 2878 if (mode == "pre") { 2879 pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;") 2880 pcmd("if (tptr) {") 2881 pcmd(" PRE_READ(tptr[0], struct_timespec_sz);") 2882 pcmd(" PRE_READ(tptr[1], struct_timespec_sz);") 2883 pcmd("}") 2884 } else { 2885 pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;") 2886 pcmd("if (res == 0) {") 2887 pcmd(" if (tptr) {") 2888 pcmd(" POST_READ(tptr[0], struct_timespec_sz);") 2889 pcmd(" POST_READ(tptr[1], struct_timespec_sz);") 2890 pcmd(" }") 2891 pcmd("}") 2892 } 2893 } else if (syscall == "__quotactl") { 2894 if (mode == "pre") { 2895 pcmd("const char *path = (const char *)path_;") 2896 pcmd("if (path) {") 2897 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2898 pcmd("}") 2899 } else { 2900 pcmd("const char *path = (const char *)path_;") 2901 pcmd("if (res == 0) {") 2902 pcmd(" if (path) {") 2903 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2904 pcmd(" }") 2905 pcmd("}") 2906 } 2907 } else if (syscall == "posix_spawn") { 2908 if (mode == "pre") { 2909 pcmd("const char *path = (const char *)path_;") 2910 pcmd("if (path) {") 2911 pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);") 2912 pcmd("}") 2913 } else { 2914 pcmd("const char *path = (const char *)path_;") 2915 pcmd("if (pid_) {") 2916 pcmd(" if (path) {") 2917 pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);") 2918 pcmd(" }") 2919 pcmd("}") 2920 } 2921 } else if (syscall == "recvmmsg") { 2922 if (mode == "pre") { 2923 pcmd("if (timeout_) {") 2924 pcmd(" PRE_READ(timeout_, struct_timespec_sz);") 2925 pcmd("}") 2926 } else { 2927 pcmd("if (res >= 0) {") 2928 pcmd(" if (timeout_) {") 2929 pcmd(" POST_READ(timeout_, struct_timespec_sz);") 2930 pcmd(" }") 2931 pcmd("}") 2932 } 2933 } else if (syscall == "sendmmsg") { 2934 if (mode == "pre") { 2935 pcmd("struct __sanitizer_mmsghdr *mmsg = (struct __sanitizer_mmsghdr *)mmsg_;") 2936 pcmd("if (mmsg) {") 2937 pcmd(" PRE_READ(mmsg, sizeof(struct __sanitizer_mmsghdr) * (vlen_ > 1024 ? 1024 : vlen_));") 2938 pcmd("}") 2939 } else { 2940 pcmd("struct __sanitizer_mmsghdr *mmsg = (struct __sanitizer_mmsghdr *)mmsg_;") 2941 pcmd("if (res >= 0) {") 2942 pcmd(" if (mmsg) {") 2943 pcmd(" POST_READ(mmsg, sizeof(struct __sanitizer_mmsghdr) * (vlen_ > 1024 ? 1024 : vlen_));") 2944 pcmd(" }") 2945 pcmd("}") 2946 } 2947 } else if (syscall == "clock_nanosleep") { 2948 if (mode == "pre") { 2949 pcmd("if (rqtp_) {") 2950 pcmd(" PRE_READ(rqtp_, struct_timespec_sz);") 2951 pcmd("}") 2952 } else { 2953 pcmd("if (rqtp_) {") 2954 pcmd(" POST_READ(rqtp_, struct_timespec_sz);") 2955 pcmd("}") 2956 } 2957 } else if (syscall == "___lwp_park60") { 2958 if (mode == "pre") { 2959 pcmd("if (ts_) {") 2960 pcmd(" PRE_READ(ts_, struct_timespec_sz);") 2961 pcmd("}") 2962 } else { 2963 pcmd("if (res == 0) {") 2964 pcmd(" if (ts_) {") 2965 pcmd(" POST_READ(ts_, struct_timespec_sz);") 2966 pcmd(" }") 2967 pcmd("}") 2968 } 2969 } else if (syscall == "posix_fallocate") { 2970 pcmd("/* Nothing to do */") 2971 } else if (syscall == "fdiscard") { 2972 pcmd("/* Nothing to do */") 2973 } else if (syscall == "wait6") { 2974 pcmd("/* Nothing to do */") 2975 } else if (syscall == "clock_getcpuclockid2") { 2976 pcmd("/* Nothing to do */") 2977 } else { 2978 print "Unrecognized syscall: " syscall 2979 abnormal_exit = 1 2980 exit 1 2981 } 2982} 2983