[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 6/8] linux-user: Update print_futex_op
From: |
Richard Henderson |
Subject: |
[PATCH 6/8] linux-user: Update print_futex_op |
Date: |
Sun, 28 Aug 2022 19:10:04 -0700 |
Use a table for the names; print unknown values in hex,
since the value contains flags.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
linux-user/strace.c | 65 ++++++++++++++++++++-------------------------
1 file changed, 29 insertions(+), 36 deletions(-)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 7d882526da..8eadbed39e 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -3576,44 +3576,37 @@ print_munmap(CPUArchState *cpu_env, const struct
syscallname *name,
#endif
#ifdef TARGET_NR_futex
-static void print_futex_op(abi_long tflag, int last)
+static void print_futex_op(int cmd, int last)
{
-#define print_op(val) \
-if( cmd == val ) { \
- qemu_log(#val); \
- return; \
-}
+ static const char * const futex_names[] = {
+#define NAME(X) [X] = #X
+ NAME(FUTEX_WAIT),
+ NAME(FUTEX_WAKE),
+ NAME(FUTEX_FD),
+ NAME(FUTEX_REQUEUE),
+ NAME(FUTEX_CMP_REQUEUE),
+ NAME(FUTEX_WAKE_OP),
+ NAME(FUTEX_LOCK_PI),
+ NAME(FUTEX_UNLOCK_PI),
+ NAME(FUTEX_TRYLOCK_PI),
+ NAME(FUTEX_WAIT_BITSET),
+ NAME(FUTEX_WAKE_BITSET),
+ NAME(FUTEX_WAIT_REQUEUE_PI),
+ NAME(FUTEX_CMP_REQUEUE_PI),
+ NAME(FUTEX_LOCK_PI2),
+#undef NAME
+ };
- int cmd = (int)tflag;
-#ifdef FUTEX_PRIVATE_FLAG
- if (cmd & FUTEX_PRIVATE_FLAG) {
- qemu_log("FUTEX_PRIVATE_FLAG|");
- cmd &= ~FUTEX_PRIVATE_FLAG;
+ unsigned base_cmd = cmd & FUTEX_CMD_MASK;
+
+ if (base_cmd < ARRAY_SIZE(futex_names)) {
+ qemu_log("%s%s%s",
+ (cmd & FUTEX_PRIVATE_FLAG ? "FUTEX_PRIVATE_FLAG|" : ""),
+ (cmd & FUTEX_CLOCK_REALTIME ? "FUTEX_CLOCK_REALTIME|" : ""),
+ futex_names[base_cmd]);
+ } else {
+ qemu_log("0x%x", cmd);
}
-#endif
-#ifdef FUTEX_CLOCK_REALTIME
- if (cmd & FUTEX_CLOCK_REALTIME) {
- qemu_log("FUTEX_CLOCK_REALTIME|");
- cmd &= ~FUTEX_CLOCK_REALTIME;
- }
-#endif
- print_op(FUTEX_WAIT)
- print_op(FUTEX_WAKE)
- print_op(FUTEX_FD)
- print_op(FUTEX_REQUEUE)
- print_op(FUTEX_CMP_REQUEUE)
- print_op(FUTEX_WAKE_OP)
- print_op(FUTEX_LOCK_PI)
- print_op(FUTEX_UNLOCK_PI)
- print_op(FUTEX_TRYLOCK_PI)
-#ifdef FUTEX_WAIT_BITSET
- print_op(FUTEX_WAIT_BITSET)
-#endif
-#ifdef FUTEX_WAKE_BITSET
- print_op(FUTEX_WAKE_BITSET)
-#endif
- /* unknown values */
- qemu_log("%d", cmd);
}
static void
@@ -3625,7 +3618,7 @@ print_futex(CPUArchState *cpu_env, const struct
syscallname *name,
print_pointer(arg0, 0);
print_futex_op(arg1, 0);
print_raw_param(",%d", arg2, 0);
- print_pointer(arg3, 0); /* struct timespec */
+ print_pointer(arg3, 0); /* struct timespec or val2 */
print_pointer(arg4, 0);
print_raw_param("%d", arg4, 1);
print_syscall_epilogue(name);
--
2.34.1
- [PATCH 0/8] linux-user: Futex improvements, Richard Henderson, 2022/08/28
- [PATCH 1/8] linux-user: Combine do_futex and do_futex_time64, Richard Henderson, 2022/08/28
- [PATCH 2/8] linux-user: Sink call to do_safe_futex, Richard Henderson, 2022/08/28
- [PATCH 3/8] linux-user: Implement FUTEX_WAKE_BITSET, Richard Henderson, 2022/08/28
- [PATCH 4/8] linux-user: Convert signal number for FUTEX_FD, Richard Henderson, 2022/08/28
- [PATCH 7/8] linux-user: Lock log around strace, Richard Henderson, 2022/08/28
- [PATCH 5/8] linux-user: Implement PI futexes, Richard Henderson, 2022/08/28
- [PATCH 6/8] linux-user: Update print_futex_op,
Richard Henderson <=
- [PATCH 8/8] linux-user: Log tid for strace, Richard Henderson, 2022/08/28