This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: c/8743: receiving result from __builtin_return_address() beyond stack top causes segfault
- From: Edward Welbourne <eddy at opera dot no>
- To: bangerth at dealii dot org, gcc-gnats at gcc dot gnu dot org
- Cc: biere at inf dot ethz dot ch, gcc-bugs at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org,nobody at gcc dot gnu dot org, steven dot robbins at videotron dot ca
- Date: Thu, 05 Dec 2002 11:04:34 +0100
- Subject: Re: c/8743: receiving result from __builtin_return_address() beyond stack top causes segfault
- References: <20021204220046.31176.qmail@sources.redhat.com>
- Reply-to: eddy at opera dot no
Also: note that the work-around only fixes the problem for the *first*
LEVEL at which it would otherwise seg-fault (which *is* just enough to
enable backtracing in ccmalloc); it does nothing about the segfault at
greater depth, which also happens in __builtin_frame_address(); if you
use __builtin_frame_address(3) in place of __builtin_return_address(2)
in the example code, you'll get a segfault just the same (on x86).
[All of which rather hints that these functions do a zig-zag chain of
pointer dereferences, which is missing an `are we zero yet' test.
I naively imagine this will be easy to fix.]
I've now had the opportunity to test the same on a ppc:
__builtin_return_address(2) segfaults, as does
__builtin_frame_address(4), but
__builtin_frame_address(3) actually succeeds !
This is with a 2.95.? version and with 3.2.1.
Eddy.