From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NmBLq-0002Wj-UF for qemu-devel@nongnu.org; Mon, 01 Mar 2010 14:32:23 -0500 Received: from [199.232.76.173] (port=35507 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NmBLq-0002VH-2G for qemu-devel@nongnu.org; Mon, 01 Mar 2010 14:32:22 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NmBLp-00063U-8X for qemu-devel@nongnu.org; Mon, 01 Mar 2010 14:32:21 -0500 Received: from mx20.gnu.org ([199.232.41.8]:19319) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NmBLp-00063Q-1f for qemu-devel@nongnu.org; Mon, 01 Mar 2010 14:32:21 -0500 Received: from mail.codesourcery.com ([38.113.113.100]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NmBLo-00026D-23 for qemu-devel@nongnu.org; Mon, 01 Mar 2010 14:32:20 -0500 Message-ID: <4B8C1640.1090509@codesourcery.com> Date: Mon, 01 Mar 2010 22:32:16 +0300 From: Maxim Kuvyrkov MIME-Version: 1.0 References: <4B8C133D.2030900@codesourcery.com> In-Reply-To: <4B8C133D.2030900@codesourcery.com> Content-Type: multipart/mixed; boundary="------------020708070003010507030500" Subject: [Qemu-devel] [PATCH 2/4] Handle SIGKILL and SIGCHLD List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------020708070003010507030500 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit --------------020708070003010507030500 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="0002-Handle-SIGKILL-and-SIGCHLD.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0002-Handle-SIGKILL-and-SIGCHLD.patch" >>From a659ff77804712826c1c1fe739339f1b1a172ed6 Mon Sep 17 00:00:00 2001 From: Maxim Kuvyrkov Date: Mon, 1 Mar 2010 02:39:48 -0800 Subject: [PATCH 2/4] Handle SIGKILL and SIGCHLD Handle SIGKILL and SIGCHLD in linux user-space emulation. Signed-off-by: Maxim Kuvyrkov --- linux-user/signal.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-) diff --git a/linux-user/signal.c b/linux-user/signal.c index a560a5c..8f9da80 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -213,6 +213,15 @@ static inline void host_to_target_siginfo_noswap(target_siginfo_t *tinfo, /* should never come here, but who knows. The information for the target is irrelevant */ tinfo->_sifields._sigfault._addr = 0; + } else if (sig == SIGKILL || sig == SIGCHLD) { + tinfo->_sifields._kill._pid = info->si_pid; + tinfo->_sifields._kill._uid = info->si_uid; + + if (sig == SIGCHLD) { + tinfo->_sifields._sigchld._status = info->si_status; + tinfo->_sifields._sigchld._utime = info->si_utime; + tinfo->_sifields._sigchld._stime = info->si_stime; + } } else if (sig == SIGIO) { tinfo->_sifields._sigpoll._fd = info->si_fd; } else if (sig >= TARGET_SIGRTMIN) { @@ -236,6 +245,18 @@ static void tswap_siginfo(target_siginfo_t *tinfo, sig == SIGBUS || sig == SIGTRAP) { tinfo->_sifields._sigfault._addr = tswapl(info->_sifields._sigfault._addr); + } else if (sig == SIGKILL || sig == SIGCHLD) { + tinfo->_sifields._kill._pid = tswap32(info->_sifields._kill._pid); + tinfo->_sifields._kill._uid = tswap32(info->_sifields._kill._uid); + + if (sig == SIGCHLD) { + tinfo->_sifields._sigchld._status + = tswap32(info->_sifields._sigchld._status); + tinfo->_sifields._sigchld._utime + = tswap32(info->_sifields._sigchld._utime); + tinfo->_sifields._sigchld._stime + = tswap32(info->_sifields._sigchld._stime); + } } else if (sig == SIGIO) { tinfo->_sifields._sigpoll._fd = tswap32(info->_sifields._sigpoll._fd); } else if (sig >= TARGET_SIGRTMIN) { -- 1.6.2.4 --------------020708070003010507030500--