]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Handle epoll_create1. Patch from Sam Varshavchik. Fixes bug 188427.
authorNicholas Nethercote <njn@valgrind.org>
Fri, 10 Jul 2009 12:02:03 +0000 (12:02 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Fri, 10 Jul 2009 12:02:03 +0000 (12:02 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10427

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
memcheck/tests/x86-linux/scalar.c
memcheck/tests/x86-linux/scalar.stderr.exp

index e2396a39e9939d2e350858c409609d7c97f60e0f..113ed88be71cf92b292e1fe0ebec13e8c6c2e66a 100644 (file)
@@ -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);
index 0eac2bfc782ebf8242952a027c12873064e36957..a7f13592403f1473669dfcb052bab793033154dc 100644 (file)
@@ -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
index b8fd7c40b933fac6bfdb05839b0d07238dc02316..fb8db882e12c05abed399def423c61eb5828644e 100644 (file)
@@ -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] = {
index 3cfe556ead9d36f7d8dccdf4051c8c198e3739e6..f2498bc418cff7481fa12ef72ab86e698fcf51f0 100644 (file)
@@ -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
index 3f869e92dbcba48ccc93d5f92773b6490f42dada..257d1826a2a929a6ff2dcd74f718fb2d959f870f 100644 (file)
@@ -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
index d47b1168760aac625566e04af78aef4ed82a9710..7d5d67443cfd31f3644a3544e0e7f8f8a2a03e6b 100644 (file)
@@ -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
index d6d5a3a3e630b178027d6f7422cd827552f5a263..97357d1f948f4390d52d87b488df2a31a8dfe53a 100644 (file)
@@ -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;
index e1c3f6fb7b6c578c6ffcbf422e46827e86b4ed7d..abfb75f85b335d15a1fb11436d4633a47296b704 100644 (file)
@@ -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