From mboxrd@z Thu Jan 1 00:00:00 1970 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) Sender: Alex Barcelo From: Alex Barcelo Date: Thu, 15 Mar 2012 09:52:07 +0100 Message-Id: <1331801528-4646-2-git-send-email-abarcelo@ac.upc.edu> In-Reply-To: <1331801528-4646-1-git-send-email-abarcelo@ac.upc.edu> References: <1331801528-4646-1-git-send-email-abarcelo@ac.upc.edu> Subject: [Qemu-devel] [PATCH 1/2] linux-user: Homogeneity on sas_ss_flags checks (signal) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Riku Voipio , Alex Barcelo 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; -- 1.7.5.4