diff options
author | Pedro Alves <palves@redhat.com> | 2020-06-18 21:28:18 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2020-06-18 23:03:08 +0100 |
commit | 8df017996f662ce6ab23aea4abeb8f7ac1f62651 (patch) | |
tree | 0d5cc78af50669c9f30ff31f98631382e44370a7 /gdb/tracectf.c | |
parent | 41792d688a5a1f158d6e9ecda2b603ae122d69a1 (diff) | |
download | gdb-8df017996f662ce6ab23aea4abeb8f7ac1f62651.zip gdb-8df017996f662ce6ab23aea4abeb8f7ac1f62651.tar.gz gdb-8df017996f662ce6ab23aea4abeb8f7ac1f62651.tar.bz2 |
gcore, handle exited threads better
An early (and since discarded) version of this series tried to make
exited threads have distinct PTID between each other, and that change
exposed a problem in linux-tdep.c... This was exposed by the
gdb.threads/gcore-stale-thread.exp testcase, which is exactly about
calling gcore with an exited thread selected:
(gdb) [Thread 0x7ffff7fb6740 (LWP 31523) exited]
PASS: gdb.threads/gcore-stale-thread.exp: continue to breakpoint: break-here
gcore /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.threads/gcore-stale-thread/gcore-stale-thread.core
/home/pedro/gdb/binutils-gdb/build/../src/gdb/inferior.c:66: internal-error: void set_current_inferior(inferior*): Assertion `inf != NULL' failed.
A problem internal to GDB has been detected,
That was find_inferior_ptid being called on the "exited" ptid, which
on that previous (and discarded attempt) had pid==-1. The problem is
that linux-tdep.c, where it looks for the signalled thread, isn't
considering exited threads. Also, while at it, that code isn't
considering multi-target either, since it is using
iterate_over_threads which iterates over all threads of all targets.
Fixed by switching to range-for iteration instead.
gdb/ChangeLog:
2020-06-18 Pedro Alves <palves@redhat.com>
* linux-tdep.c (find_signalled_thread(thread_info *,void *)):
Delete.
(find_signalled_thread()): New, factored out from
linux_make_corefile_notes and adjusted to handle exited threads.
(linux_make_corefile_notes): Adjust to use the new
find_signalled_thread.
Diffstat (limited to 'gdb/tracectf.c')
0 files changed, 0 insertions, 0 deletions