Commit a29ccd6382eb4c9df72cfd10e279d5f56448b0f4
Committed by
Riku Voipio
1 parent
350d1779
linux-user: support private futexes
Implemented the same way as in the kernel. From: Martin Mohring <martin.mohring@opensuse.org> Signed-off-by: Riku Voipio <riku.voipio@iki.fi>
Showing
1 changed file
with
9 additions
and
5 deletions
linux-user/syscall.c
... | ... | @@ -3926,7 +3926,11 @@ static int do_futex(target_ulong uaddr, int op, int val, target_ulong timeout, |
3926 | 3926 | |
3927 | 3927 | /* ??? We assume FUTEX_* constants are the same on both host |
3928 | 3928 | and target. */ |
3929 | +#ifdef FUTEX_CMD_MASK | |
3930 | + switch ((op&FUTEX_CMD_MASK)) { | |
3931 | +#else | |
3929 | 3932 | switch (op) { |
3933 | +#endif | |
3930 | 3934 | case FUTEX_WAIT: |
3931 | 3935 | if (timeout) { |
3932 | 3936 | pts = &ts; |
... | ... | @@ -3934,17 +3938,17 @@ static int do_futex(target_ulong uaddr, int op, int val, target_ulong timeout, |
3934 | 3938 | } else { |
3935 | 3939 | pts = NULL; |
3936 | 3940 | } |
3937 | - return get_errno(sys_futex(g2h(uaddr), FUTEX_WAIT, tswap32(val), | |
3941 | + return get_errno(sys_futex(g2h(uaddr), op, tswap32(val), | |
3938 | 3942 | pts, NULL, 0)); |
3939 | 3943 | case FUTEX_WAKE: |
3940 | - return get_errno(sys_futex(g2h(uaddr), FUTEX_WAKE, val, NULL, NULL, 0)); | |
3944 | + return get_errno(sys_futex(g2h(uaddr), op, val, NULL, NULL, 0)); | |
3941 | 3945 | case FUTEX_FD: |
3942 | - return get_errno(sys_futex(g2h(uaddr), FUTEX_FD, val, NULL, NULL, 0)); | |
3946 | + return get_errno(sys_futex(g2h(uaddr), op, val, NULL, NULL, 0)); | |
3943 | 3947 | case FUTEX_REQUEUE: |
3944 | - return get_errno(sys_futex(g2h(uaddr), FUTEX_REQUEUE, val, | |
3948 | + return get_errno(sys_futex(g2h(uaddr), op, val, | |
3945 | 3949 | NULL, g2h(uaddr2), 0)); |
3946 | 3950 | case FUTEX_CMP_REQUEUE: |
3947 | - return get_errno(sys_futex(g2h(uaddr), FUTEX_CMP_REQUEUE, val, | |
3951 | + return get_errno(sys_futex(g2h(uaddr), op, val, | |
3948 | 3952 | NULL, g2h(uaddr2), tswap32(val3))); |
3949 | 3953 | default: |
3950 | 3954 | return -TARGET_ENOSYS; | ... | ... |