From: Tom Hughes Date: Fri, 20 Apr 2012 14:07:34 +0000 (+0000) Subject: Implement accept4 on ARM systems. X-Git-Tag: svn/VALGRIND_3_8_0~351 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd01ed52d73517199c80d37c864c263baacefb00;p=thirdparty%2Fvalgrind.git Implement accept4 on ARM systems. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12515 --- diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index 2c04f71f39..e01bbaf57a 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -307,6 +307,7 @@ DECL_TEMPLATE(arm_linux, sys_setsockopt); 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 @@ PRE(sys_socketcall) 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 @@ POST(sys_socketcall) 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 @@ POST(sys_accept) 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 @@ static SyscallTableEntry syscall_main_table[] = { 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 };