This is the mail archive of the
gdb-prs@sourceware.org
mailing list for the GDB project.
[Bug backtrace/16155] Backtraces in threads don't work on AArch64
- From: "tromey at redhat dot com" <sourceware-bugzilla at sourceware dot org>
- To: gdb-prs at sourceware dot org
- Date: Tue, 12 Nov 2013 22:00:04 +0000
- Subject: [Bug backtrace/16155] Backtraces in threads don't work on AArch64
- Auto-submitted: auto-generated
- References: <bug-16155-4717 at http dot sourceware dot org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=16155
--- Comment #3 from Tom Tromey <tromey at redhat dot com> ---
FWIW adding a QUIT there will cause an internal error
if it fires. The unwind code gets upset.
My current fix is to add this code in dwarf2_frame_cache:
else if (fs->retaddr_column >= fs->regs.num_regs
|| (fs->regs.reg[fs->retaddr_column].how
== DWARF2_FRAME_REG_UNSPECIFIED))
cache->undefined_retaddr = 1;
The frame in question had an unspecified return address column.
I couldn't think of a scenario in which this made sense, and
this lets dwarf2_frame_unwind_stop_reason make the right choice.
I wonder if unavailable_retaddr is the more correct choice.
With this addition, unwinding terminates properly:
(gdb) thr 6
[Switching to thread 6 (Thread 458)]
#0 0x0000007fb7ed485c in nanosleep () from /lib64/libc.so.6
(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
(gdb)
--
You are receiving this mail because:
You are on the CC list for the bug.