This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Bug c/41990] 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-bugzilla@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




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]