From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29363 invoked by alias); 8 Nov 2009 20:37:36 -0000 Received: (qmail 29342 invoked by alias); 8 Nov 2009 20:37:25 -0000 Date: Sun, 08 Nov 2009 20:37:00 -0000 Message-ID: <20091108203725.29341.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug c/41990] Incorrect stack setup on x86_64 In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "cube at cubidou dot net" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2009-11/txt/msg00735.txt.bz2 ------- Comment #3 from cube at cubidou dot net 2009-11-08 20:37 ------- Subject: Re: Incorrect stack setup on x86_64 On Sun, Nov 08, 2009 at 08:29:44PM -0000, pinskia at gmail dot com wrote: > > > ------- Comment #2 from pinskia at gmail dot com 2009-11-08 20:29 ------- > Subject: Re: New: Incorrect stack setup on x86_64 > > The x86_64 abi includes a red zone. So I doubt this a bug in gcc > unless netbsd's abi does not match what gcc does. 152 is too small even for the total size of the local variables (268 in the attached test case). How a red zone can even be considered in that case? > On Nov 8, 2009, at 12:25 PM, "cube at cubidou dot net" > > wrote: > > > Provided a somewhat specific set of local variables, and as long as > > the code of > > the function doesn't make any other function calls, gcc will > > decrease %rsp but > > an incorrect and too small value. This leads to local variables being > > corrupted when the execution is interrupted; this happens notably > > in the > > kernel where interrupts use the stack of the thread they interrupted. > > > > The file that I will hopefully be able to attach to that report > > demonstrates > > the issue, if you look at the assembler output. With the function > > call > > commented out, gcc sets up the stack that way: > > > > movq %rsp, %rbp > > subq $152, %rsp > > > > and later access one of the local variables with: > > > > movl $0, -272(%rbp,%rax,4) > > > > When the function call is uncommented, the subq instruction here > > will correctly > > substract 272 to %rsp. > > > > I've compiled a 4.4.2 for the sole purpose of doing this bug > > report; NetBSD > > comes with 4.1.3 and that's where the bug was initially spotted. > > > > > > -- > > Summary: Incorrect stack setup on x86_64 > > Product: gcc > > Version: 4.4.2 > > Status: UNCONFIRMED > > Severity: major > > Priority: P3 > > Component: c > > AssignedTo: unassigned at gcc dot gnu dot org > > ReportedBy: cube at cubidou dot net > > GCC build triplet: x86_64-unknown-netbsd4.99.60 > > GCC host triplet: x86_64-unknown-netbsd4.99.60 > > GCC target triplet: x86_64-unknown-netbsd4.99.60 > > > > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41990 > > > > > -- > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41990 > > ------- You are receiving this mail because: ------- > You reported the bug, or are watching the reporter. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41990