GDB backtrace and signal trampolines

Hollis Blanchard hollis at penguinppc.org
Wed Aug 24 23:52:36 EST 2005


On Aug 11, 2005, at 10:54 AM, Hollis Blanchard wrote:

> GDB 6.3 contains this code in ppc-linux-tdep.c:
>
> static const struct frame_unwind *
> ppc_linux_sigtramp_sniffer (struct frame_info *next_frame)
> {
>   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch 
> (next_frame));
>
>   if (frame_pc_unwind (next_frame)
>       > frame_unwind_register_unsigned (next_frame, SP_REGNUM))
>     /* Assume anything that is vaguely on the stack is a signal
>        trampoline.  */
>     return &ppc_linux_sigtramp_unwind;
>   else
>     return NULL;
> }
>
> Essentially it says that any time the program counter is above the 
> stack pointer, we must be in a signal trampoline, and so GDB proceeds 
> to grope about for a struct rt_sigframe on the stack.
>
> This is not a good assumption. I'm using a GDB stub to debug Xen, and 
> as it so happens, the Xen stack is below the Xen text. That means that 
> the above test always triggers, but of course there is no rt_sigframe 
> on the stack, and my backtrace runs away.

FYI: I looked at a GDB snapshot (gdb-6.3.50.20050818) and the problem 
had been resolved.

-Hollis




More information about the Linuxppc-dev mailing list