summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Almeida <andrealmeid@collabora.com>2021-10-21 21:02:59 -0300
committerDmitry V. Levin <ldv@strace.io>2022-01-09 00:08:00 +0000
commitf2c97e23524f1d4cf5b559c968b709d697ccff80 (patch)
treed471c472087f69a4c98ed2b566d4b53354a4c0ad
parent301ef6aaa5dfd63a444577505a952d5b4b35805b (diff)
downloadstrace-f2c97e23524f1d4cf5b559c968b709d697ccff80.tar.gz
Implement decoding of futex_waitv syscall
This is an initial implementation of the new futex_waitv syscall introduced by Linux kernel commit v5.16-rc1~200^2~12. * src/futex_waitv.c: New file. * src/Makefile.am (libstrace_a_SOURCES): Add it. * src/linux/generic/syscallent-common.h ([BASE_NR + 449]): Add futex_waitv syscall entry.
-rw-r--r--src/Makefile.am1
-rw-r--r--src/futex_waitv.c30
-rw-r--r--src/linux/generic/syscallent-common.h1
3 files changed, 32 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 81f1d5945..3600b2d41 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -131,6 +131,7 @@ libstrace_a_SOURCES = \
fstatfs.c \
fstatfs64.c \
futex.c \
+ futex_waitv.c \
gcc_compat.h \
gen/gen_hdio.c \
gen/generated.h \
diff --git a/src/futex_waitv.c b/src/futex_waitv.c
new file mode 100644
index 000000000..a6517132f
--- /dev/null
+++ b/src/futex_waitv.c
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2021-2022 The strace developers.
+ * Copyright (c) 2021 André Almeida <andrealmeid@collabora.com>
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#include "defs.h"
+
+SYS_FUNC(futex_waitv)
+{
+ const kernel_ulong_t waiters = tcp->u_arg[0];
+ const unsigned int nr_futexes = tcp->u_arg[1];
+ const unsigned int flags = tcp->u_arg[2];
+ const kernel_ulong_t timeout = tcp->u_arg[3];
+ const unsigned int clockid = tcp->u_arg[4];
+
+ printaddr(waiters);
+ tprint_arg_next();
+ PRINT_VAL_U(nr_futexes);
+ tprint_arg_next();
+ PRINT_VAL_X(flags);
+ tprint_arg_next();
+ print_timespec64(tcp, timeout);
+ tprint_arg_next();
+ printxval(clocknames, clockid, "CLOCK_???");
+
+ return RVAL_DECODED;
+}
diff --git a/src/linux/generic/syscallent-common.h b/src/linux/generic/syscallent-common.h
index 124e505ea..02e6fb57c 100644
--- a/src/linux/generic/syscallent-common.h
+++ b/src/linux/generic/syscallent-common.h
@@ -33,3 +33,4 @@
[BASE_NR + 446] = { 2, TD, SEN(landlock_restrict_self), "landlock_restrict_self" },
[BASE_NR + 447] = { 1, TD, SEN(memfd_secret), "memfd_secret" },
[BASE_NR + 448] = { 2, TD, SEN(process_mrelease), "process_mrelease" },
+[BASE_NR + 449] = { 5, 0, SEN(futex_waitv), "futex_waitv" },