|
From: <sv...@va...> - 2009-01-09 16:43:02
|
Author: tom
Date: 2009-01-09 16:42:51 +0000 (Fri, 09 Jan 2009)
New Revision: 8930
Log:
Add signalfd4 support.
Modified:
trunk/coregrind/m_syswrap/priv_syswrap-linux.h
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
Modified: trunk/coregrind/m_syswrap/priv_syswrap-linux.h
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2009-01-09 02:46:10 UTC (rev 8929)
+++ trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2009-01-09 16:42:51 UTC (rev 8930)
@@ -133,6 +133,7 @@
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);
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-01-09 02:46:10 UTC (rev 8929)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-01-09 16:42:51 UTC (rev 8930)
@@ -1361,7 +1361,7 @@
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
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2009-01-09 02:46:10 UTC (rev 8929)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2009-01-09 16:42:51 UTC (rev 8930)
@@ -2431,7 +2431,7 @@
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,7 +2449,27 @@
}
}
+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
------------------------------------------------------------------ */
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-01-09 02:46:10 UTC (rev 8929)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-01-09 16:42:51 UTC (rev 8930)
@@ -1859,7 +1859,7 @@
// 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
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-01-09 02:46:10 UTC (rev 8929)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-01-09 16:42:51 UTC (rev 8930)
@@ -1499,7 +1499,7 @@
// 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
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2009-01-09 02:46:10 UTC (rev 8929)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2009-01-09 16:42:51 UTC (rev 8930)
@@ -2234,7 +2234,7 @@
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
|