]> granicus.if.org Git - strace/commitdiff
futex: make output of the val3 argument of the FUTEX_WAKE_OP command more structured
authorEugene Syromyatnikov <evgsyr@gmail.com>
Sun, 27 Nov 2016 15:07:36 +0000 (18:07 +0300)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 30 Nov 2016 23:56:47 +0000 (23:56 +0000)
It is a number which consists of several xlat values, not a structure.

* futex.c (SYS_FUNC(futex)): Modify output of the val3 argument
of the FUTEX_WAKE_OP futex syscall command.
* tests/futex.c (main): Update expected output.

Co-authored-by: Elvira Khabirova <lineprinter0@gmail.com>
futex.c
tests/futex.c

diff --git a/futex.c b/futex.c
index d1b5a42cc1958a5e232c5dbaafa526b1930cbf3f..44d963599318bcc6a530a6d47741be54626fc944 100644 (file)
--- a/futex.c
+++ b/futex.c
@@ -91,13 +91,19 @@ SYS_FUNC(futex)
                tprintf(", %u", val);
                tprintf(", %u, ", val2);
                printaddr(uaddr2);
-               tprints(", {");
+               tprints(", ");
                if ((val3 >> 28) & 8)
-                       tprints("FUTEX_OP_OPARG_SHIFT|");
-               printxval(futexwakeops, (val3 >> 28) & 0x7, "FUTEX_OP_???");
-               tprintf(", %u, ", (val3 >> 12) & 0xfff);
-               printxval(futexwakecmps, (val3 >> 24) & 0xf, "FUTEX_OP_CMP_???");
-               tprintf(", %u}", val3 & 0xfff);
+                       tprints("FUTEX_OP_OPARG_SHIFT<<28|");
+               if (printxval(futexwakeops, (val3 >> 28) & 0x7, NULL))
+                       tprints("<<28");
+               else
+                       tprints("<<28 /* FUTEX_OP_??? */");
+               tprintf("|%#x<<12|", (val3 >> 12) & 0xfff);
+               if (printxval(futexwakecmps, (val3 >> 24) & 0xf, NULL))
+                       tprints("<<24");
+               else
+                       tprints("<<24 /* FUTEX_OP_CMP_??? */");
+               tprintf("|%#x", val3 & 0xfff);
                break;
        case FUTEX_WAIT_REQUEUE_PI:
                tprintf(", %u", val);
