This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug backtrace/16155] Backtraces in threads don't work on AArch64


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]