[compiler-rt] r179592 - [sanitizer] Implement wait4 and waitpid syscall hooks.
Kostya Serebryany
kcc at google.com
Thu Apr 18 09:16:35 PDT 2013
Are tests possible here?
On Tue, Apr 16, 2013 at 6:06 AM, Evgeniy Stepanov <eugeni.stepanov at gmail.com
> wrote:
> Author: eugenis
> Date: Tue Apr 16 08:06:20 2013
> New Revision: 179592
>
> URL: http://llvm.org/viewvc/llvm-project?rev=179592&view=rev
> Log:
> [sanitizer] Implement wait4 and waitpid syscall hooks.
>
> Modified:
> compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
>
> Modified: compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h?rev=179592&r1=179591&r2=179592&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h (original)
> +++ compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h Tue Apr 16
> 08:06:20 2013
> @@ -29,11 +29,15 @@ void __sanitizer_syscall_pre_rt_sigpendi
> void __sanitizer_syscall_pre_getdents(int fd, void *dirp, int count);
> void __sanitizer_syscall_pre_getdents64(int fd, void *dirp, int count);
> void __sanitizer_syscall_pre_recvmsg(int sockfd, void *msg, int flags);
> +void __sanitizer_syscall_pre_wait4(int pid, int* status, int options,
> void* r);
> +void __sanitizer_syscall_pre_waitpid(int pid, int *status, int options);
>
> void __sanitizer_syscall_post_rt_sigpending(long res, void *p, size_t s);
> void __sanitizer_syscall_post_getdents(long res, int fd, void *dirp, int
> count);
> void __sanitizer_syscall_post_getdents64(long res, int fd, void *dirp,
> int count);
> void __sanitizer_syscall_post_recvmsg(long res, int sockfd, void *msg,
> int flags);
> +void __sanitizer_syscall_post_wait4(long res, int pid, int* status, int
> options, void* r);
> +void __sanitizer_syscall_post_waitpid(long res, int pid, int *status, int
> options);
>
> // And now a few syscalls we don't handle yet.
>
> @@ -408,11 +412,10 @@ void __sanitizer_syscall_post_recvmsg(lo
> #define __sanitizer_syscall_pre_vm86old(...)
> #define __sanitizer_syscall_pre_vmsplice(...)
> #define __sanitizer_syscall_pre_vserver(...)
> -#define __sanitizer_syscall_pre_wait4(...)
> #define __sanitizer_syscall_pre_waitid(...)
> -#define __sanitizer_syscall_pre_waitpid(...)
> #define __sanitizer_syscall_pre_write(...)
> #define __sanitizer_syscall_pre_writev(...)
> +
> #define __sanitizer_syscall_post_accept4(res, ...)
> #define __sanitizer_syscall_post_accept(res, ...)
> #define __sanitizer_syscall_post_access(res, ...)
> @@ -784,9 +787,7 @@ void __sanitizer_syscall_post_recvmsg(lo
> #define __sanitizer_syscall_post_vm86(res, ...)
> #define __sanitizer_syscall_post_vmsplice(res, ...)
> #define __sanitizer_syscall_post_vserver(res, ...)
> -#define __sanitizer_syscall_post_wait4(res, ...)
> #define __sanitizer_syscall_post_waitid(res, ...)
> -#define __sanitizer_syscall_post_waitpid(res, ...)
> #define __sanitizer_syscall_post_write(res, ...)
> #define __sanitizer_syscall_post_writev(res, ...)
>
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc?rev=179592&r1=179591&r2=179592&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
> (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
> Tue Apr 16 08:06:20 2013
> @@ -56,6 +56,16 @@ struct sanitizer_kernel_msghdr {
> unsigned msg_flags;
> };
>
> +struct sanitizer_kernel_timeval {
> + long tv_sec;
> + long tv_usec;
> +};
> +
> +struct sanitizer_kernel_rusage {
> + struct sanitizer_kernel_timeval ru_timeval[2];
> + long ru_long[14];
> +};
> +
> PRE_SYSCALL(recvmsg)(int sockfd, struct sanitizer_kernel_msghdr *msg,
> int flags) {
> PRE_READ(msg, sizeof(*msg));
> @@ -92,6 +102,34 @@ POST_SYSCALL(getdents64)(long res, int f
> POST_WRITE(dirp, res);
> }
>
> +PRE_SYSCALL(wait4)(int pid, int *status, int options,
> + struct sanitizer_kernel_rusage *r) {
> + if (status)
> + PRE_WRITE(status, sizeof(*status));
> + if (r)
> + PRE_WRITE(r, sizeof(*r));
> +}
> +
> +POST_SYSCALL(wait4)(long res, int pid, int *status, int options,
> + struct sanitizer_kernel_rusage *r) {
> + if (res > 0) {
> + if (status)
> + POST_WRITE(status, sizeof(*status));
> + if (r)
> + POST_WRITE(r, sizeof(*r));
> + }
> +}
> +
> +PRE_SYSCALL(waitpid)(int pid, int *status, int options) {
> + if (status)
> + PRE_WRITE(status, sizeof(*status));
> +}
> +
> +POST_SYSCALL(waitpid)(long res, int pid, int *status, int options) {
> + if (res > 0 && status)
> + POST_WRITE(status, sizeof(*status));
> +}
> +
> } // extern "C"
>
> #undef PRE_SYSCALL
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130418/6e4fa5e5/attachment.html>
More information about the llvm-commits
mailing list