------- 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. Sent from my iPhone 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