[ARM]backtrace does not go beyond libc functions

Sundar Dev <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAHOCAJYDEs-E2mReG5psMmDX96gNB0XjhGP4=0rpOhXM2Kyd_Q@mail.gmail.com>
Hi List Members:

First things first- I am using gdbserver 7.6.2 for remote debugging.
The other main components are- GNU libc-2.19 that comes packaged in
Yocto Poky 'Daisy' release for one of my projects. This is
cross-compiled for ARMv7 and we use arm-poky-linux-gnueabi-gcc (GCC)
4.8.2 toolchain.

I use the *non-debug* version of glibc (with no .debug sections in
elf), but built with ARM unwind tables and ARM frame pointer support.
With this setup, when a user space thread is executing a blocking libc
function like poll(), read(), etc., and I attach a remote gdbserver to
the process and try to get backtrace, all I see is the following 4
backtrace frames as shown below-
(gdb) bt
#0  0x758b9190 in poll () from /lib/libc.so.6
#1  0x758b9184 in poll () from /lib/libc.so.6
#2  0x013df120 in ?? ()
#3  0x013df120 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

And address 0x013df120 is in the heap region in proc/<pid>/maps (shown
below) of my process-
root@xyz# cat /proc/621/maps
...<snip>...
01389000-0154e000 rw-p 00000000 00:00 0          [heap]
...<snip>...

I've looked at gdb source code and I know that the version of gdb that I'm using
(7.6.2) has support to backtrace using ARM unwind tables and frame
pointers (see [1] and [2]). But, even then, all I get from GDB
backtrace is the above shown output. Does anybody here have any
comments and/or suggestions?

Thanks,
Sundar Dev

[1] https://sourceware.org/ml/gdb-cvs/2011-02/msg00011.html
[2] https://sourceware.org/ml/gdb-cvs/2011-02/msg00012.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.