brintos

brintos / llvm-project-archived public Read only

0
0
Text · 102.4 KiB · 5a3be0a Raw
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