linux-user/syscall.c: handle FUTEX_WAIT_BITSET in do_futex

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>
This commit is contained in:
John Rigby 2013-02-23 16:14:07 -07:00 committed by Riku Voipio
parent d95ec14fd2
commit cce246e0a2

View File

@ -4922,6 +4922,7 @@ static int do_futex(target_ulong uaddr, int op, int val, target_ulong timeout,
#endif #endif
switch (base_op) { switch (base_op) {
case FUTEX_WAIT: case FUTEX_WAIT:
case FUTEX_WAIT_BITSET:
if (timeout) { if (timeout) {
pts = &ts; pts = &ts;
target_to_host_timespec(pts, timeout); target_to_host_timespec(pts, timeout);
@ -4929,7 +4930,7 @@ static int do_futex(target_ulong uaddr, int op, int val, target_ulong timeout,
pts = NULL; pts = NULL;
} }
return get_errno(sys_futex(g2h(uaddr), op, tswap32(val), return get_errno(sys_futex(g2h(uaddr), op, tswap32(val),
pts, NULL, 0)); pts, NULL, val3));
case FUTEX_WAKE: case FUTEX_WAKE:
return get_errno(sys_futex(g2h(uaddr), op, val, NULL, NULL, 0)); return get_errno(sys_futex(g2h(uaddr), op, val, NULL, NULL, 0));
case FUTEX_FD: case FUTEX_FD: