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:
parent
d95ec14fd2
commit
cce246e0a2
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user