gdb: Fix assert for extended-remote target (PR gdb/18050)
authorAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 22 Jun 2018 19:39:26 +0000 (20:39 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 8 Aug 2018 12:14:45 +0000 (13:14 +0100)
commit9d4a934ce604afea155c39f06834cdbc47e92a6e
treecd9eb8f646f081bae3a5978fa8b7790c4094d4c0
parentff36536c9273734af6f84832b583c10f44c5010e
gdb: Fix assert for extended-remote target (PR gdb/18050)

Consider the following GDB session:

   (gdb) target extended-remote :2347
   (gdb) file /path/to/exe
   (gdb) set remote exec-file /path/to/exe
   (gdb) set detach-on-fork off
   (gdb) break breakpt
   (gdb) run
   # ... hits breakpoint
   (gdb) info inferiors
     Num  Description       Executable
   * 1    process 17001     /path/to/exe
     2    process 17002     /path/to/exe
   (gdb) kill
   (gdb) info inferiors
     Num  Description       Executable
   * 1    <null>            /path/to/exe
     2    process 17002     /path/to/exe
   (gdb) target extended-remote :2348
   ../../src/gdb/thread.c:660: internal-error: thread_info* any_thread_of_process(int): Assertion `pid != 0' failed.
   A problem internal to GDB has been detected,
   further debugging may prove unreliable.

Or, from bug PR gdb/18050:

   (gdb) start
   (gdb) add-inferior -exec /path/to/exe
   (gdb) target extended-remote :2347
   ../../src/gdb/thread.c:660: internal-error: thread_info* any_thread_of_process(int): Assertion `pid != 0' failed.
   A problem internal to GDB has been detected,
   further debugging may prove unreliable.

The issue is calling target.c:dispose_inferior with a killed inferior in
the inferior list.  This assertion is fixed in this commit.

The new test for this issue only runs on platforms that support
'detach-on-fork', and when using
'--target_board=native-extended-gdbserver'.

gdb/ChangeLog:

PR gdb/18050:
* target.c (dispose_inferior): Don't dispose of inferiors that are
already killed.

gdb/testsuite/ChangeLog:

PR gdb/18050:
* gdb.server/extended-remote-restart.c: New file.
* gdb.server/extended-remote-restart.exp: New file.
gdb/ChangeLog
gdb/target.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.server/extended-remote-restart.c [new file with mode: 0644]
gdb/testsuite/gdb.server/extended-remote-restart.exp [new file with mode: 0644]