From 1aeaf74640dd091a4cab85aafba49e8dfd5b0fb0 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 18 Jul 2008 01:27:39 +0000 Subject: [PATCH] 2008-07-17 Roland McGrath * process.c (futexops): Update table. (sys_futex): Handle FUTEX_WAIT_BITSET correctly. From Ulrich Drepper . Fixes RH#448628. --- process.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/process.c b/process.c index a2109fe3..ec41b499 100644 --- a/process.c +++ b/process.c @@ -3199,8 +3199,11 @@ struct tcb *tcp; # define FUTEX_UNLOCK_PI 7 # define FUTEX_TRYLOCK_PI 8 # endif -# ifndef FUTEX_CMP_REQUEUE_PI -# define FUTEX_CMP_REQUEUE_PI 9 +# ifndef FUTEX_WAIT_BITSET +# define FUTEX_WAIT_BITSET 9 +# endif +# ifndef FUTEX_WAKE_BITSET +# define FUTEX_WAKE_BITSET 10 # endif # ifndef FUTEX_PRIVATE_FLAG # define FUTEX_PRIVATE_FLAG 128 @@ -3215,7 +3218,8 @@ static const struct xlat futexops[] = { { FUTEX_LOCK_PI, "FUTEX_LOCK_PI" }, { FUTEX_UNLOCK_PI, "FUTEX_UNLOCK_PI" }, { FUTEX_TRYLOCK_PI, "FUTEX_TRYLOCK_PI" }, - { FUTEX_CMP_REQUEUE_PI, "FUTEX_CMP_REQUEUE_PI" }, + { FUTEX_WAIT_BITSET, "FUTEX_WAIT_BITSET" }, + { FUTEX_WAKE_BITSET, "FUTEX_WAKE_BITSET" }, { FUTEX_WAIT|FUTEX_PRIVATE_FLAG, "FUTEX_WAIT_PRIVATE" }, { FUTEX_WAKE|FUTEX_PRIVATE_FLAG, "FUTEX_WAKE_PRIVATE" }, { FUTEX_FD|FUTEX_PRIVATE_FLAG, "FUTEX_FD_PRIVATE" }, @@ -3225,7 +3229,8 @@ static const struct xlat futexops[] = { { FUTEX_LOCK_PI|FUTEX_PRIVATE_FLAG, "FUTEX_LOCK_PI_PRIVATE" }, { FUTEX_UNLOCK_PI|FUTEX_PRIVATE_FLAG, "FUTEX_UNLOCK_PI_PRIVATE" }, { FUTEX_TRYLOCK_PI|FUTEX_PRIVATE_FLAG, "FUTEX_TRYLOCK_PI_PRIVATE" }, - { FUTEX_CMP_REQUEUE_PI|FUTEX_PRIVATE_FLAG, "FUTEX_CMP_REQUEUE_PI_PRIVATE" }, + { FUTEX_WAIT_BITSET|FUTEX_PRIVATE_FLAG, "FUTEX_WAIT_BITSET_PRIVATE" }, + { FUTEX_WAKE_BITSET|FUTEX_PRIVATE_FLAG, "FUTEX_WAKE_BITSET_PRIVATE" }, { 0, NULL } }; #ifndef FUTEX_OP_SET @@ -3264,13 +3269,19 @@ sys_futex(tcp) struct tcb *tcp; { if (entering(tcp)) { - long int cmd = tcp->u_arg[1] & ~FUTEX_PRIVATE_FLAG; + long int cmd = tcp->u_arg[1] & 127; tprintf("%p, ", (void *) tcp->u_arg[0]); printxval(futexops, tcp->u_arg[1], "FUTEX_???"); tprintf(", %ld", tcp->u_arg[2]); - if (cmd == FUTEX_WAIT) { + if (cmd == FUTEX_WAKE_BITSET) + tprintf(", %lx", tcp->u_arg[5]); + else if (cmd == FUTEX_WAIT) { + tprintf(", "); + printtv(tcp, tcp->u_arg[3]); + } else if (cmd == FUTEX_WAIT_BITSET) { tprintf(", "); printtv(tcp, tcp->u_arg[3]); + tprintf(", %lx", tcp->u_arg[5]); } else if (cmd == FUTEX_REQUEUE) tprintf(", %ld, %p", tcp->u_arg[3], (void *) tcp->u_arg[4]); else if (cmd == FUTEX_CMP_REQUEUE) -- 2.50.1