index e4958ce20a4e02fb8091147a4b5532f20822cc57..586b95d5ed6969f559654128c4a8c29325398634 100644 (file)
@@ -474,42 +474,47 @@ main(int argc, char *argv[])
                int err;
                const char *errstr;
        } wake_ops[] = {
-               { 0x00000000, "{FUTEX_OP_SET, 0, FUTEX_OP_CMP_EQ, 0}" },
-               { 0x00fff000, "{FUTEX_OP_SET, 4095, FUTEX_OP_CMP_EQ, 0}" },
-               { 0x00000fff, "{FUTEX_OP_SET, 0, FUTEX_OP_CMP_EQ, 4095}" },
-               { 0x00ffffff, "{FUTEX_OP_SET, 4095, FUTEX_OP_CMP_EQ, 4095}" },
-               { 0x10000000, "{FUTEX_OP_ADD, 0, FUTEX_OP_CMP_EQ, 0}" },
-               { 0x20000000, "{FUTEX_OP_OR, 0, FUTEX_OP_CMP_EQ, 0}" },
-               { 0x30000000, "{FUTEX_OP_ANDN, 0, FUTEX_OP_CMP_EQ, 0}" },
-               { 0x40000000, "{FUTEX_OP_XOR, 0, FUTEX_OP_CMP_EQ, 0}" },
-               { 0x50000000, "{0x5 /* FUTEX_OP_??? */, 0, FUTEX_OP_CMP_EQ, 0}",
+               { 0x00000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
+               { 0x00fff000, "FUTEX_OP_SET<<28|0xfff<<12|FUTEX_OP_CMP_EQ<<24|"
+                       "0" },
+               { 0x00000fff, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_EQ<<24|"
+                       "0xfff" },
+               { 0x00ffffff, "FUTEX_OP_SET<<28|0xfff<<12|FUTEX_OP_CMP_EQ<<24|"
+                       "0xfff" },
+               { 0x10000000, "FUTEX_OP_ADD<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
+               { 0x20000000, "FUTEX_OP_OR<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
+               { 0x30000000, "FUTEX_OP_ANDN<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
+               { 0x40000000, "FUTEX_OP_XOR<<28|0<<12|FUTEX_OP_CMP_EQ<<24|0" },
+               { 0x50000000, "0x5<<28 /* FUTEX_OP_??? */|0<<12|"
+                       "FUTEX_OP_CMP_EQ<<24|0", ENOSYS, "ENOSYS" },
+               { 0x70000000, "0x7<<28 /* FUTEX_OP_??? */|0<<12|"
+                       "FUTEX_OP_CMP_EQ<<24|0", ENOSYS, "ENOSYS" },
+               { 0x80000000, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_SET<<28|0<<12|"
+                       "FUTEX_OP_CMP_EQ<<24|0" },
+               { 0xa0caffee, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_OR<<28|"
+                       "0xcaf<<12|FUTEX_OP_CMP_EQ<<24|0xfee" },
+               { 0x01000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_NE<<24|0" },
+               { 0x01234567, "FUTEX_OP_SET<<28|0x234<<12|FUTEX_OP_CMP_NE<<24|"
+                       "0x567" },
+               { 0x02000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_LT<<24|0" },
+               { 0x03000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_LE<<24|0" },
+               { 0x04000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_GT<<24|0" },
+               { 0x05000000, "FUTEX_OP_SET<<28|0<<12|FUTEX_OP_CMP_GE<<24|0" },
+               { 0x06000000, "FUTEX_OP_SET<<28|0<<12|"
+                       "0x6<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+               { 0x07000000, "FUTEX_OP_SET<<28|0<<12|"
+                       "0x7<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+               { 0x08000000, "FUTEX_OP_SET<<28|0<<12|"
+                       "0x8<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+               { 0x0f000000, "FUTEX_OP_SET<<28|0<<12|"
+                       "0xf<<24 /* FUTEX_OP_CMP_??? */|0", ENOSYS, "ENOSYS" },
+               { 0xbadfaced, "FUTEX_OP_OPARG_SHIFT<<28|FUTEX_OP_ANDN<<28|"
+                       "0xdfa<<12|0xa<<24 /* FUTEX_OP_CMP_??? */|0xced",
                        ENOSYS, "ENOSYS" },
-               { 0x70000000, "{0x7 /* FUTEX_OP_??? */, 0, FUTEX_OP_CMP_EQ, 0}",
+               { 0xffffffff, "FUTEX_OP_OPARG_SHIFT<<28|"
+                       "0x7<<28 /* FUTEX_OP_??? */|0xfff<<12|"
+                       "0xf<<24 /* FUTEX_OP_CMP_??? */|0xfff",
                        ENOSYS, "ENOSYS" },
-               { 0x80000000, "{FUTEX_OP_OPARG_SHIFT|FUTEX_OP_SET, 0, "
-                       "FUTEX_OP_CMP_EQ, 0}" },
-               { 0xa0caffee, "{FUTEX_OP_OPARG_SHIFT|FUTEX_OP_OR, 3247, "
-                       "FUTEX_OP_CMP_EQ, 4078}" },
-               { 0x01000000, "{FUTEX_OP_SET, 0, FUTEX_OP_CMP_NE, 0}" },
-               { 0x01234567, "{FUTEX_OP_SET, 564, FUTEX_OP_CMP_NE, 1383}" },
-               { 0x02000000, "{FUTEX_OP_SET, 0, FUTEX_OP_CMP_LT, 0}" },
-               { 0x03000000, "{FUTEX_OP_SET, 0, FUTEX_OP_CMP_LE, 0}" },
-               { 0x04000000, "{FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 0}" },
-               { 0x05000000, "{FUTEX_OP_SET, 0, FUTEX_OP_CMP_GE, 0}" },
-               { 0x06000000, "{FUTEX_OP_SET, 0, 0x6 /* FUTEX_OP_CMP_??? */, "
-                       "0}", ENOSYS, "ENOSYS" },
-               { 0x07000000, "{FUTEX_OP_SET, 0, 0x7 /* FUTEX_OP_CMP_??? */, "
-                       "0}", ENOSYS, "ENOSYS" },
-               { 0x08000000, "{FUTEX_OP_SET, 0, 0x8 /* FUTEX_OP_CMP_??? */, "
-                       "0}", ENOSYS, "ENOSYS" },
-               { 0x0f000000, "{FUTEX_OP_SET, 0, 0xf /* FUTEX_OP_CMP_??? */, "
-                       "0}", ENOSYS, "ENOSYS" },
-               { 0xbadfaced, "{FUTEX_OP_OPARG_SHIFT|FUTEX_OP_ANDN, "
-                       "3578, 0xa /* FUTEX_OP_CMP_??? */, 3309}", ENOSYS,
-                       "ENOSYS" },
-               { 0xffffffff, "{FUTEX_OP_OPARG_SHIFT|0x7 /* FUTEX_OP_??? */, "
-                       "4095, 0xf /* FUTEX_OP_CMP_??? */, 4095}", ENOSYS,
-                       "ENOSYS" },
        };
 
        for (i = 0; i < ARRAY_SIZE(wake_ops); i++) {
@@ -526,8 +531,8 @@ main(int argc, char *argv[])
        CHECK_INVALID_CLOCKRT(FUTEX_WAKE_OP, ARG3 | ARG4 | ARG5 | ARG6,
                "%u", "%u", "%#lx",
                /* Decoding of the 0xdeadbee4 value */
-               "{FUTEX_OP_OPARG_SHIFT|0x5 /* FUTEX_OP_??? */, 2779, "
-               "0xe /* FUTEX_OP_CMP_??? */, 3812}");
+               "FUTEX_OP_OPARG_SHIFT<<28|0x5<<28 /* FUTEX_OP_??? */|0xadb<<12|"
+               "0xe<<24 /* FUTEX_OP_CMP_??? */|0xee4");
 
        /* FUTEX_LOCK_PI - slow path for mutex lock with process inheritance
         *                 support. Expect that futex has 0 in unlocked case and