]> git.ipfire.org Git - thirdparty/valgrind.git/commit
Wrap the futex_waitv syscall
authorMartin Cermak <mcermak@redhat.com>
Fri, 12 Sep 2025 05:52:55 +0000 (07:52 +0200)
committerMark Wielaard <mark@klomp.org>
Fri, 12 Sep 2025 11:31:03 +0000 (13:31 +0200)
commit4b9d06bcde9935b3eae0307ec07fc1437a76e903
treef60106c10d1e4929a19703d3c70cabdb6ff8c439
parentc35d1db65eb728758ef63282fa77fd79d7ad0102
Wrap the futex_waitv syscall

Wrap the futex2/futex_waitv syscall:

sys_futex_waitv(struct futex_waitv __user *, waiters,
                unsigned int, nr_futexes, unsigned int, flags,
                struct __kernel_timespec __user *, timeout, clockid_t, clockid)

sys_futex_waitv - Wait on a list of futexes
@waiters:    List of futexes to wait on
@nr_futexes: Length of futexv
@flags:      Flag for timeout (monotonic/realtime)
@timeout:    Optional absolute timeout.
@clockid:    Clock to be used for the timeout, realtime or monotonic.

Given an array of `struct futex_waitv`, wait on each uaddr. The thread wakes
if a futex_wake() is performed at any uaddr. The syscall returns immediately
if any waiter has *uaddr != val. *timeout is an optional timeout value for
the operation. Each waiter has individual flags. The `flags` argument for
the syscall should be used solely for specifying the timeout as realtime, if
needed. Flags for private futexes, sizes, etc. should be used on the
individual flags of each waiter. Returns the array index of one of the woken
futexes. No further information is provided.

Declare a futex_waitv wrapper in priv_syswrap-linux.h
and hook it for {amd64,arm,arm64,mips64,ppc32,ppc64,riscv64,s390x\
,x86}- linux using LINX_ with PRE handler in syswrap-linux.c

https://bugs.kde.org/show_bug.cgi?id=506816
24 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-riscv64-linux.c
coregrind/m_syswrap/syswrap-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c
include/vki/vki-linux.h
include/vki/vki-scnums-32bit-linux.h
include/vki/vki-scnums-amd64-linux.h
include/vki/vki-scnums-arm-linux.h
include/vki/vki-scnums-arm64-linux.h
include/vki/vki-scnums-ppc32-linux.h
include/vki/vki-scnums-ppc64-linux.h
include/vki/vki-scnums-riscv64-linux.h
include/vki/vki-scnums-s390x-linux.h
include/vki/vki-scnums-x86-linux.h