Fix PR threads/19354: "info threads" error with multiple inferiors
authorPedro Alves <palves@redhat.com>
Thu, 17 Dec 2015 14:20:52 +0000 (14:20 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 17 Dec 2015 14:23:28 +0000 (14:23 +0000)
commita6904d5a6aa63e4bef7207407250d8b76b56f8a9
treee4651001446dda94d8b8f04382b7b916028cb5ff
parent4a6ed09b0f70c79b11bc1e0973a7333d9316a287
Fix PR threads/19354: "info threads" error with multiple inferiors

Note: this applies on top of:
 [PATCH] Remove support for LinuxThreads and vendor 2.4 kernels w/ backported NPTL
 https://sourceware.org/ml/gdb-patches/2015-12/msg00214.html

We try to avoid using libthread_db.so to list threads in the inferior
when debugging live processes, but the code that decides whether to
use it decides incorrectly if you have more than one inferior, and the
current inferior doesn't have execution yet.  The result is visible
as:

 (gdb) add-inferior
 Added inferior 2
 (gdb) inferior 2
 [Switching to inferior 2 [<null>] (<noexec>)]
 (gdb) info inferiors
   Num  Description       Executable
   1    process 15397     /home/pedro/gdb/tests/threads
 * 2    <null>
 (gdb) info threads
 Cannot find new threads: generic error
 (gdb)

Fix this by checking whether each inferior has execution rather than
just the current inferior.

By moving the core updating to linux-nat.c's update_thread_list
implementation, this also ends up fixing the
lwp-last-seen-running-on-core updating in the case we're debugging a
program that uses raw clone rather than pthreads, as linux-thread-db.c
isn't pushed in the target stack in that scenario.

Tested on x86_64 Fedora 20.

gdb/ChangeLog:
2015-12-17  Pedro Alves  <palves@redhat.com>

PR threads/19354
* linux-nat.c (linux_nat_update_thread_list): Update process cores
each lwp was last seen running on here.
* linux-thread-db.c (update_thread_core): Delete.
(thread_db_update_thread_list_td_ta_thr_iter): Rename to ...
(thread_db_update_thread_list): ... this.  Skip inferiors with
execution.  Also call the target beneath.
(thread_db_update_thread_list): Delete.

gdb/testsuite/ChangeLog:
2015-12-17  Pedro Alves  <palves@redhat.com>

PR threads/19354
* gdb.multi/info-threads.exp: New file.
gdb/ChangeLog
gdb/linux-nat.c
gdb/linux-thread-db.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.multi/info-threads.exp [new file with mode: 0644]
This page took 0.026092 seconds and 4 git commands to generate.