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]

[Bug c/41990] Incorrect stack setup on x86_64



------- 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-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
>


-- 


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]