]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support for accept4 system call based on patch
authorTom Hughes <tom@compton.nu>
Wed, 25 Nov 2009 12:05:41 +0000 (12:05 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 25 Nov 2009 12:05:41 +0000 (12:05 +0000)
from Dodji Seketeli. Part fix for #215973.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10955

coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c
include/vki/vki-linux.h
include/vki/vki-scnums-amd64-linux.h

index 89eab0d558e1897eafdeb761c9f6d2fc40a98dca..79aa230631a116b4986601062b762c5144519589 100644 (file)
@@ -349,6 +349,7 @@ DECL_TEMPLATE(amd64_linux, sys_setsockopt);
 DECL_TEMPLATE(amd64_linux, sys_getsockopt);
 DECL_TEMPLATE(amd64_linux, sys_connect);
 DECL_TEMPLATE(amd64_linux, sys_accept);
+DECL_TEMPLATE(amd64_linux, sys_accept4);
 DECL_TEMPLATE(amd64_linux, sys_sendto);
 DECL_TEMPLATE(amd64_linux, sys_recvfrom);
 DECL_TEMPLATE(amd64_linux, sys_sendmsg);
@@ -684,6 +685,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;
@@ -1368,7 +1386,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
    LINX_(__NR_fallocate,         sys_fallocate),        // 285
    LINXY(__NR_timerfd_settime,   sys_timerfd_settime),  // 286
    LINXY(__NR_timerfd_gettime,   sys_timerfd_gettime),  // 287
-   //   (__NR_paccept,           sys_ni_syscall)        // 288
+   PLAXY(__NR_accept4,           sys_accept4),          // 288
    LINXY(__NR_signalfd4,         sys_signalfd4),        // 289
 
    LINX_(__NR_eventfd2,          sys_eventfd2),         // 290
index fdc8311244b8983201475c1f5f1d851da4ad64ba..09cd70e820a4fc154623f1256b53ee7a36a7df32 100644 (file)
@@ -457,6 +457,13 @@ PRE(sys_socketcall)
       break;
    }
 
+   case VKI_SYS_ACCEPT4: {
+     /* int accept(int s, struct sockaddr *addr, int *addrlen, int args); */
+      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,
@@ -602,6 +609,7 @@ POST(sys_socketcall)
     break;
 
   case VKI_SYS_ACCEPT:
+  case VKI_SYS_ACCEPT4:
     /* int accept(int s, struct sockaddr *addr, int *addrlen); */
     r = ML_(generic_POST_sys_accept)( tid, VG_(mk_SysRes_Success)(RES),
                                      ARG2_0, ARG2_1, ARG2_2 );
index 6c3cb1b20b958ba0a50b544aaea244ca401b6486..eb7943678e969823e919e4aaa88a9f4c827ab1cc 100644 (file)
@@ -484,6 +484,13 @@ PRE(sys_socketcall)
       break;
    }
 
+   case VKI_SYS_ACCEPT4: {
+     /* int accept4(int s, struct sockaddr *addr, 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,
@@ -629,7 +636,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);
index 1f91b5040958176efa2db6cc2c2b998919937659..1d3b436fb410de26f9946a2cd3e1c54b703b2422 100644 (file)
@@ -1475,6 +1475,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, 
@@ -1620,7 +1627,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);
index 20b23d73d082ecd4a9292cc6bb394e5aadeb2910..073227152f884987d07dc4c06760504350c120ce 100644 (file)
@@ -525,6 +525,7 @@ typedef struct vki_sigevent {
 #define VKI_SYS_GETSOCKOPT     15      /* sys_getsockopt(2)            */
 #define VKI_SYS_SENDMSG                16      /* sys_sendmsg(2)               */
 #define VKI_SYS_RECVMSG                17      /* sys_recvmsg(2)               */
+#define VKI_SYS_ACCEPT4                18      /* sys_accept4(2)               */
 
 enum vki_sock_type {
        VKI_SOCK_STREAM = 1,
index 1a2125f10449b45ba678e233615f75f17bbc14d2..d2fcc3bc0fa5804b6d5def2a2488f23d5594292e 100644 (file)
 #define __NR_fallocate         285
 #define __NR_timerfd_settime   286
 #define __NR_timerfd_gettime   287
-#define __NR_paccept            288
+#define __NR_accept4            288
 #define __NR_signalfd4          289
 #define __NR_eventfd2           290
 #define __NR_epoll_create1      291