futex: make output of the val3 argument of the FUTEX_WAKE_OP command more structured
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>
This commit is contained in:
parent
d872902009
commit
01e9ac81c4
18
futex.c
18
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);
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user