]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add epoll_pwait2
authorOlli Vanhoja <olli.vanhoja@gmail.com>
Mon, 10 Oct 2022 09:44:22 +0000 (11:44 +0200)
committerMark Wielaard <mark@klomp.org>
Wed, 17 May 2023 11:18:16 +0000 (13:18 +0200)
The only difference between epoll_pwait and epoll_pwait2 is the
timeout argument. For epoll_pwait2 this is a timespec (which is
always 64bit).

https://bugs.kde.org/show_bug.cgi?id=460192

14 files changed:
NEWS
coregrind/m_syswrap/priv_syswrap-linux.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-arm-linux.c
coregrind/m_syswrap/syswrap-arm64-linux.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-mips32-linux.c
coregrind/m_syswrap/syswrap-mips64-linux.c
coregrind/m_syswrap/syswrap-nanomips-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c
include/vki/vki-scnums-shared-linux.h

diff --git a/NEWS b/NEWS
index 0b54c9cb7b845cab9c54a174651fa877d82c727a..87bfae5960b24dbf286bac77cfa4e2c029b7e49d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,7 @@ bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
 than mailing the developers (or mailing lists) directly -- bugs that
 are not entered into bugzilla tend to get forgotten about or ignored.
 
+460192  Add epoll_pwait2
 469049  link failure on ppc64 (big endian) valgrind 3.20
 469146  massif --ignore-fn does not ignore inlined functions
 
index a73b6247e7c8d8e671879f300f002c0237910ec2..7c9decf5aaa7e5c71bc073ff3bb8ae12c1c240cc 100644 (file)
@@ -105,6 +105,7 @@ DECL_TEMPLATE(linux, sys_epoll_create1);
 DECL_TEMPLATE(linux, sys_epoll_ctl);
 DECL_TEMPLATE(linux, sys_epoll_wait);
 DECL_TEMPLATE(linux, sys_epoll_pwait);
+DECL_TEMPLATE(linux, sys_epoll_pwait2);
 DECL_TEMPLATE(linux, sys_eventfd);
 DECL_TEMPLATE(linux, sys_eventfd2);
 
index 1aeebd274b5f2df0207a4559b5bc6a25b6192d53..008600798a5ca775a9be8d66439f0face6eb0502 100644 (file)
@@ -883,6 +883,8 @@ static SyscallTableEntry syscall_table[] = {
 
    LINX_(__NR_faccessat2,       sys_faccessat2),        // 439
 
+   LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
+
    LINXY(__NR_memfd_secret,      sys_memfd_secret),      // 447
 };
 
index bca50958930b40962649d4add1870690069a1b2d..9a7a1e0d271fd46518138ea20c73faba8e73ec6b 100644 (file)
@@ -1057,6 +1057,8 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
    LINX_(__NR_faccessat2,    sys_faccessat2),           // 439
+
+   LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
 };
 
 
index 9532360007be8df2d89bc87fd7ba2b2a4322c730..6af7bab8319e2b0faa287ab30fb80c1701a61c3b 100644 (file)
@@ -837,6 +837,8 @@ static SyscallTableEntry syscall_main_table[] = {
 
    LINX_(__NR_faccessat2,        sys_faccessat2),        // 439
 
+   LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
+
    LINXY(__NR_memfd_secret,      sys_memfd_secret),      // 447
 };
 
index 26f1fbee3cce4bb16ccbe87209858e0ed896b5b2..f8621f8f0d1ca41ca4001a2e9b61a56ed07d50e5 100644 (file)
@@ -2165,6 +2165,29 @@ POST(sys_epoll_pwait)
    epoll_post_helper (tid, arrghs, status);
 }
 
