Hi, On Mon, 11 Dec 2006, Jan Kratochvil wrote:
> currently (on x86_64) the gdb backtrace does not properly stop at the > outermost > frame: > > #3 0x00000036ddb0610a in start_thread () from /lib64/tls/libpthread.so.0 > #4 0x00000036dd0c68c3 in clone () from /lib64/tls/libc.so.6 > #5 0x0000000000000000 in ?? () > > Currently it relies only on clearing %rbp (0x0000000000000000 above is > unrelated to it, it got read from uninitialized memory). > > http://sourceware.org/ml/gdb/2004-08/msg00060.html suggests frame > pointer 0x0 should be enough for a debugger not finding CFI to stop > unwinding, still it is a heuristic. In the -fno-frame-pointer compiled > code there is no indication the frame pointer register became a regular > one and 0x0 is its valid value. Right. Unwinding through functions (without frame pointer) requires CFI. If there is CFI for a function the unwinder must not look at %rbp for stop condition. If there's no CFI for a function it can't be unwound (strictly per ABI). If one relaxes that and wants to unwind through CFI-less functions it has to have a frame pointer. In that case zero in that frame pointer could indicate the outermost frame (_if_ the suggestion in the ABI is adhered to, which noone is required to). Ciao, Michael.