------- 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"
> <gcc-bugzi...@gcc.gnu.org 
>  > 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

Reply via email to