|
From: <sv...@va...> - 2009-07-10 12:02:12
|
Author: njn
Date: 2009-07-10 13:02:03 +0100 (Fri, 10 Jul 2009)
New Revision: 10427
Log:
Handle epoll_create1. Patch from Sam Varshavchik. Fixes bug 188427.
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
trunk/memcheck/tests/x86-linux/scalar.c
trunk/memcheck/tests/x86-linux/scalar.stderr.exp
Modified: trunk/coregrind/m_syswrap/priv_syswrap-linux.h
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2009-07-10 10:02:46 UTC (rev 10426)
+++ trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2009-07-10 12:02:03 UTC (rev 10427)
@@ -85,6 +85,7 @@
DECL_TEMPLATE(linux, sys_ppoll);
DECL_TEMPLATE(linux, sys_epoll_create);
+DECL_TEMPLATE(linux, sys_epoll_create1);
DECL_TEMPLATE(linux, sys_epoll_ctl);
DECL_TEMPLATE(linux, sys_epoll_wait);
DECL_TEMPLATE(linux, sys_epoll_pwait);
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-07-10 10:02:46 UTC (rev 10426)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2009-07-10 12:02:03 UTC (rev 10427)
@@ -1366,7 +1366,7 @@
LINXY(__NR_signalfd4, sys_signalfd4), // 289
LINX_(__NR_eventfd2, sys_eventfd2), // 290
- // (__NR_epoll_create1, sys_ni_syscall) // 291
+ LINXY(__NR_epoll_create1, sys_epoll_create1), // 291
// (__NR_dup3, sys_ni_syscall) // 292
LINXY(__NR_pipe2, sys_pipe2) // 293
// (__NR_inotify_init1, sys_ni_syscall) // 294
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2009-07-10 10:02:46 UTC (rev 10426)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2009-07-10 12:02:03 UTC (rev 10427)
@@ -1047,6 +1047,23 @@
}
}
+PRE(sys_epoll_create1)
+{
+ PRINT("sys_epoll_create1 ( %ld )", ARG1);
+ PRE_REG_READ1(long, "epoll_create1", int, flags);
+}
+POST(sys_epoll_create1)
+{
+ vg_assert(SUCCESS);
+ if (!ML_(fd_allowed)(RES, "epoll_create1", tid, True)) {
+ VG_(close)(RES);
+ SET_STATUS_Failure( VKI_EMFILE );
+ } else {
+ if (VG_(clo_track_fds))
+ ML_(record_fd_open_nameless) (tid, RES);
+ }
+}
+
PRE(sys_epoll_ctl)
{
static const HChar* epoll_ctl_s[3] = {
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-07-10 10:02:46 UTC (rev 10426)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2009-07-10 12:02:03 UTC (rev 10427)
@@ -1863,7 +1863,7 @@
LINXY(__NR_timerfd_gettime, sys_timerfd_gettime), // 312
LINXY(__NR_signalfd4, sys_signalfd4), // 313
LINX_(__NR_eventfd2, sys_eventfd2), // 314
- // (__NR_epoll_create1, sys_ni_syscall) // 315
+ LINXY(__NR_epoll_create1, sys_epoll_create1), // 315
// (__NR_dup3, sys_ni_syscall) // 316
LINXY(__NR_pipe2, sys_pipe2) // 317
// (__NR_inotify_init1, sys_ni_syscall) // 318
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-07-10 10:02:46 UTC (rev 10426)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2009-07-10 12:02:03 UTC (rev 10427)
@@ -1503,7 +1503,7 @@
LINXY(__NR_timerfd_gettime, sys_timerfd_gettime), // 312
LINXY(__NR_signalfd4, sys_signalfd4), // 313
LINX_(__NR_eventfd2, sys_eventfd2), // 314
- // (__NR_epoll_create1, sys_ni_syscall) // 315
+ LINXY(__NR_epoll_create1, sys_epoll_create1), // 315
// (__NR_dup3, sys_ni_syscall) // 316
LINXY(__NR_pipe2, sys_pipe2) // 317
// (__NR_inotify_init1, sys_ni_syscall) // 318
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2009-07-10 10:02:46 UTC (rev 10426)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2009-07-10 12:02:03 UTC (rev 10427)
@@ -2240,7 +2240,7 @@
LINXY(__NR_timerfd_gettime, sys_timerfd_gettime), // 326
LINXY(__NR_signalfd4, sys_signalfd4), // 327
LINX_(__NR_eventfd2, sys_eventfd2), // 328
- // (__NR_epoll_create1, sys_ni_syscall) // 329
+ LINXY(__NR_epoll_create1, sys_epoll_create1), // 329
// (__NR_dup3, sys_ni_syscall) // 330
LINXY(__NR_pipe2, sys_pipe2) // 331
Modified: trunk/memcheck/tests/x86-linux/scalar.c
===================================================================
--- trunk/memcheck/tests/x86-linux/scalar.c 2009-07-10 10:02:46 UTC (rev 10426)
+++ trunk/memcheck/tests/x86-linux/scalar.c 2009-07-10 12:02:03 UTC (rev 10427)
@@ -1252,6 +1252,10 @@
GO(__NR_sys_kexec_load, "ni");
SY(__NR_sys_kexec_load); FAIL;
+ // __NR_epoll_create1 329
+ GO(__NR_epoll_create1, "1s 0m");
+ SY(__NR_epoll_create1, x0); SUCC_OR_FAIL;
+
// no such syscall...
GO(9999, "1e");
SY(9999); FAIL;
Modified: trunk/memcheck/tests/x86-linux/scalar.stderr.exp
===================================================================
--- trunk/memcheck/tests/x86-linux/scalar.stderr.exp 2009-07-10 10:02:46 UTC (rev 10426)
+++ trunk/memcheck/tests/x86-linux/scalar.stderr.exp 2009-07-10 12:02:03 UTC (rev 10427)
@@ -3249,6 +3249,12 @@
283: __NR_sys_kexec_load ni
-----------------------------------------------------
-----------------------------------------------------
+329: __NR_epoll_create1 1s 0m
+-----------------------------------------------------
+
+Syscall param epoll_create1(flags) contains uninitialised byte(s)
+ ...
+-----------------------------------------------------
9999: 9999 1e
-----------------------------------------------------
WARNING: unhandled syscall: 9999
|