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