From 1c3dfb506ea3decd17ec69ed6eaf611a885b9f59 Mon Sep 17 00:00:00 2001 From: Alistair Francis Date: Tue, 19 Jan 2021 10:24:52 -0800 Subject: linux-user/signal: Decode waitid si_code When mapping the host waitid status to the target status we previously just used decoding information in the status value. This doesn't follow what the waitid documentation describes, which instead suggests using the si_code value for the decoding. This results in the incorrect values seen when calling waitid. This is especially apparent on RV32 where all wait calls use waitid (see the bug case). This patch just passes the waitid status directly back to the guest. Buglink: https://bugs.launchpad.net/qemu/+bug/1906193 Signed-off-by: Alistair Francis Tested-by: Andreas K. Hüttel Reviewed-by: Laurent Vivier Message-Id: <1fb2d56aa23a81f4473e638abe9e2d78c09a3d5b.1611080607.git.alistair.francis@wdc.com> Signed-off-by: Laurent Vivier --- linux-user/signal.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'linux-user/signal.c') diff --git a/linux-user/signal.c b/linux-user/signal.c index 73de934c65..7eecec46c4 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -349,8 +349,7 @@ static inline void host_to_target_siginfo_noswap(target_siginfo_t *tinfo, case TARGET_SIGCHLD: tinfo->_sifields._sigchld._pid = info->si_pid; tinfo->_sifields._sigchld._uid = info->si_uid; - tinfo->_sifields._sigchld._status - = host_to_target_waitstatus(info->si_status); + tinfo->_sifields._sigchld._status = info->si_status; tinfo->_sifields._sigchld._utime = info->si_utime; tinfo->_sifields._sigchld._stime = info->si_stime; si_type = QEMU_SI_CHLD; -- cgit v1.2.3-55-g7522