aboutsummaryrefslogtreecommitdiff
path: root/linux-user/syscall.c
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2022-03-15 01:43:04 -0700
committerLaurent Vivier <laurent@vivier.eu>2022-03-22 13:06:21 +0100
commit7fb5ef350bb434644fe1ac8eeb973543e017c932 (patch)
tree2c312f8534fb9feebfbd7fd77436849e463e7b8f /linux-user/syscall.c
parent80f0fe3a854081e6d2e3a35275eeec1e2e9a7794 (diff)
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.c3
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)))