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.
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) =
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
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