]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
merge r8930 (Add signalfd4 support.)
authorJulian Seward <jseward@acm.org>
Mon, 26 Jan 2009 12:24:36 +0000 (12:24 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 26 Jan 2009 12:24:36 +0000 (12:24 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_4_BRANCH@9065

coregrind/m_syswrap/priv_syswrap-linux.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c

index cbfcd6cbe44631e46eb0d6923767a1d418915c99..3cd0ca2351f318f43d985bc08afed389e2229d78 100644 (file)
@@ -133,6 +133,7 @@ DECL_TEMPLATE(linux, sys_timerfd_gettime);
 DECL_TEMPLATE(linux, sys_timerfd_settime);
 
 DECL_TEMPLATE(linux, sys_signalfd);
+DECL_TEMPLATE(linux, sys_signalfd4);
 
 DECL_TEMPLATE(linux, sys_capget);
 DECL_TEMPLATE(linux, sys_capset);
index 936b9424b7f507d959591d21e78840b78d078cde..a82ad21b5f5a40e3cbfdfd490605dd783d052dc9 100644 (file)
@@ -1361,7 +1361,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
    LINXY(__NR_timerfd_settime,   sys_timerfd_settime),  // 286
    LINXY(__NR_timerfd_gettime,   sys_timerfd_gettime),  // 287
    //   (__NR_paccept,           sys_ni_syscall)        // 288
-   //   (__NR_signalfd4,         sys_ni_syscall)        // 289
+   LINXY(__NR_signalfd4,         sys_signalfd4),        // 289
 
    LINX_(__NR_eventfd2,          sys_eventfd2),         // 290
    //   (__NR_epoll_create1,     sys_ni_syscall)        // 291
index 2ae6ed52f94e4bd7e1f730a3b72f11f9ee814612..d4ca9b210997c94605d03cf5bca069d8cdc83158 100644 (file)
@@ -2431,7 +2431,7 @@ POST(sys_sigprocmask)
 
 PRE(sys_signalfd)
 {
-   PRINT("sys_signalfd ( %d, %#lx, %llu )", (Int)ARG1, ARG2, (ULong) ARG3);
+   PRINT("sys_signalfd ( %d, %#lx, %llu )", (Int)ARG1,ARG2,(ULong)ARG3);
    PRE_REG_READ3(long, "sys_signalfd",
                  int, fd, vki_sigset_t *, sigmask, vki_size_t, sigsetsize);
    PRE_MEM_READ( "signalfd(sigmask)", ARG2, sizeof(vki_sigset_t) );
@@ -2449,6 +2449,26 @@ POST(sys_signalfd)
    }
 }
 
+PRE(sys_signalfd4)
+{
+   PRINT("sys_signalfd4 ( %d, %#lx, %llu, %ld )", (Int)ARG1,ARG2,(ULong)ARG3,ARG4);
+   PRE_REG_READ4(long, "sys_signalfd4",
+                 int, fd, vki_sigset_t *, sigmask, vki_size_t, sigsetsize, int, flags);
+   PRE_MEM_READ( "signalfd(sigmask)", ARG2, sizeof(vki_sigset_t) );
+   if ((int)ARG1 != -1 && !ML_(fd_allowed)(ARG1, "signalfd", tid, False))
+      SET_STATUS_Failure( VKI_EBADF );
+}
+POST(sys_signalfd4)
+{
+   if (!ML_(fd_allowed)(RES, "signalfd4", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure( VKI_EMFILE );
+   } else {
+      if (VG_(clo_track_fds))
+         ML_(record_fd_open_nameless) (tid, RES);
+   }
+}
+
 
 /* ---------------------------------------------------------------------
    rt_sig* wrappers
index a8a10886e4c284fe415f5f57072365af42de42c9..4121c41fbc2281ffff8beeb8a9d711df0f5dcce1 100644 (file)
@@ -1859,7 +1859,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
 //   LINXY(__NR_subpage_prot,       sys_ni_syscall),       // 310
    LINXY(__NR_timerfd_settime,   sys_timerfd_settime),  // 311
    LINXY(__NR_timerfd_gettime,   sys_timerfd_gettime),  // 312
-   //   (__NR_signalfd4,         sys_ni_syscall)        // 313
+   LINXY(__NR_signalfd4,         sys_signalfd4),        // 313
    LINX_(__NR_eventfd2,          sys_eventfd2),         // 314
    //   (__NR_epoll_create1,     sys_ni_syscall)        // 315
    //   (__NR_dup3,              sys_ni_syscall)        // 316
index 141880a74c59678be8d117bacb4353606ed244db..5f4215b8b7a8fa660f3480f16b7ba406e88f84f2 100644 (file)
@@ -1499,7 +1499,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
 //   LINXY(__NR_subpage_prot,       sys_ni_syscall),       // 310
    LINXY(__NR_timerfd_settime,   sys_timerfd_settime),  // 311
    LINXY(__NR_timerfd_gettime,   sys_timerfd_gettime),  // 312
-   //   (__NR_signalfd4,         sys_ni_syscall)        // 313
+   LINXY(__NR_signalfd4,         sys_signalfd4),        // 313
    LINX_(__NR_eventfd2,          sys_eventfd2),         // 314
    //   (__NR_epoll_create1,     sys_ni_syscall)        // 315
    //   (__NR_dup3,              sys_ni_syscall)        // 316
index c833efc9123084f388ad8127eb86354e71b55043..4838271ed45d0cac6db50409b848850705127159 100644 (file)
@@ -2234,7 +2234,7 @@ const SyscallTableEntry ML_(syscall_table)[] = {
 
    LINXY(__NR_timerfd_settime,   sys_timerfd_settime),  // 325
    LINXY(__NR_timerfd_gettime,   sys_timerfd_gettime),  // 326
-   //   (__NR_signalfd4,         sys_ni_syscall)        // 327
+   LINXY(__NR_signalfd4,         sys_signalfd4),        // 327
    LINX_(__NR_eventfd2,          sys_eventfd2),         // 328
    //   (__NR_epoll_create1,     sys_ni_syscall)        // 329