Re: GDB cannot access memory after Emacs abort

Michael Snyder
2007-11-15T01:00:34Z

On Wed, 2007-11-14 at 20:22 +0100, Stephen Berman wrote:
> On Wed, 14 Nov 2007 03:50:53 -0800 Michael Snyder <msnyder@specifix.com> wrote:
>
> > On Wed, 2007-11-14 at 10:48 +0100, Stephen Berman wrote:
> >
> >> Thanks for this suggestion, it worked. Here's the backtrace:
> >
> > OK, this is great! See below.
> >
> >> #0 abort () at emacs.c:431
> >> #1 0xb798526a in g_logv () from /usr/lib/libglib-2.0.so.0
> >> #2 0xb79852a9 in g_log () from /usr/lib/libglib-2.0.so.0
> >> #3 0xb7985320 in g_assert_warning () from /usr/lib/libglib-2.0.so.0
> >> #4 0xb7c7b195 in gtk_container_propagate_expose () from /usr/lib/libgtk-x11-2.0.so.0
> >> #5 0xb7c7b1c1 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
> >> #6 0x085c2d00 in ?? ()
> >> #7 0x086c0a08 in ?? ()
> >> #8 0x087c31f0 in ?? ()
> > [...]
> >
> >> I don't know if this is useful to you or any other gdb hacker. I don't
> >> have the GTK+ sources installed. Maybe someone who does can reproduce
> >> the abort and get a more informative backtrace.
> >
> > You don't need to have the sources installed, but
> > it appears as if GDB can't find symbols for the shared libraries.
>
> What does it mean that in frame #4 of the backtrace the symbol
> gtk_container_propagate_expose from /usr/lib/libgtk-x11-2.0.so.0 is
> referenced but starting in the next stack frame there is only ?? with
> reference to the same library?

It means that:
For frame #4, gdb found a PC address that fit inside the bounds
of the text section of libgtk-x1-2.0.so, and corresponded with
the function "gtk_container_propagate_expose" from that library.

For frame #5, gdb found a PC address that also fit the address
range of that library, but did not correspond with any function
symbol.

For frame #6, gdb found a PC address that did not match with
any known section of an object file (eg. shared library), and
could not be matched against any known function symbol.

> That gdb is finding some but not all
> symbols? Note that when I attached the emacs process to gdb, it
> returned a slew of message like this:
>
> Reading symbols from /usr/lib/libgtk-x11-2.0.so.0...done.
> Loaded symbols for /usr/lib/libgtk-x11-2.0.so.0
> Reading symbols from /usr/lib/libgdk-x11-2.0.so.0...done.
> Loaded symbols for /usr/lib/libgdk-x11-2.0.so.0
> Reading symbols from /usr/lib/libatk-1.0.so.0...done.
> Loaded symbols for /usr/lib/libatk-1.0.so.0
> Reading symbols from /usr/lib/libgdk_pixbuf-2.0.so.0...done.

OK -- do you know whether these messages accounted for all
known libraries used by emacs? Could there be some libraries
that are missing (therefore gdb does not have symbols for)?

...

> What is the significance of the stack frames
> #6 0x0833e1b0 in ceil ()
> and so on (note it's always the same address)?

It may be garbage. The stack unwind may have become corrupt
by that point (I can't tell). If we assume it is meaningful,
it means that gdb found a PC for the stack frame for which
the nearest corresponding function symbol is "ceil".