]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement the waitid system call. Fixes bug #110202.
authorTom Hughes <tom@compton.nu>
Fri, 5 Aug 2005 07:32:04 +0000 (07:32 +0000)
committerTom Hughes <tom@compton.nu>
Fri, 5 Aug 2005 07:32:04 +0000 (07:32 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4329

coregrind/m_syswrap/priv_syswrap-generic.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-generic.c
coregrind/m_syswrap/syswrap-x86-linux.c

index 6d31ad7ea716094bf1af6a53eba9214e07bf4580..b91f59a8451b57befecb0e81a5dac951cc3d5c06 100644 (file)
@@ -146,6 +146,7 @@ DECL_TEMPLATE(generic, sys_setuid);
 DECL_TEMPLATE(generic, sys_gettimeofday);
 DECL_TEMPLATE(generic, sys_madvise);
 DECL_TEMPLATE(generic, sys_sigpending);
+DECL_TEMPLATE(generic, sys_waitid);
 
 // These ones aren't POSIX, but are in some standard and look reasonably
 // generic,  and are the same for all architectures under Linux.
index 238b90c920e6d6277c3ecfaa34ae93ee3f53009a..6d20535e58735243f81e37c469310a7702270795 100644 (file)
@@ -1473,7 +1473,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
    GENX_(__NR_mq_notify,         sys_mq_notify),      // 244 
    GENXY(__NR_mq_getsetattr,     sys_mq_getsetattr),  // 245 
    //   (__NR_kexec_load,        sys_ni_syscall),     // 246 
-   //   (__NR_waitid,            sys_waitid),         // 247 
+   GENXY(__NR_waitid,            sys_waitid),         // 247 
 };
 
 const UInt ML_(syscall_table_size) = 
index a5cddcecce8b6022ca8c6f21e1adef4a3ed5f15e..e4e93915f252fecf89b192b9e31e47ea15418a37 100644 (file)
@@ -5735,6 +5735,24 @@ POST(sys_clock_nanosleep)
       POST_MEM_WRITE( ARG4, sizeof(struct vki_timespec) );
 }
 
+PRE(sys_waitid)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_waitid( %d, %d, %p, %d, %p )", ARG1,ARG2,ARG3,ARG4,ARG5);
+   PRE_REG_READ5(int32_t, "sys_waitid",
+                 int, which, vki_pid_t, pid, struct vki_siginfo *, infop,
+                 int, options, struct vki_rusage *, ru);
+   PRE_MEM_WRITE( "waitid(infop)", ARG3, sizeof(struct vki_siginfo) );
+   if (ARG5 != 0)
+      PRE_MEM_WRITE( "waitid(ru)", ARG5, sizeof(struct vki_rusage) );
+}
+POST(sys_waitid)
+{
+   POST_MEM_WRITE( ARG3, sizeof(struct vki_siginfo) );
+   if (ARG5 != 0)
+      POST_MEM_WRITE( ARG5, sizeof(struct vki_rusage) );
+}
+
 #undef PRE
 #undef POST
 
index f455e7becd5a279f1af009e64f3faa1cee562c9e..d1dc1ec38c1acb2b09162a828cbad5bd452378ea 100644 (file)
@@ -2277,7 +2277,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
    GENX_(__NR_mq_notify,         sys_mq_notify),      // (mq_open+4)
    GENXY(__NR_mq_getsetattr,     sys_mq_getsetattr),  // (mq_open+5)
    GENX_(__NR_sys_kexec_load,    sys_ni_syscall),     // 283
-//   GENXY(__NR_waitid,            sys_waitid),         // 284
+   GENXY(__NR_waitid,            sys_waitid),         // 284
 
    GENX_(285,                    sys_ni_syscall),     // 285
 //   LINX_(__NR_add_key,           sys_add_key),        // 286