]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement accept4 on ARM systems.
authorTom Hughes <tom@compton.nu>
Fri, 20 Apr 2012 14:07:34 +0000 (14:07 +0000)
committerTom Hughes <tom@compton.nu>
Fri, 20 Apr 2012 14:07:34 +0000 (14:07 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12515

coregrind/m_syswrap/syswrap-arm-linux.c

index 2c04f71f399a86e6d707fdbc8995ac8b84f4c5be..e01bbaf57a163fd2524293d6ee0bb380bc5eb100 100644 (file)
@@ -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
 };