summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorKamil Rytarowski <n54@gmx.com>2018-02-15 15:15:45 +0000
committerKamil Rytarowski <n54@gmx.com>2018-02-15 15:15:45 +0000
commitae2be2c202196c260e5cf3db4c6ba91e410cca71 (patch)
treee193048ec126255b62ffc5d8470b834831715d39 /utils
parent236dbb3c3ab907e710e3500299b28f5ef5fe8cfb (diff)
Implement a large part of NetBSD syscalls of netbsd_syscall_hooks.h
This is a follow up of: r325206 - Add NetBSD syscall hooks skeleton in sanitizers Sponsored by <The NetBSD Foundation> git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@325248 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rwxr-xr-xutils/generate_netbsd_syscalls.awk2584
1 files changed, 2581 insertions, 3 deletions
diff --git a/utils/generate_netbsd_syscalls.awk b/utils/generate_netbsd_syscalls.awk
index 9406c4ff2..e7066029b 100755
--- a/utils/generate_netbsd_syscalls.awk
+++ b/utils/generate_netbsd_syscalls.awk
@@ -255,7 +255,51 @@ END {
pcmd("#define SANITIZER_NETBSD_SYSCALL_HOOKS_H")
pcmd("")
- # TODO
+ for (i = 0; i < parsedsyscalls; i++) {
+
+ if (i in ifelifelseendif) {
+ pcmd(ifelifelseendif[i])
+ }
+
+ sn = syscalls[i]
+
+ if (sn ~ /^\$/) {
+ pcmd("/* syscall " substr(sn,2) " has been skipped */")
+ continue
+ }
+
+ inargs = ""
+
+ if (syscallargs[i] != "void") {
+ inargs = syscallargs[i]
+ gsub(/\$/, ", ", inargs)
+ }
+
+ outargs = ""
+
+ if (syscallargs[i] != "void") {
+ outargs = "(long long)(" syscallargs[i] ")"
+ gsub(/\$/, "), (long long)(", outargs)
+ }
+
+ pcmd("#define __sanitizer_syscall_pre_" sn "(" inargs ") \\")
+ pcmd(" __sanitizer_syscall_pre_impl_" sn "(" outargs ")")
+
+ if (inargs == "") {
+ inargs = "res"
+ } else {
+ inargs = "res, " inargs
+ }
+
+ if (outargs == "") {
+ outargs = "res"
+ } else {
+ outargs = "res, " outargs
+ }
+
+ pcmd("#define __sanitizer_syscall_post_" sn "(" inargs ") \\")
+ pcmd(" __sanitizer_syscall_post_impl_" sn "(" outargs ")")
+ }
pcmd("")
pcmd("#ifdef __cplusplus")
@@ -267,7 +311,35 @@ END {
pcmd("// DO NOT EDIT! THIS FILE HAS BEEN GENERATED!")
pcmd("")
- # TODO
+ for (i = 0; i < parsedsyscalls; i++) {
+
+ if (i in ifelifelseendif) {
+ pcmd(ifelifelseendif[i])
+ }
+
+ sn = syscalls[i]
+
+ if (sn ~ /^\$/) {
+ pcmd("/* syscall " substr(sn,2) " has been skipped */")
+ continue
+ }
+
+ preargs = syscallargs[i]
+
+ if (preargs != "void") {
+ preargs = "long long " preargs
+ gsub(/\$/, ", long long ", preargs)
+ }
+
+ if (preargs == "void") {
+ postargs = "long long res"
+ } else {
+ postargs = "long long res, " preargs
+ }
+
+ pcmd("void __sanitizer_syscall_pre_impl_" sn "(" preargs ");")
+ pcmd("void __sanitizer_syscall_post_impl_" sn "(" postargs ");")
+ }
pcmd("")
pcmd("#ifdef __cplusplus")
@@ -383,9 +455,47 @@ END {
pcmd("// FIXME: do some kind of PRE_READ for all syscall arguments (int(s) and such).")
pcmd("")
pcmd("extern \"C\" {")
+ pcmd("#define SYS_MAXSYSARGS " SYS_MAXSYSARGS)
+
+ for (i = 0; i < parsedsyscalls; i++) {
+
+ if (i in ifelifelseendif) {
+ pcmd(ifelifelseendif[i])
+ }
+
+ sn = syscalls[i]
+
+ if (sn ~ /^\$/) {
+ pcmd("/* syscall " substr(sn,2) " has been skipped */")
+ continue
+ }
- # TODO
+ preargs = syscallfullargs[i]
+ if (preargs != "void") {
+ preargs = "long long " preargs
+ gsub(/\$/, ", long long ", preargs)
+ gsub(/long long \*/, "void *", preargs)
+ }
+
+ if (preargs == "void") {
+ postargs = "long long res"
+ } else {
+ postargs = "long long res, " preargs
+ }
+
+ pcmd("PRE_SYSCALL(" sn ")(" preargs ")")
+ pcmd("{")
+ syscall_body(sn, "pre")
+ pcmd("}")
+
+ pcmd("POST_SYSCALL(" sn ")(" postargs ")")
+ pcmd("{")
+ syscall_body(sn, "post")
+ pcmd("}")
+ }
+
+ pcmd("#undef SYS_MAXSYSARGS")
pcmd("} // extern \"C\"")
pcmd("")
pcmd("#undef PRE_SYSCALL")
@@ -414,3 +524,2471 @@ function pcmd(string)
{
print string | cmd
}
+
+function syscall_body(syscall, mode)
+{
+ # Hardcode sanitizing rules here
+ # These syscalls don't change often so they are hand coded
+ if (syscall == "syscall") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "exit") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "fork") {
+ if (mode == "pre") {
+ pcmd("COMMON_SYSCALL_PRE_FORK();")
+ } else {
+ pcmd("COMMON_SYSCALL_POST_FORK(res);")
+ }
+ } else if (syscall == "read") {
+ if (mode == "pre") {
+ pcmd("if (buf_) {")
+ pcmd(" PRE_WRITE(buf_, nbyte_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res > 0) {")
+ pcmd(" POST_WRITE(buf_, res);")
+ pcmd("}")
+ }
+ } else if (syscall == "write") {
+ if (mode == "pre") {
+ pcmd("if (buf_) {")
+ pcmd(" PRE_READ(buf_, nbyte_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res > 0) {")
+ pcmd(" POST_READ(buf_, res);")
+ pcmd("}")
+ }
+ } else if (syscall == "open") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res > 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "close") {
+ if (mode == "pre") {
+ pcmd("COMMON_SYSCALL_FD_CLOSE((int)fd_);")
+ } else {
+ pcmd("/* Nothing to do */")
+ }
+ } else if (syscall == "compat_50_wait4") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ocreat") {
+ pcmd("/* TODO */")
+ } else if (syscall == "link") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("const char *link = (const char *)link_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (link) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(link) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" const char *link = (const char *)link_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd(" if (link) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(link) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "unlink") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "chdir") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "fchdir") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_mknod") {
+ pcmd("/* TODO */")
+ } else if (syscall == "chmod") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "chown") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "break") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_20_getfsstat") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_olseek") {
+ pcmd("/* TODO */")
+ } else if (syscall == "getpid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_40_mount") {
+ pcmd("/* TODO */")
+ } else if (syscall == "unmount") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "setuid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "getuid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "geteuid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "ptrace") {
+ if (mode == "pre") {
+ pcmd("if (req_ == ptrace_pt_io) {")
+ pcmd(" struct __sanitizer_ptrace_io_desc *addr = (struct __sanitizer_ptrace_io_desc *)addr_;")
+ pcmd(" PRE_READ(addr, struct_ptrace_ptrace_io_desc_struct_sz);")
+ pcmd(" if (addr->piod_op == ptrace_piod_write_d || addr->piod_op == ptrace_piod_write_i) {")
+ pcmd(" PRE_READ(addr->piod_addr, addr->piod_len);")
+ pcmd(" }")
+ pcmd(" if (addr->piod_op == ptrace_piod_read_d || addr->piod_op == ptrace_piod_read_i || addr->piod_op == ptrace_piod_read_auxv) {")
+ pcmd(" PRE_WRITE(addr->piod_addr, addr->piod_len);")
+ pcmd(" }")
+ pcmd("} else if (req_ == ptrace_pt_lwpinfo) {")
+ pcmd(" struct __sanitizer_ptrace_lwpinfo *addr = (struct __sanitizer_ptrace_lwpinfo *)addr_;")
+ pcmd(" PRE_READ(&addr->pl_lwpid, sizeof(__sanitizer_lwpid_t));")
+ pcmd(" PRE_WRITE(addr, struct_ptrace_ptrace_lwpinfo_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_set_event_mask) {")
+ pcmd(" PRE_READ(addr_, struct_ptrace_ptrace_event_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_get_event_mask) {")
+ pcmd(" PRE_WRITE(addr_, struct_ptrace_ptrace_event_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_set_siginfo) {")
+ pcmd(" PRE_READ(addr_, struct_ptrace_ptrace_siginfo_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_get_siginfo) {")
+ pcmd(" PRE_WRITE(addr_, struct_ptrace_ptrace_siginfo_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_set_sigmask) {")
+ pcmd(" PRE_READ(addr_, sizeof(__sanitizer_sigset_t));")
+ pcmd("} else if (req_ == ptrace_pt_get_sigmask) {")
+ pcmd(" PRE_WRITE(addr_, sizeof(__sanitizer_sigset_t));")
+ pcmd("} else if (req_ == ptrace_pt_setregs) {")
+ pcmd(" PRE_READ(addr_, struct_ptrace_reg_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_getregs) {")
+ pcmd(" PRE_WRITE(addr_, struct_ptrace_reg_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_setfpregs) {")
+ pcmd(" PRE_READ(addr_, struct_ptrace_fpreg_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_getfpregs) {")
+ pcmd(" PRE_WRITE(addr_, struct_ptrace_fpreg_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_setdbregs) {")
+ pcmd(" PRE_READ(addr_, struct_ptrace_dbreg_struct_sz);")
+ pcmd("} else if (req_ == ptrace_pt_getdbregs) {")
+ pcmd(" PRE_WRITE(addr_, struct_ptrace_dbreg_struct_sz);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" if (req_ == ptrace_pt_io) {")
+ pcmd(" struct __sanitizer_ptrace_io_desc *addr = (struct __sanitizer_ptrace_io_desc *)addr_;")
+ pcmd(" POST_READ(addr, struct_ptrace_ptrace_io_desc_struct_sz);")
+ pcmd(" if (addr->piod_op == ptrace_piod_write_d || addr->piod_op == ptrace_piod_write_i) {")
+ pcmd(" POST_READ(addr->piod_addr, addr->piod_len);")
+ pcmd(" }")
+ pcmd(" if (addr->piod_op == ptrace_piod_read_d || addr->piod_op == ptrace_piod_read_i || addr->piod_op == ptrace_piod_read_auxv) {")
+ pcmd(" POST_WRITE(addr->piod_addr, addr->piod_len);")
+ pcmd(" }")
+ pcmd(" } else if (req_ == ptrace_pt_lwpinfo) {")
+ pcmd(" struct __sanitizer_ptrace_lwpinfo *addr = (struct __sanitizer_ptrace_lwpinfo *)addr_;")
+ pcmd(" POST_READ(&addr->pl_lwpid, sizeof(__sanitizer_lwpid_t));")
+ pcmd(" POST_WRITE(addr, struct_ptrace_ptrace_lwpinfo_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_set_event_mask) {")
+ pcmd(" POST_READ(addr_, struct_ptrace_ptrace_event_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_get_event_mask) {")
+ pcmd(" POST_WRITE(addr_, struct_ptrace_ptrace_event_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_set_siginfo) {")
+ pcmd(" POST_READ(addr_, struct_ptrace_ptrace_siginfo_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_get_siginfo) {")
+ pcmd(" POST_WRITE(addr_, struct_ptrace_ptrace_siginfo_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_set_sigmask) {")
+ pcmd(" POST_READ(addr_, sizeof(__sanitizer_sigset_t));")
+ pcmd(" } else if (req_ == ptrace_pt_get_sigmask) {")
+ pcmd(" POST_WRITE(addr_, sizeof(__sanitizer_sigset_t));")
+ pcmd(" } else if (req_ == ptrace_pt_setregs) {")
+ pcmd(" POST_READ(addr_, struct_ptrace_reg_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_getregs) {")
+ pcmd(" POST_WRITE(addr_, struct_ptrace_reg_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_setfpregs) {")
+ pcmd(" POST_READ(addr_, struct_ptrace_fpreg_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_getfpregs) {")
+ pcmd(" POST_WRITE(addr_, struct_ptrace_fpreg_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_setdbregs) {")
+ pcmd(" POST_READ(addr_, struct_ptrace_dbreg_struct_sz);")
+ pcmd(" } else if (req_ == ptrace_pt_getdbregs) {")
+ pcmd(" POST_WRITE(addr_, struct_ptrace_dbreg_struct_sz);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "recvmsg") {
+ if (mode == "pre") {
+ pcmd("PRE_WRITE(msg_, sizeof(__sanitizer_msghdr));")
+ } else {
+ pcmd("if (res > 0) {")
+ pcmd(" POST_WRITE(msg_, sizeof(__sanitizer_msghdr));")
+ pcmd("}")
+ }
+ } else if (syscall == "sendmsg") {
+ if (mode == "pre") {
+ pcmd("PRE_READ(msg_, sizeof(__sanitizer_msghdr));")
+ } else {
+ pcmd("if (res > 0) {")
+ pcmd(" POST_READ(msg_, sizeof(__sanitizer_msghdr));")
+ pcmd("}")
+ }
+ } else if (syscall == "recvfrom") {
+ if (mode == "pre") {
+ pcmd("PRE_WRITE(buf_, len_);")
+ pcmd("PRE_WRITE(from_, struct_sockaddr_sz);")
+ pcmd("PRE_WRITE(fromlenaddr_, sizeof(__sanitizer_socklen_t));")
+ } else {
+ pcmd("if (res >= 0) {")
+ pcmd(" POST_WRITE(buf_, res);")
+ pcmd(" POST_WRITE(from_, struct_sockaddr_sz);")
+ pcmd(" POST_WRITE(fromlenaddr_, sizeof(__sanitizer_socklen_t));")
+ pcmd("}")
+ }
+ } else if (syscall == "accept") {
+ if (mode == "pre") {
+ pcmd("PRE_WRITE(name_, struct_sockaddr_sz);")
+ pcmd("PRE_WRITE(anamelen_, sizeof(__sanitizer_socklen_t));")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" POST_WRITE(name_, struct_sockaddr_sz);")
+ pcmd(" POST_WRITE(anamelen_, sizeof(__sanitizer_socklen_t));")
+ pcmd("}")
+ }
+ } else if (syscall == "getpeername") {
+ if (mode == "pre") {
+ pcmd("PRE_WRITE(asa_, struct_sockaddr_sz);")
+ pcmd("PRE_WRITE(alen_, sizeof(__sanitizer_socklen_t));")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" POST_WRITE(asa_, struct_sockaddr_sz);")
+ pcmd(" POST_WRITE(alen_, sizeof(__sanitizer_socklen_t));")
+ pcmd("}")
+ }
+ } else if (syscall == "getsockname") {
+ if (mode == "pre") {
+ pcmd("PRE_WRITE(asa_, struct_sockaddr_sz);")
+ pcmd("PRE_WRITE(alen_, sizeof(__sanitizer_socklen_t));")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" POST_WRITE(asa_, struct_sockaddr_sz);")
+ pcmd(" POST_WRITE(alen_, sizeof(__sanitizer_socklen_t));")
+ pcmd("}")
+ }
+ } else if (syscall == "access") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "chflags") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "fchflags") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "sync") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "kill") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_43_stat43") {
+ pcmd("/* TODO */")
+ } else if (syscall == "getppid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_43_lstat43") {
+ pcmd("/* TODO */")
+ } else if (syscall == "dup") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "pipe") {
+ pcmd("/* pipe returns two descriptors through two returned values */")
+ } else if (syscall == "getegid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "profil") {
+ if (mode == "pre") {
+ pcmd("if (samples_) {")
+ pcmd(" PRE_WRITE(samples_, size_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" if (samples_) {")
+ pcmd(" POST_WRITE(samples_, size_);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "ktrace") {
+ if (mode == "pre") {
+ pcmd("const char *fname = (const char *)fname_;")
+ pcmd("if (fname) {")
+ pcmd(" PRE_READ(fname, __sanitizer::internal_strlen(fname) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *fname = (const char *)fname_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (fname) {")
+ pcmd(" POST_READ(fname, __sanitizer::internal_strlen(fname) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_13_sigaction13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "getgid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_13_sigprocmask13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__getlogin") {
+ if (mode == "pre") {
+ pcmd("if (namebuf_) {")
+ pcmd(" PRE_WRITE(namebuf_, namelen_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" if (namebuf_) {")
+ pcmd(" POST_WRITE(namebuf_, namelen_);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "__setlogin") {
+ if (mode == "pre") {
+ pcmd("const char *namebuf = (const char *)namebuf_;")
+ pcmd("if (namebuf) {")
+ pcmd(" PRE_READ(namebuf, __sanitizer::internal_strlen(namebuf) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *namebuf = (const char *)namebuf_;")
+ pcmd(" if (namebuf) {")
+ pcmd(" POST_READ(namebuf, __sanitizer::internal_strlen(namebuf) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "acct") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_13_sigpending13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_13_sigaltstack13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "ioctl") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_12_oreboot") {
+ pcmd("/* TODO */")
+ } else if (syscall == "revoke") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "symlink") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("const char *link = (const char *)link_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (link) {")
+ pcmd(" PRE_READ(link, __sanitizer::internal_strlen(link) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" const char *link = (const char *)link_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd(" if (link) {")
+ pcmd(" POST_READ(link, __sanitizer::internal_strlen(link) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "readlink") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (buf_) {")
+ pcmd(" PRE_WRITE(buf_, count_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res > 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd(" if (buf_) {")
+ pcmd(" PRE_WRITE(buf_, res);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "execve") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("char **argp = (char **)argp_;")
+ pcmd("char **envp = (char **)envp_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (argp && argp[0]) {")
+ pcmd(" char *a = argp[0];")
+ pcmd(" while (a++) {")
+ pcmd(" PRE_READ(a, __sanitizer::internal_strlen(a) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ pcmd("if (envp && envp[0]) {")
+ pcmd(" char *e = envp[0];")
+ pcmd(" while (e++) {")
+ pcmd(" PRE_READ(e, __sanitizer::internal_strlen(e) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ } else {
+ pcmd("/* If we are here, something went wrong */")
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("char **argp = (char **)argp_;")
+ pcmd("char **envp = (char **)envp_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (argp && argp[0]) {")
+ pcmd(" char *a = argp[0];")
+ pcmd(" while (a++) {")
+ pcmd(" POST_READ(a, __sanitizer::internal_strlen(a) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ pcmd("if (envp && envp[0]) {")
+ pcmd(" char *e = envp[0];")
+ pcmd(" while (e++) {")
+ pcmd(" POST_READ(e, __sanitizer::internal_strlen(e) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "umask") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "chroot") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_43_fstat43") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ogetkerninfo") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ogetpagesize") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_12_msync") {
+ pcmd("/* TODO */")
+ } else if (syscall == "vfork") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_43_ommap") {
+ pcmd("/* TODO */")
+ } else if (syscall == "vadvise") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "munmap") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "mprotect") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "madvise") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "mincore") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "getgroups") {
+ if (mode == "pre") {
+ pcmd("unsigned int *gidset = (unsigned int *)gidset_;")
+ pcmd("if (gidset) {")
+ pcmd(" PRE_WRITE(gidset, sizeof(*gidset) * gidsetsize_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" unsigned int *gidset = (unsigned int *)gidset_;")
+ pcmd(" if (gidset) {")
+ pcmd(" POST_WRITE(gidset, sizeof(*gidset) * gidsetsize_);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "setgroups") {
+ if (mode == "pre") {
+ pcmd("unsigned int *gidset = (unsigned int *)gidset_;")
+ pcmd("if (gidset) {")
+ pcmd(" PRE_READ(gidset, sizeof(*gidset) * gidsetsize_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" unsigned int *gidset = (unsigned int *)gidset_;")
+ pcmd(" if (gidset) {")
+ pcmd(" POST_READ(gidset, sizeof(*gidset) * gidsetsize_);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "getpgrp") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "setpgid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_setitimer") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_owait") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_12_oswapon") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_getitimer") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ogethostname") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_osethostname") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ogetdtablesize") {
+ pcmd("/* TODO */")
+ } else if (syscall == "dup2") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "fcntl") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_select") {
+ pcmd("/* TODO */")
+ } else if (syscall == "fsync") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "setpriority") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_30_socket") {
+ pcmd("/* TODO */")
+ } else if (syscall == "connect") {
+ if (mode == "pre") {
+ pcmd("PRE_READ(name_, namelen_);")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" POST_READ(name_, namelen_);")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_43_oaccept") {
+ pcmd("/* TODO */")
+ } else if (syscall == "getpriority") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_43_osend") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_orecv") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_13_sigreturn13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "bind") {
+ if (mode == "pre") {
+ pcmd("PRE_READ(name_, namelen_);")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" PRE_READ(name_, namelen_);")
+ pcmd("}")
+ }
+ } else if (syscall == "setsockopt") {
+ if (mode == "pre") {
+ pcmd("if (val_) {")
+ pcmd(" PRE_READ(val_, valsize_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" if (val_) {")
+ pcmd(" POST_READ(val_, valsize_);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "listen") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_43_osigvec") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_osigblock") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_osigsetmask") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_13_sigsuspend13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_osigstack") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_orecvmsg") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_osendmsg") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_gettimeofday") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_getrusage") {
+ pcmd("/* TODO */")
+ } else if (syscall == "getsockopt") {
+ pcmd("/* TODO */")
+ } else if (syscall == "readv") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_iovec *iovp = (struct __sanitizer_iovec *)iovp_;")
+ pcmd("int i;")
+ pcmd("if (iovp) {")
+ pcmd(" PRE_READ(iovp, sizeof(struct __sanitizer_iovec) * iovcnt_);")
+ pcmd(" for (i = 0; i < iovcnt_; i++) {")
+ pcmd(" PRE_WRITE(iovp[i].iov_base, iovp[i].iov_len);")
+ pcmd(" }")
+ pcmd("}")
+ } else {
+ pcmd("struct __sanitizer_iovec *iovp = (struct __sanitizer_iovec *)iovp_;")
+ pcmd("int i;")
+ pcmd("uptr m, n = res;")
+ pcmd("if (res > 0) {")
+ pcmd(" if (iovp) {")
+ pcmd(" POST_READ(iovp, sizeof(struct __sanitizer_iovec) * iovcnt_);")
+ pcmd(" for (i = 0; i < iovcnt_ && n > 0; i++) {")
+ pcmd(" m = n > iovp[i].iov_len ? iovp[i].iov_len : n;")
+ pcmd(" POST_WRITE(iovp[i].iov_base, m);")
+ pcmd(" n -= m;")
+ pcmd(" }")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "writev") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_iovec *iovp = (struct __sanitizer_iovec *)iovp_;")
+ pcmd("int i;")
+ pcmd("if (iovp) {")
+ pcmd(" PRE_READ(iovp, sizeof(struct __sanitizer_iovec) * iovcnt_);")
+ pcmd(" for (i = 0; i < iovcnt_; i++) {")
+ pcmd(" PRE_READ(iovp[i].iov_base, iovp[i].iov_len);")
+ pcmd(" }")
+ pcmd("}")
+ } else {
+ pcmd("struct __sanitizer_iovec *iovp = (struct __sanitizer_iovec *)iovp_;")
+ pcmd("int i;")
+ pcmd("uptr m, n = res;")
+ pcmd("if (res > 0) {")
+ pcmd(" if (iovp) {")
+ pcmd(" POST_READ(iovp, sizeof(struct __sanitizer_iovec) * iovcnt_);")
+ pcmd(" for (i = 0; i < iovcnt_ && n > 0; i++) {")
+ pcmd(" m = n > iovp[i].iov_len ? iovp[i].iov_len : n;")
+ pcmd(" POST_READ(iovp[i].iov_base, m);")
+ pcmd(" n -= m;")
+ pcmd(" }")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_50_settimeofday") {
+ pcmd("/* TODO */")
+ } else if (syscall == "fchown") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "fchmod") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_43_orecvfrom") {
+ pcmd("/* TODO */")
+ } else if (syscall == "setreuid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "setregid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "rename") {
+ if (mode == "pre") {
+ pcmd("const char *from = (const char *)from_;")
+ pcmd("const char *to = (const char *)to_;")
+ pcmd("if (from) {")
+ pcmd(" PRE_READ(from, __sanitizer::internal_strlen(from) + 1);")
+ pcmd("}")
+ pcmd("if (to) {")
+ pcmd(" PRE_READ(to, __sanitizer::internal_strlen(to) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *from = (const char *)from_;")
+ pcmd(" const char *to = (const char *)to_;")
+ pcmd(" if (from) {")
+ pcmd(" POST_READ(from, __sanitizer::internal_strlen(from) + 1);")
+ pcmd(" }")
+ pcmd(" if (to) {")
+ pcmd(" POST_READ(to, __sanitizer::internal_strlen(to) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_43_otruncate") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_oftruncate") {
+ pcmd("/* TODO */")
+ } else if (syscall == "flock") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "mkfifo") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "sendto") {
+ if (mode == "pre") {
+ pcmd("PRE_READ(buf_, len_);")
+ pcmd("PRE_READ(to_, tolen_);")
+ } else {
+ pcmd("if (res >= 0) {")
+ pcmd(" POST_READ(buf_, len_);")
+ pcmd(" POST_READ(to_, tolen_);")
+ pcmd("}")
+ }
+ } else if (syscall == "shutdown") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "socketpair") {
+ if (mode == "pre") {
+ pcmd("PRE_WRITE(rsv_, 2 * sizeof(int));")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" POST_WRITE(rsv_, 2 * sizeof(int));")
+ pcmd("}")
+ }
+ } else if (syscall == "mkdir") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "rmdir") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_50_utimes") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_adjtime") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ogetpeername") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ogethostid") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_osethostid") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ogetrlimit") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_osetrlimit") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_okillpg") {
+ pcmd("/* TODO */")
+ } else if (syscall == "setsid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_quotactl") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_oquota") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_43_ogetsockname") {
+ pcmd("/* TODO */")
+ } else if (syscall == "nfssvc") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_43_ogetdirentries") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_20_statfs") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_20_fstatfs") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_30_getfh") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_09_ogetdomainname") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_09_osetdomainname") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_09_ouname") {
+ pcmd("/* TODO */")
+ } else if (syscall == "sysarch") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_10_osemsys") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_10_omsgsys") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_10_oshmsys") {
+ pcmd("/* TODO */")
+ } else if (syscall == "pread") {
+ if (mode == "pre") {
+ pcmd("if (buf_) {")
+ pcmd(" PRE_WRITE(buf_, nbyte_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res > 0) {")
+ pcmd(" POST_WRITE(buf_, res);")
+ pcmd("}")
+ }
+ } else if (syscall == "pwrite") {
+ if (mode == "pre") {
+ pcmd("if (buf_) {")
+ pcmd(" PRE_READ(buf_, nbyte_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res > 0) {")
+ pcmd(" POST_READ(buf_, res);")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_30_ntp_gettime") {
+ pcmd("/* TODO */")
+ } else if (syscall == "ntp_adjtime") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "setgid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "setegid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "seteuid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "lfs_bmapv") {
+ pcmd("/* TODO */")
+ } else if (syscall == "lfs_markv") {
+ pcmd("/* TODO */")
+ } else if (syscall == "lfs_segclean") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_lfs_segwait") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_12_stat12") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_12_fstat12") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_12_lstat12") {
+ pcmd("/* TODO */")
+ } else if (syscall == "pathconf") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res != -1) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "fpathconf") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "getrlimit") {
+ if (mode == "pre") {
+ pcmd("PRE_WRITE(rlp_, struct_rlimit_sz);")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" POST_WRITE(rlp_, struct_rlimit_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "setrlimit") {
+ if (mode == "pre") {
+ pcmd("PRE_READ(rlp_, struct_rlimit_sz);")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" POST_READ(rlp_, struct_rlimit_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_12_getdirentries") {
+ pcmd("/* TODO */")
+ } else if (syscall == "mmap") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__syscall") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "lseek") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "truncate") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "ftruncate") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__sysctl") {
+ if (mode == "pre") {
+ pcmd("const int *name = (const int *)name_;")
+ pcmd("if (name) {")
+ pcmd(" PRE_READ(name, namelen_ * sizeof(*name));")
+ pcmd("}")
+ pcmd("if (newv_) {")
+ pcmd(" PRE_READ(name, newlen_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const int *name = (const int *)name_;")
+ pcmd(" if (name) {")
+ pcmd(" POST_READ(name, namelen_ * sizeof(*name));")
+ pcmd(" }")
+ pcmd(" if (newv_) {")
+ pcmd(" POST_READ(name, newlen_);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "mlock") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "munlock") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "undelete") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" const char *path = (const char *)path_;")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_50_futimes") {
+ pcmd("/* TODO */")
+ } else if (syscall == "getpgid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "reboot") {
+ if (mode == "pre") {
+ pcmd("const char *bootstr = (const char *)bootstr_;")
+ pcmd("if (bootstr) {")
+ pcmd(" PRE_READ(bootstr, __sanitizer::internal_strlen(bootstr) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("/* This call should never return */")
+ pcmd("const char *bootstr = (const char *)bootstr_;")
+ pcmd("if (bootstr) {")
+ pcmd(" POST_READ(bootstr, __sanitizer::internal_strlen(bootstr) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "poll") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "afssys") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_14___semctl") {
+ pcmd("/* TODO */")
+ } else if (syscall == "semget") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "semop") {
+ if (mode == "pre") {
+ pcmd("if (sops_) {")
+ pcmd(" PRE_READ(sops_, nsops_ * struct_sembuf_sz);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" if (sops_) {")
+ pcmd(" POST_READ(sops_, nsops_ * struct_sembuf_sz);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "semconfig") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_14_msgctl") {
+ pcmd("/* TODO */")
+ } else if (syscall == "msgget") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "msgsnd") {
+ if (mode == "pre") {
+ pcmd("if (msgp_) {")
+ pcmd(" PRE_READ(msgp_, msgsz_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" if (msgp_) {")
+ pcmd(" POST_READ(msgp_, msgsz_);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "msgrcv") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "shmat") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_14_shmctl") {
+ pcmd("/* TODO */")
+ } else if (syscall == "shmdt") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "shmget") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_clock_gettime") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_clock_settime") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_clock_getres") {
+ pcmd("/* TODO */")
+ } else if (syscall == "timer_create") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "timer_delete") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_timer_settime") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_timer_gettime") {
+ pcmd("/* TODO */")
+ } else if (syscall == "timer_getoverrun") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_nanosleep") {
+ pcmd("/* TODO */")
+ } else if (syscall == "fdatasync") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "mlockall") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "munlockall") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50___sigtimedwait") {
+ pcmd("/* TODO */")
+ } else if (syscall == "sigqueueinfo") {
+ if (mode == "pre") {
+ pcmd("if (info_) {")
+ pcmd(" PRE_READ(info_, siginfo_t_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "modctl") {
+ pcmd("/* TODO */")
+ } else if (syscall == "_ksem_init") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_ksem_open") {
+ if (mode == "pre") {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "_ksem_unlink") {
+ if (mode == "pre") {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "_ksem_close") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_ksem_post") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_ksem_wait") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_ksem_trywait") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_ksem_getvalue") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_ksem_destroy") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_ksem_timedwait") {
+ if (mode == "pre") {
+ pcmd("if (abstime_) {")
+ pcmd(" PRE_READ(abstime_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "mq_open") {
+ if (mode == "pre") {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "mq_close") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "mq_unlink") {
+ if (mode == "pre") {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "mq_getattr") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "mq_setattr") {
+ if (mode == "pre") {
+ pcmd("if (mqstat_) {")
+ pcmd(" PRE_READ(mqstat_, struct_mq_attr_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "mq_notify") {
+ if (mode == "pre") {
+ pcmd("if (notification_) {")
+ pcmd(" PRE_READ(notification_, struct_sigevent_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "mq_send") {
+ if (mode == "pre") {
+ pcmd("if (msg_ptr_) {")
+ pcmd(" PRE_READ(msg_ptr_, msg_len_);")
+ pcmd("}")
+ }
+ } else if (syscall == "mq_receive") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_mq_timedsend") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_mq_timedreceive") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__posix_rename") {
+ if (mode == "pre") {
+ pcmd("const char *from = (const char *)from_;")
+ pcmd("const char *to = (const char *)to_;")
+ pcmd("if (from_) {")
+ pcmd(" PRE_READ(from, __sanitizer::internal_strlen(from) + 1);")
+ pcmd("}")
+ pcmd("if (to) {")
+ pcmd(" PRE_READ(to, __sanitizer::internal_strlen(to) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *from = (const char *)from_;")
+ pcmd("const char *to = (const char *)to_;")
+ pcmd("if (from) {")
+ pcmd(" POST_READ(from, __sanitizer::internal_strlen(from) + 1);")
+ pcmd("}")
+ pcmd("if (to) {")
+ pcmd(" POST_READ(to, __sanitizer::internal_strlen(to) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "swapctl") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_30_getdents") {
+ pcmd("/* TODO */")
+ } else if (syscall == "minherit") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "lchmod") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "lchown") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_50_lutimes") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__msync13") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_30___stat13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_30___fstat13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_30___lstat13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__sigaltstack14") {
+ if (mode == "pre") {
+ pcmd("if (nss_) {")
+ pcmd(" PRE_READ(nss_, struct_sigaltstack_sz);")
+ pcmd("}")
+ pcmd("if (oss_) {")
+ pcmd(" PRE_READ(oss_, struct_sigaltstack_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__vfork14") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__posix_chown") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "__posix_fchown") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__posix_lchown") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "getsid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__clone") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "fktrace") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "preadv") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "pwritev") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_16___sigaction14") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__sigpending14") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__sigprocmask14") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__sigsuspend14") {
+ pcmd("if (set_) {")
+ pcmd(" PRE_READ(set_, sizeof(__sanitizer_sigset_t));")
+ pcmd("}")
+ } else if (syscall == "compat_16___sigreturn14") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__getcwd") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "fchroot") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_30_fhopen") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_30_fhstat") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_20_fhstatfs") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_____semctl13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50___msgctl13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50___shmctl13") {
+ pcmd("/* TODO */")
+ } else if (syscall == "lchflags") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "issetugid") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "utrace") {
+ if (mode == "pre") {
+ pcmd("const char *label = (const char *)label_;")
+ pcmd("if (label) {")
+ pcmd(" PRE_READ(label, __sanitizer::internal_strlen(label) + 1);")
+ pcmd("}")
+ pcmd("if (addr_) {")
+ pcmd(" PRE_READ(addr_, len_);")
+ pcmd("}")
+ } else {
+ pcmd("const char *label = (const char *)label_;")
+ pcmd("if (label) {")
+ pcmd(" POST_READ(label, __sanitizer::internal_strlen(label) + 1);")
+ pcmd("}")
+ pcmd("if (addr_) {")
+ pcmd(" POST_READ(addr_, len_);")
+ pcmd("}")
+ }
+ } else if (syscall == "getcontext") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "setcontext") {
+ if (mode == "pre") {
+ pcmd("if (ucp_) {")
+ pcmd(" PRE_READ(ucp_, ucontext_t_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "_lwp_create") {
+ if (mode == "pre") {
+ pcmd("if (ucp_) {")
+ pcmd(" PRE_READ(ucp_, ucontext_t_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "_lwp_exit") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_self") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_wait") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_suspend") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_continue") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_wakeup") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_getprivate") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_setprivate") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_kill") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_detach") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50__lwp_park") {
+ pcmd("/* TODO */")
+ } else if (syscall == "_lwp_unpark") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_unpark_all") {
+ if (mode == "pre") {
+ pcmd("if (targets_) {")
+ pcmd(" PRE_READ(targets_, ntargets_ * sizeof(__sanitizer_lwpid_t));")
+ pcmd("}")
+ }
+ } else if (syscall == "_lwp_setname") {
+ if (mode == "pre") {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" PRE_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *name = (const char *)name_;")
+ pcmd("if (name) {")
+ pcmd(" POST_READ(name, __sanitizer::internal_strlen(name) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "_lwp_getname") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_lwp_ctl") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_60_sa_register") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_60_sa_stacks") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_60_sa_enable") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_60_sa_setconcurrency") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_60_sa_yield") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_60_sa_preempt") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__sigaction_sigtramp") {
+ pcmd("if (nsa_) {")
+ pcmd(" PRE_READ(nsa_, sizeof(__sanitizer_sigaction));")
+ pcmd("}")
+ } else if (syscall == "pmc_get_info") {
+ pcmd("/* TODO */")
+ } else if (syscall == "pmc_control") {
+ pcmd("/* TODO */")
+ } else if (syscall == "rasctl") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "kqueue") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_50_kevent") {
+ pcmd("/* TODO */")
+ } else if (syscall == "_sched_setparam") {
+ pcmd("if (params_) {")
+ pcmd(" PRE_READ(params_, struct_sched_param_sz);")
+ pcmd("}")
+ } else if (syscall == "_sched_getparam") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_sched_setaffinity") {
+ pcmd("if (cpuset_) {")
+ pcmd(" PRE_READ(cpuset_, size_);")
+ pcmd("}")
+ } else if (syscall == "_sched_getaffinity") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "sched_yield") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_sched_protect") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "fsync_range") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "uuidgen") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "getvfsstat") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "statvfs1") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "fstatvfs1") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_30_fhstatvfs1") {
+ pcmd("/* TODO */")
+ } else if (syscall == "extattrctl") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "extattr_set_file") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "extattr_get_file") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "extattr_delete_file") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "extattr_set_fd") {
+ pcmd("/* TODO */")
+ } else if (syscall == "extattr_get_fd") {
+ pcmd("/* TODO */")
+ } else if (syscall == "extattr_delete_fd") {
+ pcmd("/* TODO */")
+ } else if (syscall == "extattr_set_link") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "extattr_get_link") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "extattr_delete_link") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "extattr_list_fd") {
+ pcmd("/* TODO */")
+ } else if (syscall == "extattr_list_file") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "extattr_list_link") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_50_pselect") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50_pollts") {
+ pcmd("/* TODO */")
+ } else if (syscall == "setxattr") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "lsetxattr") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "fsetxattr") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "getxattr") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "lgetxattr") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "fgetxattr") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "listxattr") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "llistxattr") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "flistxattr") {
+ pcmd("/* TODO */")
+ } else if (syscall == "removexattr") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "lremovexattr") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "fremovexattr") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50___stat30") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50___fstat30") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50___lstat30") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__getdents30") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "posix_fadvise") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "compat_30___fhstat30") {
+ pcmd("/* TODO */")
+ } else if (syscall == "compat_50___ntp_gettime30") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__socket30") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__getfh30") {
+ if (mode == "pre") {
+ pcmd("const char *fname = (const char *)fname_;")
+ pcmd("if (fname) {")
+ pcmd(" PRE_READ(fname, __sanitizer::internal_strlen(fname) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *fname = (const char *)fname_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (fname) {")
+ pcmd(" POST_READ(fname, __sanitizer::internal_strlen(fname) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "__fhopen40") {
+ if (mode == "pre") {
+ pcmd("if (fhp_) {")
+ pcmd(" PRE_READ(fhp_, fh_size_);")
+ pcmd("}")
+ }
+ } else if (syscall == "__fhstatvfs140") {
+ if (mode == "pre") {
+ pcmd("if (fhp_) {")
+ pcmd(" PRE_READ(fhp_, fh_size_);")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_50___fhstat40") {
+ if (mode == "pre") {
+ pcmd("if (fhp_) {")
+ pcmd(" PRE_READ(fhp_, fh_size_);")
+ pcmd("}")
+ }
+ } else if (syscall == "aio_cancel") {
+ if (mode == "pre") {
+ pcmd("if (aiocbp_) {")
+ pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));")
+ pcmd("}")
+ }
+ } else if (syscall == "aio_error") {
+ if (mode == "pre") {
+ pcmd("if (aiocbp_) {")
+ pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));")
+ pcmd("}")
+ }
+ } else if (syscall == "aio_fsync") {
+ if (mode == "pre") {
+ pcmd("if (aiocbp_) {")
+ pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));")
+ pcmd("}")
+ }
+ } else if (syscall == "aio_read") {
+ if (mode == "pre") {
+ pcmd("if (aiocbp_) {")
+ pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));")
+ pcmd("}")
+ }
+ } else if (syscall == "aio_return") {
+ if (mode == "pre") {
+ pcmd("if (aiocbp_) {")
+ pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_50_aio_suspend") {
+ pcmd("/* TODO */")
+ } else if (syscall == "aio_write") {
+ if (mode == "pre") {
+ pcmd("if (aiocbp_) {")
+ pcmd(" PRE_READ(aiocbp_, sizeof(struct __sanitizer_aiocb));")
+ pcmd("}")
+ }
+ } else if (syscall == "lio_listio") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__mount50") {
+ if (mode == "pre") {
+ pcmd("const char *type = (const char *)type_;")
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (type) {")
+ pcmd(" PRE_READ(type, __sanitizer::internal_strlen(type) + 1);")
+ pcmd("}")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (data_) {")
+ pcmd(" PRE_READ(data_, data_len_);")
+ pcmd("}")
+ } else {
+ pcmd("const char *type = (const char *)type_;")
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (type) {")
+ pcmd(" POST_READ(type, __sanitizer::internal_strlen(type) + 1);")
+ pcmd("}")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (data_) {")
+ pcmd(" POST_READ(data_, data_len_);")
+ pcmd("}")
+ }
+ } else if (syscall == "mremap") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "pset_create") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "pset_destroy") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "pset_assign") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "_pset_bind") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__posix_fadvise50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__select50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__gettimeofday50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__settimeofday50") {
+ if (mode == "pre") {
+ pcmd("if (tv_) {")
+ pcmd(" PRE_READ(tv_, timeval_sz);")
+ pcmd("}")
+ pcmd("if (tzp_) {")
+ pcmd(" PRE_READ(tzp_, struct_timezone_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__utimes50") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;")
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (tptr) {")
+ pcmd(" PRE_READ(tptr[0], struct_timespec_sz);")
+ pcmd(" PRE_READ(tptr[1], struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__adjtime50") {
+ if (mode == "pre") {
+ pcmd("if (delta_) {")
+ pcmd(" PRE_READ(delta_, timeval_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__lfs_segwait50") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__futimes50") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;")
+ pcmd("if (tptr) {")
+ pcmd(" PRE_READ(tptr[0], struct_timespec_sz);")
+ pcmd(" PRE_READ(tptr[1], struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__lutimes50") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;")
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (tptr) {")
+ pcmd(" PRE_READ(tptr[0], struct_timespec_sz);")
+ pcmd(" PRE_READ(tptr[1], struct_timespec_sz);")
+ pcmd("}")
+ } else {
+ pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;")
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (tptr) {")
+ pcmd(" POST_READ(tptr[0], struct_timespec_sz);")
+ pcmd(" POST_READ(tptr[1], struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__setitimer50") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_itimerval *itv = (struct __sanitizer_itimerval *)itv_;")
+ pcmd("if (itv) {")
+ pcmd(" PRE_READ(&itv->it_interval.tv_sec, sizeof(__sanitizer_time_t));")
+ pcmd(" PRE_READ(&itv->it_interval.tv_usec, sizeof(__sanitizer_suseconds_t));")
+ pcmd(" PRE_READ(&itv->it_value.tv_sec, sizeof(__sanitizer_time_t));")
+ pcmd(" PRE_READ(&itv->it_value.tv_usec, sizeof(__sanitizer_suseconds_t));")
+ pcmd("}")
+ }
+ } else if (syscall == "__getitimer50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__clock_gettime50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__clock_settime50") {
+ if (mode == "pre") {
+ pcmd("if (tp_) {")
+ pcmd(" PRE_READ(tp_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__clock_getres50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__nanosleep50") {
+ if (mode == "pre") {
+ pcmd("if (rqtp_) {")
+ pcmd(" PRE_READ(rqtp_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "____sigtimedwait50") {
+ if (mode == "pre") {
+ pcmd("if (set_) {")
+ pcmd(" PRE_READ(set_, sizeof(__sanitizer_sigset_t));")
+ pcmd("}")
+ pcmd("if (timeout_) {")
+ pcmd(" PRE_READ(timeout_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__mq_timedsend50") {
+ if (mode == "pre") {
+ pcmd("if (msg_ptr_) {")
+ pcmd(" PRE_READ(msg_ptr_, msg_len_);")
+ pcmd("}")
+ pcmd("if (abs_timeout_) {")
+ pcmd(" PRE_READ(abs_timeout_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__mq_timedreceive50") {
+ if (mode == "pre") {
+ pcmd("if (msg_ptr_) {")
+ pcmd(" PRE_READ(msg_ptr_, msg_len_);")
+ pcmd("}")
+ pcmd("if (abs_timeout_) {")
+ pcmd(" PRE_READ(abs_timeout_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "compat_60__lwp_park") {
+ pcmd("/* TODO */")
+ } else if (syscall == "__kevent50") {
+ if (mode == "pre") {
+ pcmd("if (changelist_) {")
+ pcmd(" PRE_READ(changelist_, nchanges_ * struct_kevent_sz);")
+ pcmd("}")
+ pcmd("if (timeout_) {")
+ pcmd(" PRE_READ(timeout_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__pselect50") {
+ if (mode == "pre") {
+ pcmd("if (ts_) {")
+ pcmd(" PRE_READ(ts_, struct_timespec_sz);")
+ pcmd("}")
+ pcmd("if (mask_) {")
+ pcmd(" PRE_READ(mask_, sizeof(struct __sanitizer_sigset_t));")
+ pcmd("}")
+ }
+ } else if (syscall == "__pollts50") {
+ if (mode == "pre") {
+ pcmd("if (ts_) {")
+ pcmd(" PRE_READ(ts_, struct_timespec_sz);")
+ pcmd("}")
+ pcmd("if (mask_) {")
+ pcmd(" PRE_READ(mask_, sizeof(struct __sanitizer_sigset_t));")
+ pcmd("}")
+ }
+ } else if (syscall == "__aio_suspend50") {
+ if (mode == "pre") {
+ pcmd("int i;")
+ pcmd("const struct aiocb * const *list = (const struct aiocb * const *)list_;")
+ pcmd("if (list) {")
+ pcmd(" for (i = 0; i < nent_; i++) {")
+ pcmd(" if (list[i]) {")
+ pcmd(" PRE_READ(list[i], sizeof(struct __sanitizer_aiocb));")
+ pcmd(" }")
+ pcmd(" }")
+ pcmd("}")
+ pcmd("if (timeout_) {")
+ pcmd(" PRE_READ(timeout_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "__stat50") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "__fstat50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__lstat50") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "____semctl50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__shmctl50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__msgctl50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__getrusage50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__timer_settime50") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_itimerval *value = (struct __sanitizer_itimerval *)value_;")
+ pcmd("if (value) {")
+ pcmd(" PRE_READ(&value->it_interval.tv_sec, sizeof(__sanitizer_time_t));")
+ pcmd(" PRE_READ(&value->it_interval.tv_usec, sizeof(__sanitizer_suseconds_t));")
+ pcmd(" PRE_READ(&value->it_value.tv_sec, sizeof(__sanitizer_time_t));")
+ pcmd(" PRE_READ(&value->it_value.tv_usec, sizeof(__sanitizer_suseconds_t));")
+ pcmd("}")
+ } else {
+ pcmd("struct __sanitizer_itimerval *value = (struct __sanitizer_itimerval *)value_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (value) {")
+ pcmd(" POST_READ(&value->it_interval.tv_sec, sizeof(__sanitizer_time_t));")
+ pcmd(" POST_READ(&value->it_interval.tv_usec, sizeof(__sanitizer_suseconds_t));")
+ pcmd(" POST_READ(&value->it_value.tv_sec, sizeof(__sanitizer_time_t));")
+ pcmd(" POST_READ(&value->it_value.tv_usec, sizeof(__sanitizer_suseconds_t));")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "__timer_gettime50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__ntp_gettime50") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__wait450") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "__mknod50") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "__fhstat50") {
+ if (mode == "pre") {
+ pcmd("if (fhp_) {")
+ pcmd(" PRE_READ(fhp_, fh_size_);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" if (fhp_) {")
+ pcmd(" POST_READ(fhp_, fh_size_);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "pipe2") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "dup3") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "kqueue1") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "paccept") {
+ if (mode == "pre") {
+ pcmd("if (mask_) {")
+ pcmd(" PRE_READ(mask_, sizeof(__sanitizer_sigset_t));")
+ pcmd("}")
+ } else {
+ pcmd("if (res >= 0) {")
+ pcmd(" if (mask_) {")
+ pcmd(" PRE_READ(mask_, sizeof(__sanitizer_sigset_t));")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "linkat") {
+ if (mode == "pre") {
+ pcmd("const char *name1 = (const char *)name1_;")
+ pcmd("const char *name2 = (const char *)name2_;")
+ pcmd("if (name1) {")
+ pcmd(" PRE_READ(name1, __sanitizer::internal_strlen(name1) + 1);")
+ pcmd("}")
+ pcmd("if (name2) {")
+ pcmd(" PRE_READ(name2, __sanitizer::internal_strlen(name2) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *name1 = (const char *)name1_;")
+ pcmd("const char *name2 = (const char *)name2_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (name1) {")
+ pcmd(" POST_READ(name1, __sanitizer::internal_strlen(name1) + 1);")
+ pcmd(" }")
+ pcmd(" if (name2) {")
+ pcmd(" POST_READ(name2, __sanitizer::internal_strlen(name2) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "renameat") {
+ if (mode == "pre") {
+ pcmd("const char *from = (const char *)from_;")
+ pcmd("const char *to = (const char *)to_;")
+ pcmd("if (from) {")
+ pcmd(" PRE_READ(from, __sanitizer::internal_strlen(from) + 1);")
+ pcmd("}")
+ pcmd("if (to) {")
+ pcmd(" PRE_READ(to, __sanitizer::internal_strlen(to) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *from = (const char *)from_;")
+ pcmd("const char *to = (const char *)to_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (from) {")
+ pcmd(" POST_READ(from, __sanitizer::internal_strlen(from) + 1);")
+ pcmd(" }")
+ pcmd(" if (to) {")
+ pcmd(" POST_READ(to, __sanitizer::internal_strlen(to) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "mkfifoat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "mknodat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "mkdirat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "faccessat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "fchmodat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "fchownat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "fexecve") {
+ pcmd("/* TODO */")
+ } else if (syscall == "fstatat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ }
+ } else if (syscall == "utimensat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ pcmd("if (tptr_) {")
+ pcmd(" PRE_READ(tptr_, struct_timespec_sz);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res > 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd(" if (tptr_) {")
+ pcmd(" POST_READ(tptr_, struct_timespec_sz);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "openat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res > 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "readlinkat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res > 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "symlinkat") {
+ if (mode == "pre") {
+ pcmd("const char *path1 = (const char *)path1_;")
+ pcmd("const char *path2 = (const char *)path2_;")
+ pcmd("if (path1) {")
+ pcmd(" PRE_READ(path1, __sanitizer::internal_strlen(path1) + 1);")
+ pcmd("}")
+ pcmd("if (path2) {")
+ pcmd(" PRE_READ(path2, __sanitizer::internal_strlen(path2) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path1 = (const char *)path1_;")
+ pcmd("const char *path2 = (const char *)path2_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path1) {")
+ pcmd(" POST_READ(path1, __sanitizer::internal_strlen(path1) + 1);")
+ pcmd(" }")
+ pcmd(" if (path2) {")
+ pcmd(" POST_READ(path2, __sanitizer::internal_strlen(path2) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "unlinkat") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "futimens") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;")
+ pcmd("if (tptr) {")
+ pcmd(" PRE_READ(tptr[0], struct_timespec_sz);")
+ pcmd(" PRE_READ(tptr[1], struct_timespec_sz);")
+ pcmd("}")
+ } else {
+ pcmd("struct __sanitizer_timespec **tptr = (struct __sanitizer_timespec **)tptr_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (tptr) {")
+ pcmd(" POST_READ(tptr[0], struct_timespec_sz);")
+ pcmd(" POST_READ(tptr[1], struct_timespec_sz);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "__quotactl") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (res == 0) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "posix_spawn") {
+ if (mode == "pre") {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (path) {")
+ pcmd(" PRE_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd("}")
+ } else {
+ pcmd("const char *path = (const char *)path_;")
+ pcmd("if (pid_) {")
+ pcmd(" if (path) {")
+ pcmd(" POST_READ(path, __sanitizer::internal_strlen(path) + 1);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "recvmmsg") {
+ if (mode == "pre") {
+ pcmd("if (timeout_) {")
+ pcmd(" PRE_READ(timeout_, struct_timespec_sz);")
+ pcmd("}")
+ } else {
+ pcmd("if (res >= 0) {")
+ pcmd(" if (timeout_) {")
+ pcmd(" POST_READ(timeout_, struct_timespec_sz);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "sendmmsg") {
+ if (mode == "pre") {
+ pcmd("struct __sanitizer_mmsghdr *mmsg = (struct __sanitizer_mmsghdr *)mmsg_;")
+ pcmd("unsigned int vlen = (vlen_ > 1024 ? 1024 : vlen_);")
+ pcmd("if (mmsg) {")
+ pcmd(" PRE_READ(mmsg, sizeof(struct __sanitizer_mmsghdr) * vlen);")
+ pcmd("}")
+ } else {
+ pcmd("struct __sanitizer_mmsghdr *mmsg = (struct __sanitizer_mmsghdr *)mmsg_;")
+ pcmd("unsigned int vlen = (vlen_ > 1024 ? 1024 : vlen_);")
+ pcmd("if (res >= 0) {")
+ pcmd(" if (mmsg) {")
+ pcmd(" POST_READ(mmsg, sizeof(struct __sanitizer_mmsghdr) * vlen);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "clock_nanosleep") {
+ if (mode == "pre") {
+ pcmd("if (rqtp_) {")
+ pcmd(" PRE_READ(rqtp_, struct_timespec_sz);")
+ pcmd("}")
+ } else {
+ pcmd("if (rqtp_) {")
+ pcmd(" POST_READ(rqtp_, struct_timespec_sz);")
+ pcmd("}")
+ }
+ } else if (syscall == "___lwp_park60") {
+ if (mode == "pre") {
+ pcmd("if (ts_) {")
+ pcmd(" PRE_READ(ts_, struct_timespec_sz);")
+ pcmd("}")
+ } else {
+ pcmd("if (res == 0) {")
+ pcmd(" if (ts_) {")
+ pcmd(" POST_READ(ts_, struct_timespec_sz);")
+ pcmd(" }")
+ pcmd("}")
+ }
+ } else if (syscall == "posix_fallocate") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "fdiscard") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "wait6") {
+ pcmd("/* Nothing to do */")
+ } else if (syscall == "clock_getcpuclockid2") {
+ pcmd("/* Nothing to do */")
+ } else {
+ print "Unrecognized syscall: " syscall
+ abnormal_exit = 1
+ exit 1
+ }
+}