PR gdb/18717: internal error if non-leader thread exits process
authorPedro Alves <palves@redhat.com>
Fri, 24 Jul 2015 18:18:44 +0000 (18:18 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 24 Jul 2015 16:49:17 +0000 (17:49 +0100)
commit7759842763d94dc2f1c7d52d09f9203830b753ab
treede2677fa09b21e64b63dc39db7c11816f1521b09
parentfe23c31f262151ce3265f5b90870d40cb6840f0a
PR gdb/18717: internal error if non-leader thread exits process

If a non-leader thread exits the process while all other threads are
ptrace-stopped, native gdb fails an assertion.  The test added by this
commit catches it:

 /home/pedro/gdb/mygit/build/../src/gdb/linux-nat.c:3198: internal-error: linux_nat_filter_event: Assertion `lp->resumed' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n)
 FAIL: gdb.threads/non-leader-exit-process.exp: program exits normally (GDB internal error)

The fix is just to remove the assertion.

With that out of the way, neither GDB not GDBserver handle this
perfectly though, so I'm adding a KFAIL:

 (gdb) continue
 Continuing.
 [Thread 0x7ffff7fc0700 (LWP 15350) exited]
 No unwaited-for children left.
 Couldn't get registers: No such process.
 (gdb) KFAIL: gdb.threads/non-ldr-exit.exp: program exits normally (PRMS: gdb/18717)

gdb/ChangeLog:
2015-07-24  Pedro Alves  <palves@redhat.com>

PR gdb/18717
* linux-nat.c (linux_nat_filter_event): Don't assert that the lwp
is resumed, and extend the debug log.

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

PR gdb/18717
* gdb.threads/non-ldr-exit.c: New file.
* gdb.threads/non-ldr-exit.exp: New file.
gdb/ChangeLog
gdb/linux-nat.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.threads/non-ldr-exit.c [new file with mode: 0644]
gdb/testsuite/gdb.threads/non-ldr-exit.exp [new file with mode: 0644]