diff options
author | Richard Henderson | 2022-03-15 09:43:04 +0100 |
---|---|---|
committer | Laurent Vivier | 2022-03-22 13:06:21 +0100 |
commit | 7fb5ef350bb434644fe1ac8eeb973543e017c932 (patch) | |
tree | 2c312f8534fb9feebfbd7fd77436849e463e7b8f /linux-user/syscall.c | |
parent | linux-user: Fix syscall parameter handling for MIPS n32 (diff) | |
download | qemu-7fb5ef350bb434644fe1ac8eeb973543e017c932.tar.gz qemu-7fb5ef350bb434644fe1ac8eeb973543e017c932.tar.xz qemu-7fb5ef350bb434644fe1ac8eeb973543e017c932.zip |
linux-user/alpha: Fix sigsuspend for big-endian hosts
On alpha, the sigset argument for sigsuspend is in a register.
When we drop that into memory that happens in host-endianness,
but target_to_host_old_sigset will treat it as target-endianness.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20220315084308.433109-2-richard.henderson@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Diffstat (limited to 'linux-user/syscall.c')
-rw-r--r-- | linux-user/syscall.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 75ed71eb46..77cd88b537 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -9559,7 +9559,8 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1, { TaskState *ts = cpu->opaque; #if defined(TARGET_ALPHA) - abi_ulong mask = arg1; + /* target_to_host_old_sigset will bswap back */ + abi_ulong mask = tswapal(arg1); target_to_host_old_sigset(&ts->sigsuspend_mask, &mask); #else if (!(p = lock_user(VERIFY_READ, arg1, sizeof(target_sigset_t), 1))) |