|
From: <sv...@va...> - 2012-04-20 14:07:50
|
tom 2012-04-20 15:07:34 +0100 (Fri, 20 Apr 2012)
New Revision: 12515
Log:
Implement accept4 on ARM systems.
Modified files:
trunk/coregrind/m_syswrap/syswrap-arm-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-arm-linux.c (+30 -1)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-arm-linux.c 2012-04-20 11:43:08 +01:00 (rev 12514)
+++ trunk/coregrind/m_syswrap/syswrap-arm-linux.c 2012-04-20 15:07:34 +01:00 (rev 12515)
@@ -307,6 +307,7 @@
DECL_TEMPLATE(arm_linux, sys_getsockopt);
DECL_TEMPLATE(arm_linux, sys_connect);
DECL_TEMPLATE(arm_linux, sys_accept);
+DECL_TEMPLATE(arm_linux, sys_accept4);
DECL_TEMPLATE(arm_linux, sys_sendto);
DECL_TEMPLATE(arm_linux, sys_recvfrom);
//XXX: Semaphore code ripped from AMD64.
@@ -393,6 +394,13 @@
break;
}
+ case VKI_SYS_ACCEPT4: {
+ /*int accept(int s, struct sockaddr *add, int *addrlen, int flags)*/
+ PRE_MEM_READ( "socketcall.accept4(args)", ARG2, 4*sizeof(Addr) );
+ ML_(generic_PRE_sys_accept)( tid, ARG2_0, ARG2_1, ARG2_2 );
+ break;
+ }
+
case VKI_SYS_SENDTO:
/* int sendto(int s, const void *msg, int len,
unsigned int flags,
@@ -538,7 +546,9 @@
break;
case VKI_SYS_ACCEPT:
+ case VKI_SYS_ACCEPT4:
/* int accept(int s, struct sockaddr *addr, int *addrlen); */
+ /* int accept4(int s, struct sockaddr *addr, int *addrlen, int flags); */
r = ML_(generic_POST_sys_accept)( tid, VG_(mk_SysRes_Success)(RES),
ARG2_0, ARG2_1, ARG2_2 );
SET_STATUS_from_SysRes(r);
@@ -668,6 +678,23 @@
SET_STATUS_from_SysRes(r);
}
+PRE(sys_accept4)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_accept4 ( %ld, %#lx, %ld, %ld )",ARG1,ARG2,ARG3,ARG4);
+ PRE_REG_READ4(long, "accept4",
+ int, s, struct sockaddr *, addr, int, *addrlen, int, flags);
+ ML_(generic_PRE_sys_accept)(tid, ARG1,ARG2,ARG3);
+}
+POST(sys_accept4)
+{
+ SysRes r;
+ vg_assert(SUCCESS);
+ r = ML_(generic_POST_sys_accept)(tid, VG_(mk_SysRes_Success)(RES),
+ ARG1,ARG2,ARG3);
+ SET_STATUS_from_SysRes(r);
+}
+
PRE(sys_sendto)
{
*flags |= SfMayBlock;
@@ -1816,7 +1843,9 @@
LINXY(__NR_epoll_create1, sys_epoll_create1), // 357
LINXY(__NR_pipe2, sys_pipe2), // 359
- LINXY(__NR_inotify_init1, sys_inotify_init1) // 360
+ LINXY(__NR_inotify_init1, sys_inotify_init1), // 360
+
+ PLAXY(__NR_accept4, sys_accept4) // 366
};
|