From: Olli Vanhoja Date: Mon, 10 Oct 2022 09:44:22 +0000 (+0200) Subject: Add epoll_pwait2 X-Git-Tag: VALGRIND_3_22_0~147 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17f56ab4c4fce7b4778251e1fab2bc50e5c6dbda;p=thirdparty%2Fvalgrind.git Add epoll_pwait2 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 --- diff --git a/NEWS b/NEWS index 0b54c9cb7b..87bfae5960 100644 --- 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 diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index a73b6247e7..7c9decf5aa 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -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); diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 1aeebd274b..008600798a 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -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 }; diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index bca5095893..9a7a1e0d27 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -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 }; diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c index 9532360007..6af7bab831 100644 --- a/coregrind/m_syswrap/syswrap-arm64-linux.c +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c @@ -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 }; diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 26f1fbee3c..f8621f8f0d 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -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); diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index de27998b3f..6268a00ddf 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -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) diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c index 67e7c2c2f6..6cdf25893b 100644 --- a/coregrind/m_syswrap/syswrap-mips64-linux.c +++ b/coregrind/m_syswrap/syswrap-mips64-linux.c @@ -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 ) diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c index 9c535c68ea..d724cde748 100644 --- a/coregrind/m_syswrap/syswrap-nanomips-linux.c +++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c @@ -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) diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 12c0730271..c0cfef2354 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -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 ) diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 3c33d1267e..f5976f30c8 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -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 ) diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index a377cb7315..afba154e78 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -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 ) diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index a9ba15dfe6..da4fd8fa20 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -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 }; diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h index d90cdd3124..542382b533 100644 --- a/include/vki/vki-scnums-shared-linux.h +++ b/include/vki/vki-scnums-shared-linux.h @@ -46,6 +46,8 @@ #define __NR_faccessat2 439 +#define __NR_epoll_pwait2 441 + #define __NR_memfd_secret 447 #endif