From: Julian Seward Date: Mon, 26 Jan 2009 12:24:36 +0000 (+0000) Subject: merge r8930 (Add signalfd4 support.) X-Git-Tag: svn/VALGRIND_3_4_1~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f08ce15c12bb0454996e09e4366faed587c6481;p=thirdparty%2Fvalgrind.git merge r8930 (Add signalfd4 support.) git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_4_BRANCH@9065 --- diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index cbfcd6cbe4..3cd0ca2351 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -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); diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 936b9424b7..a82ad21b5f 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 2ae6ed52f9..d4ca9b2109 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index a8a10886e4..4121c41fbc 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 141880a74c..5f4215b8b7 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index c833efc912..4838271ed4 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -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