diff options
Diffstat (limited to 'linux-user')
-rw-r--r-- | linux-user/hppa/target_fcntl.h | 1 | ||||
-rw-r--r-- | linux-user/syscall.c | 9 |
2 files changed, 8 insertions, 2 deletions
diff --git a/linux-user/hppa/target_fcntl.h b/linux-user/hppa/target_fcntl.h index 08e3a4fcb0..4eb0ec98e2 100644 --- a/linux-user/hppa/target_fcntl.h +++ b/linux-user/hppa/target_fcntl.h @@ -9,6 +9,7 @@ #define HPPA_TARGET_FCNTL_H #define TARGET_O_NONBLOCK 000200000 +#define TARGET_O_NONBLOCK_MASK 000200004 /* includes old HP-UX NDELAY flag */ #define TARGET_O_APPEND 000000010 #define TARGET_O_CREAT 000000400 /* not fcntl */ #define TARGET_O_EXCL 000002000 /* not fcntl */ diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 34760779c8..dcb4009e2f 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -277,6 +277,11 @@ static type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, \ #define TARGET_NR__llseek TARGET_NR_llseek #endif +/* some platforms need to mask more bits than just TARGET_O_NONBLOCK */ +#ifndef TARGET_O_NONBLOCK_MASK +#define TARGET_O_NONBLOCK_MASK TARGET_O_NONBLOCK +#endif + #define __NR_sys_gettid __NR_gettid _syscall0(int, sys_gettid) @@ -7777,7 +7782,7 @@ static abi_long do_signalfd4(int fd, abi_long mask, int flags) sigset_t host_mask; abi_long ret; - if (flags & ~(TARGET_O_NONBLOCK | TARGET_O_CLOEXEC)) { + if (flags & ~(TARGET_O_NONBLOCK_MASK | TARGET_O_CLOEXEC)) { return -TARGET_EINVAL; } if (!lock_user_struct(VERIFY_READ, target_mask, mask, 1)) { @@ -12566,7 +12571,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1, #if defined(TARGET_NR_eventfd2) case TARGET_NR_eventfd2: { - int host_flags = arg2 & (~(TARGET_O_NONBLOCK | TARGET_O_CLOEXEC)); + int host_flags = arg2 & (~(TARGET_O_NONBLOCK_MASK | TARGET_O_CLOEXEC)); if (arg2 & TARGET_O_NONBLOCK) { host_flags |= O_NONBLOCK; } |