// LINX_(__NR_clock_adjtime, sys_ni_syscall), // 305
// LINX_(__NR_syncfs, sys_ni_syscall), // 306
- LINX_(__NR_sendmmsg, sys_sendmmsg), // 307
+ LINXY(__NR_sendmmsg, sys_sendmmsg), // 307
// LINX_(__NR_setns, sys_ni_syscall), // 308
LINXY(__NR_getcpu, sys_getcpu), // 309
for (i = 0; i < ARG3; i++) {
VG_(sprintf)(name, "mmsg[%u]", i);
ML_(generic_PRE_sys_sendmsg)(tid, name, &mmsg[i].msg_hdr);
+ VG_(sprintf)(name, "sendmmsg(mmsg[%u].msg_len)", i);
+ PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) );
+ }
+}
+
+POST(sys_sendmmsg)
+{
+ if (RES > 0) {
+ struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)ARG2;
+ UInt i;
+ for (i = 0; i < RES; i++) {
+ POST_MEM_WRITE( (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) );
+ }
}
}
for (i = 0; i < ARG3; i++) {
VG_(sprintf)(name, "mmsg[%u]", i);
ML_(generic_PRE_sys_recvmsg)(tid, name, &mmsg[i].msg_hdr);
+ VG_(sprintf)(name, "sendmmsg(mmsg[%u].msg_len)", i);
+ PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) );
}
if (ARG5)
PRE_MEM_READ( "recvmmsg(timeout)", ARG5, sizeof(struct vki_timespec) );
// LINX_(__NR_clock_adjtime, sys_ni_syscall), // 343
// LINX_(__NR_syncfs, sys_ni_syscall), // 344
- LINX_(__NR_sendmmsg, sys_sendmmsg), // 345
+ LINXY(__NR_sendmmsg, sys_sendmmsg), // 345
// LINX_(__NR_setns, sys_ni_syscall), // 346
LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 347
LINX_(__NR_process_vm_writev, sys_process_vm_writev) // 348