]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
linux-user/syscall.c: handle FUTEX_WAIT_BITSET in do_futex
authorJohn Rigby <john.rigby@linaro.org>
Sat, 23 Feb 2013 23:14:07 +0000 (16:14 -0700)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Tue, 2 Apr 2013 20:48:35 +0000 (15:48 -0500)
Upstream libc has recently changed to start using
FUTEX_WAIT_BITSET instead of FUTEX_WAIT and this
is causing do_futex to return -TARGET_ENOSYS.

Pass bitset in val3 to sys_futex which will be
ignored by kernel for the FUTEX_WAIT case.

Signed-off-by: John Rigby <john.rigby@linaro.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
(cherry picked from commit cce246e0a21577bb2372ab3a7d6789371e087de9)

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
linux-user/syscall.c

index 9e31ea72004ae3bc4b98f51a22255056c03af82a..7bc5ba9acff90f6ce1b087f1f13c868f08506a68 100644 (file)
@@ -4920,6 +4920,7 @@ static int do_futex(target_ulong uaddr, int op, int val, target_ulong timeout,
 #endif
     switch (base_op) {
     case FUTEX_WAIT:
+    case FUTEX_WAIT_BITSET:
         if (timeout) {
             pts = &ts;
             target_to_host_timespec(pts, timeout);
@@ -4927,7 +4928,7 @@ static int do_futex(target_ulong uaddr, int op, int val, target_ulong timeout,
             pts = NULL;
         }
         return get_errno(sys_futex(g2h(uaddr), op, tswap32(val),
-                         pts, NULL, 0));
+                         pts, NULL, val3));
     case FUTEX_WAKE:
         return get_errno(sys_futex(g2h(uaddr), op, val, NULL, NULL, 0));
     case FUTEX_FD: