diff options
author | André Almeida <andrealmeid@collabora.com> | 2021-10-21 21:02:59 -0300 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2022-01-09 00:08:00 +0000 |
commit | f2c97e23524f1d4cf5b559c968b709d697ccff80 (patch) | |
tree | d471c472087f69a4c98ed2b566d4b53354a4c0ad | |
parent | 301ef6aaa5dfd63a444577505a952d5b4b35805b (diff) | |
download | strace-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.am | 1 | ||||
-rw-r--r-- | src/futex_waitv.c | 30 | ||||
-rw-r--r-- | src/linux/generic/syscallent-common.h | 1 |
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" }, |