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