From ae2be2c202196c260e5cf3db4c6ba91e410cca71 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski Date: Thu, 15 Feb 2018 15:15:45 +0000 Subject: 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 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@325248 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/generate_netbsd_syscalls.awk | 2584 +++++++++++++++++++++++++++++++++++- 1 file changed, 2581 insertions(+), 3 deletions(-) (limited to 'utils') 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 + } +} -- cgit v1.2.3