Jan Kratochvil writes: > 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).
That's how it's defined to work: %rbp is zero. > 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. Not by my understanding it isn't. It's set up by the runtime system, and 0 (i.e. NULL on x86-64) marks the end of the stack. Officially. See page 28, AMD64 ABI Draft 0.98 \u2013 September 27, 2006 -- 9:24. Andrew.