From patchwork Mon Mar 1 19:32:16 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Kuvyrkov X-Patchwork-Id: 46599 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id AE761B7DFE for ; Tue, 2 Mar 2010 06:37:07 +1100 (EST) Received: from localhost ([127.0.0.1]:37818 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NmBQN-0004j0-T9 for incoming@patchwork.ozlabs.org; Mon, 01 Mar 2010 14:37:03 -0500 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 Received: (qmail 4105 invoked from network); 1 Mar 2010 19:32:18 -0000 Received: from unknown (HELO ?172.16.1.24?) (maxim@127.0.0.2) by mail.codesourcery.com with ESMTPA; 1 Mar 2010 19:32:18 -0000 Message-ID: <4B8C1640.1090509@codesourcery.com> Date: Mon, 01 Mar 2010 22:32:16 +0300 From: Maxim Kuvyrkov User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.8) Gecko/20100216 Thunderbird/3.0.2 MIME-Version: 1.0 To: qemu-devel@nongnu.org References: <4B8C133D.2030900@codesourcery.com> In-Reply-To: <4B8C133D.2030900@codesourcery.com> X-detected-operating-system: by mx20.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Subject: [Qemu-devel] [PATCH 2/4] Handle SIGKILL and SIGCHLD X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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) {