|
From: <sv...@va...> - 2012-02-10 11:52:40
|
Author: tom
Date: 2012-02-10 11:48:01 +0000 (Fri, 10 Feb 2012)
New Revision: 12377
Log:
It turns out sendmmsg also updates the msg_len fields.
Modified:
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2012-02-10 11:30:09 UTC (rev 12376)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2012-02-10 11:48:01 UTC (rev 12377)
@@ -1421,7 +1421,7 @@
// 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
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2012-02-10 11:30:09 UTC (rev 12376)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2012-02-10 11:48:01 UTC (rev 12377)
@@ -3554,9 +3554,22 @@
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) );
+ }
+ }
+}
+
PRE(sys_recvmmsg)
{
struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)ARG2;
@@ -3570,6 +3583,8 @@
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) );
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2012-02-10 11:30:09 UTC (rev 12376)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2012-02-10 11:48:01 UTC (rev 12377)
@@ -2229,7 +2229,7 @@
// 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
|