+PRE(sys_epoll_pwait2)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_epoll_pwait2 ( %ld, %#" FMT_REGWORD "x, %ld, %#"
+          FMT_REGWORD "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )",
+         SARG1, ARG2, SARG3, ARG4, ARG5, ARG6);
+   PRE_REG_READ6(long, "epoll_pwait2",
+                 int, epfd, struct vki_epoll_event *, events,
+                 int, maxevents, const struct timespec64 *, timeout,
+                 vki_sigset_t *, sigmask, vki_size_t, sigsetsize);
+   /* Assume all (maxevents) events records should be (fully) writable. */
+   PRE_MEM_WRITE( "epoll_pwait2(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3);
+   /* epoll_pwait2 only supports 64bit timespec. */
+   if (ARG4)
+      pre_read_timespec64(tid, "epoll_pwait2(timeout)", ARG4);
+   if (ARG5)
+      PRE_MEM_READ( "epoll_pwait2(sigmask)", ARG5, sizeof(vki_sigset_t) );
+}
+POST(sys_epoll_pwait2)
+{
+   epoll_post_helper (tid, arrghs, status);
+}
+
 PRE(sys_eventfd)
 {
    PRINT("sys_eventfd ( %" FMT_REGWORD "u )", ARG1);
index de27998b3fe36b2576faa31cd80151b928eee340..6268a00ddfef25ed76212673cdca9ebc056c5c10 100644 (file)
@@ -1141,6 +1141,8 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
    LINX_ (__NR_faccessat2,             sys_faccessat2),              // 439
+
+   LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno)
index 67e7c2c2f6bc446c800b317c49e010f7322bd75b..6cdf25893bf20d7445d681cb9f9489c874b2e3d5 100644 (file)
@@ -819,6 +819,7 @@ static SyscallTableEntry syscall_main_table[] = {
    GENX_ (__NR_clone3, sys_ni_syscall),
    LINXY (__NR_close_range, sys_close_range),
    LINX_ (__NR_faccessat2, sys_faccessat2),
+   LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),
 };
 
 SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno )
index 9c535c68eadabe7e41b8590e12ae1e865553fee3..d724cde748ab7597badb63fa2c4da390e46579c8 100644 (file)
@@ -828,6 +828,7 @@ static SyscallTableEntry syscall_main_table[] = {
    GENX_ (__NR_clone3,                 sys_ni_syscall),
    LINXY (__NR_close_range,            sys_close_range),
    LINX_ (__NR_faccessat2,             sys_faccessat2),
+   LINXY (__NR_epoll_pwait2,           sys_epoll_pwait2),
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno)
index 12c07302717add8862830e488595ff2fdf783a9e..c0cfef2354176c2ab8902441edb753dcb6095d2b 100644 (file)
@@ -1061,6 +1061,8 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
    LINX_(__NR_faccessat2,        sys_faccessat2),       // 439
+
+   LINXY (__NR_epoll_pwait2,     sys_epoll_pwait2),      // 441
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index 3c33d1267e700446d6bea1824ee668b358582013..f5976f30c8bf62c2dbba5bee6f30a1b6a936940e 100644 (file)
@@ -1030,6 +1030,8 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
    LINX_(__NR_faccessat2,        sys_faccessat2),       // 439
+
+   LINXY (__NR_epoll_pwait2,     sys_epoll_pwait2),      // 441
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index a377cb73152d9aa3db7ecec83803c74b50b8d6db..afba154e782e7400ebfafc7b8705fa139abe9a69 100644 (file)
@@ -871,6 +871,8 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_close_range, sys_close_range),                          // 436
 
    LINX_(__NR_faccessat2,  sys_faccessat2),                           // 439
+
+   LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),                        // 441
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index a9ba15dfe6a07ad5139ad04a75f04da2c936eebb..da4fd8fa20415fdf7875564b19badbb624a4f2a3 100644 (file)
@@ -1655,6 +1655,8 @@ static SyscallTableEntry syscall_table[] = {
 
    LINX_(__NR_faccessat2,       sys_faccessat2),       // 439
 
+   LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),     // 441
+
    LINXY(__NR_memfd_secret,      sys_memfd_secret),      // 447
 };
 
index d90cdd31242bdcdbcdc1dad97578a5f620ffa5bb..542382b5330f0b011fee9a801faf4d3c72190a6c 100644 (file)
@@ -46,6 +46,8 @@
 
 #define __NR_faccessat2                439
 
+#define __NR_epoll_pwait2              441
+
 #define __NR_memfd_secret              447
 
 #endif