<div dir="ltr">Are tests possible here? </div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Apr 16, 2013 at 6:06 AM, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: eugenis<br>
Date: Tue Apr 16 08:06:20 2013<br>
New Revision: 179592<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=179592&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=179592&view=rev</a><br>
Log:<br>
[sanitizer] Implement wait4 and waitpid syscall hooks.<br>
<br>
Modified:<br>
    compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc<br>
<br>
Modified: compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h?rev=179592&r1=179591&r2=179592&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h?rev=179592&r1=179591&r2=179592&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h (original)<br>
+++ compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h Tue Apr 16 08:06:20 2013<br>
@@ -29,11 +29,15 @@ void __sanitizer_syscall_pre_rt_sigpendi<br>
 void __sanitizer_syscall_pre_getdents(int fd, void *dirp, int count);<br>
 void __sanitizer_syscall_pre_getdents64(int fd, void *dirp, int count);<br>
 void __sanitizer_syscall_pre_recvmsg(int sockfd, void *msg, int flags);<br>
+void __sanitizer_syscall_pre_wait4(int pid, int* status, int options, void* r);<br>
+void __sanitizer_syscall_pre_waitpid(int pid, int *status, int options);<br>
<br>
 void __sanitizer_syscall_post_rt_sigpending(long res, void *p, size_t s);<br>
 void __sanitizer_syscall_post_getdents(long res, int fd, void *dirp, int count);<br>
 void __sanitizer_syscall_post_getdents64(long res, int fd, void *dirp, int count);<br>
 void __sanitizer_syscall_post_recvmsg(long res, int sockfd, void *msg, int flags);<br>
+void __sanitizer_syscall_post_wait4(long res, int pid, int* status, int options, void* r);<br>
+void __sanitizer_syscall_post_waitpid(long res, int pid, int *status, int options);<br>
<br>
 // And now a few syscalls we don't handle yet.<br>
<br>
@@ -408,11 +412,10 @@ void __sanitizer_syscall_post_recvmsg(lo<br>
 #define __sanitizer_syscall_pre_vm86old(...)<br>
 #define __sanitizer_syscall_pre_vmsplice(...)<br>
 #define __sanitizer_syscall_pre_vserver(...)<br>
-#define __sanitizer_syscall_pre_wait4(...)<br>
 #define __sanitizer_syscall_pre_waitid(...)<br>
-#define __sanitizer_syscall_pre_waitpid(...)<br>
 #define __sanitizer_syscall_pre_write(...)<br>
 #define __sanitizer_syscall_pre_writev(...)<br>
+<br>
 #define __sanitizer_syscall_post_accept4(res, ...)<br>
 #define __sanitizer_syscall_post_accept(res, ...)<br>
 #define __sanitizer_syscall_post_access(res, ...)<br>
@@ -784,9 +787,7 @@ void __sanitizer_syscall_post_recvmsg(lo<br>
 #define __sanitizer_syscall_post_vm86(res, ...)<br>
 #define __sanitizer_syscall_post_vmsplice(res, ...)<br>
 #define __sanitizer_syscall_post_vserver(res, ...)<br>
-#define __sanitizer_syscall_post_wait4(res, ...)<br>
 #define __sanitizer_syscall_post_waitid(res, ...)<br>
-#define __sanitizer_syscall_post_waitpid(res, ...)<br>
 #define __sanitizer_syscall_post_write(res, ...)<br>
 #define __sanitizer_syscall_post_writev(res, ...)<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc?rev=179592&r1=179591&r2=179592&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc?rev=179592&r1=179591&r2=179592&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc Tue Apr 16 08:06:20 2013<br>
@@ -56,6 +56,16 @@ struct sanitizer_kernel_msghdr {<br>
   unsigned msg_flags;<br>
 };<br>
<br>
+struct sanitizer_kernel_timeval {<br>
+  long tv_sec;<br>
+  long tv_usec;<br>
+};<br>
+<br>
+struct sanitizer_kernel_rusage {<br>
+  struct sanitizer_kernel_timeval ru_timeval[2];<br>
+  long ru_long[14];<br>
+};<br>
+<br>
 PRE_SYSCALL(recvmsg)(int sockfd, struct sanitizer_kernel_msghdr *msg,<br>
                      int flags) {<br>
   PRE_READ(msg, sizeof(*msg));<br>
@@ -92,6 +102,34 @@ POST_SYSCALL(getdents64)(long res, int f<br>
     POST_WRITE(dirp, res);<br>
 }<br>
<br>
+PRE_SYSCALL(wait4)(int pid, int *status, int options,<br>
+                   struct sanitizer_kernel_rusage *r) {<br>
+  if (status)<br>
+    PRE_WRITE(status, sizeof(*status));<br>
+  if (r)<br>
+    PRE_WRITE(r, sizeof(*r));<br>
+}<br>
+<br>
+POST_SYSCALL(wait4)(long res, int pid, int *status, int options,<br>
+                    struct sanitizer_kernel_rusage *r) {<br>
+  if (res > 0) {<br>
+    if (status)<br>
+      POST_WRITE(status, sizeof(*status));<br>
+    if (r)<br>
+      POST_WRITE(r, sizeof(*r));<br>
+  }<br>
+}<br>
+<br>
+PRE_SYSCALL(waitpid)(int pid, int *status, int options) {<br>
+  if (status)<br>
+    PRE_WRITE(status, sizeof(*status));<br>
+}<br>
+<br>
+POST_SYSCALL(waitpid)(long res, int pid, int *status, int options) {<br>
+  if (res > 0 && status)<br>
+    POST_WRITE(status, sizeof(*status));<br>
+}<br>
+<br>
 }  // extern "C"<br>
<br>
 #undef PRE_SYSCALL<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>