On Fri, Oct 25, 2002 at 10:59:29AM +0200, Martin v. Loewis wrote: > Greg Stark <[EMAIL PROTECTED]> writes: > > > Well, that's not what my documentation from GCC 2.95 says: > > > > On some machines it may be impossible to determine the return > > address of any function other than the current one; in such cases, > > or when the top of the stack has been reached, this function will > > return `0'. > > So you have found a bug in the 2.95 documentation. Just imagine it > would have the same text as the 3.2 documentation.
Except that I don't know whether __builtin_frame_address can be used in 2.95. Also, Greg, be aware that despite the comment you can't _necessarily_ use __builtin_frame_address above frame 0. That's just the risk you take; thus the comment about "for debugging use only". > > I'm puzzled why I can use __builtin_frame_address to determine if > > the top of the stack has been reached but gcc's builtin can't do the > > same for me. I must be missing something, how do gdb and other tools > > happily decode stack traces all the time without crashing? > > They are not very happy in doing so :-) They use lots of heuristics > which are unavailable to __builtin_return_address. GDB will not crash from reading memory, because it cheats and reads in a crash-proof way :) For i386 and PPC you can use backtrace() in glibc. In fact, in general it's usable; I see special support for PPC, i386, ARM, s390, and HPPA. And it's more reliable than your method, too. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer