handle an unspecified return address column
authorTom Tromey <tromey@redhat.com>
Wed, 13 Nov 2013 18:10:55 +0000 (11:10 -0700)
committerTom Tromey <tromey@redhat.com>
Fri, 22 Nov 2013 18:02:01 +0000 (11:02 -0700)
commitda2b2fdf57a96f7a5b6b153e94afb747e212b17f
tree8c60ba7bea00cadcb485eb9d3ea0aeec9fa02be2
parent6eeee81c8e59511962bdd83df5e7785bfdf871d2
handle an unspecified return address column

Debugging PR 16155 further, I found that the DWARF unwinder found the
function in question, but thought it had no registers saved
(fs->regs.num_regs == 0).

It seems to me that if a frame does not specify the return address
column, or if the return address column is explicitly marked as
DWARF2_FRAME_REG_UNSPECIFIED, then we should set the
"undefined_retaddr" flag and let the DWARF unwinder gracefully stop.

This patch implements that idea.

With this patch the backtrace works properly:

    (gdb) bt
    #0  0x0000007fb7ed485c in nanosleep () from /lib64/libc.so.6
    #1  0x0000007fb7ed4508 in sleep () from /lib64/libc.so.6
    #2  0x00000000004008bc in thread_function (arg=0x4) at threadapply.c:73
    #3  0x0000007fb7fad950 in start_thread () from /lib64/libpthread.so.0
    #4  0x0000007fb7f0956c in clone () from /lib64/libc.so.6

2013-11-22  Tom Tromey  <tromey@redhat.com>

PR backtrace/16155:
* dwarf2-frame.c (dwarf2_frame_cache): Set undefined_retaddr if
the return address column is unspecified.

2013-11-22  Tom Tromey  <tromey@redhat.com>

* gdb.dwarf2/dw2-bad-cfi.c: New file.
* gdb.dwarf2/dw2-bad-cfi.exp: New file.
* gdb.dwarf2/dw2-bad-cfi.S: New file.
gdb/ChangeLog
gdb/dwarf2-frame.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/dw2-bad-cfi.S [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/dw2-bad-cfi.c [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/dw2-bad-cfi.exp [new file with mode: 0644]