]> granicus.if.org Git - strace/commitdiff
futex: fix FUTEX_WAKE_OP compare function mask
authorEugene Syromyatnikov <evgsyr@gmail.com>
Mon, 29 Aug 2016 20:56:24 +0000 (23:56 +0300)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 30 Aug 2016 15:53:51 +0000 (15:53 +0000)
According to the initial and current (v4.7) kernel implementations,
in FUTEX_WAKE_OP case the compare function does not have
FUTEX_OP_OPARG_SHIFT flag and occupies 4 bits starting with bit 24.

* futex.c (SYS_FUNC(futex)): Do not print FUTEX_OP_OPARG_SHIFT
for 27th bit of val3 in FUTEX_WAKE_OP case.

futex.c

diff --git a/futex.c b/futex.c
index 7090c7d086c3529170c9a4ee95fc84e43eaa1d80..92682168c831f393eb12e458058e0f1320e52515 100644 (file)
--- a/futex.c
+++ b/futex.c
@@ -92,9 +92,7 @@ SYS_FUNC(futex)
                        tprints("FUTEX_OP_OPARG_SHIFT|");
                printxval(futexwakeops, (val3 >> 28) & 0x7, "FUTEX_OP_???");
                tprintf(", %u, ", (val3 >> 12) & 0xfff);
-               if ((val3 >> 24) & 8)
-                       tprints("FUTEX_OP_OPARG_SHIFT|");
-               printxval(futexwakecmps, (val3 >> 24) & 0x7, "FUTEX_OP_CMP_???");
+               printxval(futexwakecmps, (val3 >> 24) & 0xf, "FUTEX_OP_CMP_???");
                tprintf(", %u}", val3 & 0xfff);
                break;
        case FUTEX_WAIT_REQUEUE_PI: