From patchwork Thu Mar 15 08:52:07 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Barcelo X-Patchwork-Id: 146857 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 8A5DAB6EEA for ; Thu, 15 Mar 2012 19:53:18 +1100 (EST) Received: from localhost ([::1]:53214 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S86Qt-0003sA-JO for incoming@patchwork.ozlabs.org; Thu, 15 Mar 2012 04:53:15 -0400 Received: from eggs.gnu.org ([208.118.235.92]:36340) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S86QV-0002vS-5c for qemu-devel@nongnu.org; Thu, 15 Mar 2012 04:52:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S86Q6-0003AJ-1z for qemu-devel@nongnu.org; Thu, 15 Mar 2012 04:52:50 -0400 Received: from mail-we0-f173.google.com ([74.125.82.173]:62880) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S86Q5-00039m-KW for qemu-devel@nongnu.org; Thu, 15 Mar 2012 04:52:25 -0400 Received: by werp12 with SMTP id p12so2964129wer.4 for ; Thu, 15 Mar 2012 01:52:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=Lm1ML8rrfdUgGi1CbZmco6XMK9Pn7ntET1ibnHif2ko=; b=k5JLYb5ZuIabyk/K2jugxE0vQlM2465p+N33v/y0eGp3jpLkWvsAKZlBGryhL2AQzX TLWZjB+SkD9VrnrfIR8Gf5fKxkdZV8it8mwtV4y54OJc4I1zmfQYmqrwB6JTbUPnTM/m vDmNg2pmycFSsfSZ8HyF3i2IUKnQZNCdv9TI9T2tdA/rFQkHNLlONwq1AyreFQeEaPwF w40X5Spl+XmZg8y+FiRZLvdB1KGGtryLc3iE+OKnAstiN0RKrCm8MpQCVUKECAAPCCwY WuV6X/Ij588FnD0uti+ArBTKirylC5ajvnA9iFYP26arzvvGzaAKjlxU8U+5meAyq7wc j18Q== Received: by 10.180.96.168 with SMTP id dt8mr13068623wib.18.1331801541562; Thu, 15 Mar 2012 01:52:21 -0700 (PDT) Received: from localhost.localdomain (62.57.1.36.dyn.user.ono.com. [62.57.1.36]) by mx.google.com with ESMTPS id d7sm5773721wiz.6.2012.03.15.01.52.20 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 15 Mar 2012 01:52:21 -0700 (PDT) From: Alex Barcelo To: Date: Thu, 15 Mar 2012 09:52:07 +0100 Message-Id: <1331801528-4646-2-git-send-email-abarcelo@ac.upc.edu> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1331801528-4646-1-git-send-email-abarcelo@ac.upc.edu> References: <1331801528-4646-1-git-send-email-abarcelo@ac.upc.edu> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 74.125.82.173 Cc: Riku Voipio , Alex Barcelo Subject: [Qemu-devel] [PATCH 1/2] linux-user: Homogeneity on sas_ss_flags checks (signal) X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Each architecture does the same comparation, but it is hard (at least was hard for me) to see, because of the fancy way of doing a simple 0 comparation. This patch simply tries to assure signal.c code coherence. Signed-off-by: Alex Barcelo --- linux-user/signal.c | 44 +++++++++++++++++++++++++------------------- 1 files changed, 25 insertions(+), 19 deletions(-) diff --git a/linux-user/signal.c b/linux-user/signal.c index fca51e2..d1a2671 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -804,19 +804,21 @@ get_sigframe(struct target_sigaction *ka, CPUX86State *env, size_t frame_size) /* Default to using normal stack */ esp = env->regs[R_ESP]; /* This is the X/Open sanctioned signal stack switching. */ - if (ka->sa_flags & TARGET_SA_ONSTACK) { - if (sas_ss_flags(esp) == 0) - esp = target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size; + if (ka->sa_flags & TARGET_SA_ONSTACK) { + if (sas_ss_flags(esp) == 0) { + esp = (target_sigaltstack_used.ss_sp + + target_sigaltstack_used.ss_size); } - - /* This is the legacy signal stack switching. */ - else + } else { + /* This is the legacy signal stack switching. */ if ((env->segs[R_SS].selector & 0xffff) != __USER_DS && !(ka->sa_flags & TARGET_SA_RESTORER) && ka->sa_restorer) { esp = (unsigned long) ka->sa_restorer; - } - return (esp - frame_size) & -8ul; + } + } + + return (esp - frame_size) & -8ul; } /* compare linux/arch/i386/kernel/signal.c:setup_frame() */ @@ -1248,8 +1250,10 @@ get_sigframe(struct target_sigaction *ka, CPUARMState *regs, int framesize) /* * This is the X/Open sanctioned signal stack switching. */ - if ((ka->sa_flags & TARGET_SA_ONSTACK) && !sas_ss_flags(sp)) - sp = target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size; + if ((ka->sa_flags & TARGET_SA_ONSTACK) && + (sas_ss_flags(sp) == 0)) { + sp = target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size; + } /* * ATPCS B01 mandates 8-byte alignment */ @@ -2710,7 +2714,8 @@ get_sigframe(struct target_sigaction *ka, CPUMIPSState *regs, size_t frame_size) sp -= 32; /* This is the X/Open sanctioned signal stack switching. */ - if ((ka->sa_flags & TARGET_SA_ONSTACK) && (sas_ss_flags (sp) == 0)) { + if ((ka->sa_flags & TARGET_SA_ONSTACK) && + (sas_ss_flags(sp) == 0)) { sp = target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size; } @@ -2969,7 +2974,8 @@ struct target_rt_sigframe static abi_ulong get_sigframe(struct target_sigaction *ka, unsigned long sp, size_t frame_size) { - if ((ka->sa_flags & TARGET_SA_ONSTACK) && (sas_ss_flags(sp) == 0)) { + if ((ka->sa_flags & TARGET_SA_ONSTACK) && + (sas_ss_flags(sp) == 0)) { sp = target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size; } @@ -3698,11 +3704,9 @@ get_sigframe(struct target_sigaction *ka, CPUS390XState *env, size_t frame_size) sp = env->regs[15]; /* This is the X/Open sanctioned signal stack switching. */ - if (ka->sa_flags & TARGET_SA_ONSTACK) { - if (!sas_ss_flags(sp)) { - sp = target_sigaltstack_used.ss_sp + - target_sigaltstack_used.ss_size; - } + if ((ka->sa_flags & TARGET_SA_ONSTACK) && + (sas_ss_flags(sp) == 0) { + sp = target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size; } /* This is the legacy signal stack switching. */ @@ -4668,7 +4672,8 @@ get_sigframe(struct target_sigaction *ka, CPUM68KState *regs, sp = regs->aregs[7]; /* This is the X/Open sanctioned signal stack switching. */ - if ((ka->sa_flags & TARGET_SA_ONSTACK) && (sas_ss_flags (sp) == 0)) { + if ((ka->sa_flags & TARGET_SA_ONSTACK) && + (sas_ss_flags(sp) == 0)) { sp = target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size; } @@ -5046,7 +5051,8 @@ static inline abi_ulong get_sigframe(struct target_sigaction *sa, abi_ulong sp = env->ir[IR_SP]; /* This is the X/Open sanctioned signal stack switching. */ - if ((sa->sa_flags & TARGET_SA_ONSTACK) != 0 && !sas_ss_flags(sp)) { + if ((sa->sa_flags & TARGET_SA_ONSTACK) && + (sas_ss_flags(sp) == 0)) { sp = target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size; } return (sp - framesize) & -32;