From: Nicholas Nethercote Date: Fri, 10 Jul 2009 12:02:03 +0000 (+0000) Subject: Handle epoll_create1. Patch from Sam Varshavchik. Fixes bug 188427. X-Git-Tag: svn/VALGRIND_3_5_0~420 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=400b91757770256da624a96fdf4994c6564591b3;p=thirdparty%2Fvalgrind.git Handle epoll_create1. Patch from Sam Varshavchik. Fixes bug 188427. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10427 --- diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index e2396a39e9..113ed88be7 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -85,6 +85,7 @@ DECL_TEMPLATE(linux, sys_pselect6); 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); diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 0eac2bfc78..a7f1359240 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -1366,7 +1366,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { 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 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index b8fd7c40b9..fb8db882e1 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -1047,6 +1047,23 @@ POST(sys_epoll_create) } } +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] = { diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 3cfe556ead..f2498bc418 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -1863,7 +1863,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { 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 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 3f869e92db..257d1826a2 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -1503,7 +1503,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { 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 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index d47b116876..7d5d67443c 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -2240,7 +2240,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { 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 diff --git a/memcheck/tests/x86-linux/scalar.c b/memcheck/tests/x86-linux/scalar.c index d6d5a3a3e6..97357d1f94 100644 --- a/memcheck/tests/x86-linux/scalar.c +++ b/memcheck/tests/x86-linux/scalar.c @@ -1252,6 +1252,10 @@ int main(void) 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; diff --git a/memcheck/tests/x86-linux/scalar.stderr.exp b/memcheck/tests/x86-linux/scalar.stderr.exp index e1c3f6fb7b..abfb75f85b 100644 --- a/memcheck/tests/x86-linux/scalar.stderr.exp +++ b/memcheck/tests/x86-linux/scalar.stderr.exp @@ -3249,6 +3249,12 @@ Syscall param mq_getsetattr(omqstat) points to unaddressable byte(s) 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