From patchwork Wed Nov 16 08:25:54 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Huber X-Patchwork-Id: 125950 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 66B60B6F9C for ; Wed, 16 Nov 2011 19:26:15 +1100 (EST) Received: (qmail 23121 invoked by alias); 16 Nov 2011 08:26:11 -0000 Received: (qmail 23104 invoked by uid 22791); 16 Nov 2011 08:26:10 -0000 X-SWARE-Spam-Status: No, hits=0.9 required=5.0 tests=AWL, BAYES_50, RDNS_DYNAMIC, T_FILL_THIS_FORM_SHORT X-Spam-Check-By: sourceware.org Received: from host-82-135-62-35.customer.m-online.net (HELO mail.embedded-brains.de) (82.135.62.35) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 16 Nov 2011 08:25:58 +0000 Received: by mail.embedded-brains.de (Postfix, from userid 65534) id 9D09E65261D; Wed, 16 Nov 2011 09:25:57 +0100 (CET) Received: from [192.168.96.31] (eb0011.eb.z [192.168.96.31]) by mail.embedded-brains.de (Postfix) with ESMTP id 755A565261B for ; Wed, 16 Nov 2011 09:25:54 +0100 (CET) Message-ID: <4EC37392.4030209@embedded-brains.de> Date: Wed, 16 Nov 2011 09:25:54 +0100 From: Sebastian Huber User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110920 SUSE/3.1.15 Lightning/1.0b2 Thunderbird/3.1.15 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Subject: Re: [PATCH, ARM] Fix stack red zone bug (PR38644) for GCC 4.4 References: <000e01cc9907$01ce9b80$056bd280$@liu@arm.com> In-Reply-To: <000e01cc9907$01ce9b80$056bd280$@liu@arm.com> X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, this is Jiangning Liu's patch to fix PR38644 in ARM back-end http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38644. intended for the GCC 4.4 branch. I didn't run the test suite. I only compiled the arm-eabi-gcc and checked that this patch fixes the test case. ChangeLog: 2011-11-04 Jiangning Liu PR rtl-optimization/38644 * config/arm/arm.c (thumb1_expand_epilogue): Add memory barrier for epilogue having stack adjustment. ChangeLog of testsuite: 2011-11-04 Jiangning Liu PR rtl-optimization/38644 * gcc.target/arm/stack-red-zone.c: New. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index eed5cfd..69641ef 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -17682,6 +17682,8 @@ thumb1_expand_epilogue (void) gcc_assert (amount >= 0); if (amount) { + emit_insn (gen_blockage ()); + if (amount < 512) emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, GEN_INT (amount))); diff --git a/gcc/testsuite/gcc.target/arm/stack-red-zone.c b/gcc/testsuite/gcc.target/arm/stack-red-zone.c new file mode 100644 index 0000000..b9f0f99 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/stack-red-zone.c @@ -0,0 +1,12 @@ +/* No stack red zone. PR38644. */ +/* { dg-options "-mthumb -O2" } */ +/* { dg-final { scan-assembler "ldrb\[^\n\]*\\n\[\t \]*add\[\t \]*sp" } } */ + +extern int doStreamReadBlock (int *, char *, int size, int); + +char readStream (int *s) +{ + char c = 0; + doStreamReadBlock (s, &c, 1, *s); + return c; +}