Fix 'gcore' with exited threads
authorJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 21 Aug 2014 18:36:20 +0000 (20:36 +0200)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 21 Aug 2014 18:36:20 +0000 (20:36 +0200)
commit22fd09ae995556cc1b898afe3d5901eb161d1102
tree5ff6539a93ea414391cf51270809fc75ee807b04
parent656e8868f333de49bf22e10112392ca404e5eb67
Fix 'gcore' with exited threads

Program received signal SIGABRT, Aborted.
[...]
(gdb) gcore foobar
Couldn't get registers: No such process.
(gdb) info threads
[...]
(gdb) gcore foobar
Saved corefile foobar
(gdb)

gcore tries to access the exited thread:
[Thread 0x7ffff7fce700 (LWP 6895) exited]
ptrace(PTRACE_GETREGS, 6895, 0, 0x7fff18167dd0) = -1 ESRCH (No such process)

Without the TRY_CATCH protection testsuite FAILs for:
gcore .../gdb/testsuite/gdb.threads/gcore-thread0.test
Cannot find new threads: debugger service failed
(gdb) FAIL: gdb.threads/gcore-thread.exp: save a zeroed-threads corefile
+
core .../gdb/testsuite/gdb.threads/gcore-thread0.test
".../gdb/testsuite/gdb.threads/gcore-thread0.test" is not a core dump: File format not recognized
(gdb) FAIL: gdb.threads/gcore-thread.exp: core0file: re-load generated corefile (bad file format)
Maybe the TRY_CATCH could be more inside update_thread_list().

Similar update_thread_list() call is IMO missing in procfs_make_note_section()
but I do not have where to verify that change.

gdb/ChangeLog
2014-08-21  Jan Kratochvil  <jan.kratochvil@redhat.com>

* linux-tdep.c (linux_corefile_thread_callback): Ignore THREAD_EXITED.
(linux_make_corefile_notes): call update_thread_list, protected against
exceptions.

gdb/testsuite/ChangeLog
2014-08-21  Jan Kratochvil  <jan.kratochvil@redhat.com>

* gdb.threads/gcore-stale-thread.c: New file.
* gdb.threads/gcore-stale-thread.exp: New file.
gdb/ChangeLog
gdb/linux-tdep.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.threads/gcore-stale-thread.c [new file with mode: 0644]
gdb/testsuite/gdb.threads/gcore-stale-thread.exp [new file with mode: 0644]