binutils-gdb/gdb/testsuite
Pedro Alves 6f64ef53c0 GDB kills itself instead of interrupting inferior
When GDB is run with IO redirected to a pipe, the 'interrupt' command
causes it to kill its own process group instead of the inferior's.
The problem manifests itself in async mode, native debugging:

    $ cat | gdb <file>
    (gdb) set target-async on
    (gdb) run &
    (gdb) interrupt
    A debugging session is active.
    Inferior 1 [process 20584] will be killed.
    Quit anyway? (y or n) [answered Y; input not from terminal]

In this case, GDB tells that its stdin isn't a tty and doesn't save
the inferior's process group in
inflow.c:terminal_init_inferior_with_pgrp.  The 'interrupt' command
tries to 'kill' the inferior's process group in
`inf-ptrace.c:inf_ptrace_stop`, but since that wasn't saved in the
first place, GDB kills process group 0, meaning, its own process
group.

When GDB is used from a frontend, that means killing its own process
group including the frontend and possibly the X session.  This was
originally seen with SublimeGDB:
  https://github.com/quarnster/SublimeGDB/issues/29.

The patch makes GDB save the inferior pgid regardless of having a
terminal, as pgid is used not only to reset foreground process group,
but also to interrupt the inferior process.  It also adds a regression
test.  Luckily, we can emulate not having a terminal with "set
interactive-mode off", avoiding the need of special magic to spawn gdb
with a pipe.

Tested on x86_64 Fedora 17.

gdb/
2013-07-26  Cyril Nikolaev  <cyril@nichtverstehen.de>

	* inflow.c (terminal_init_inferior_with_pgrp): Save inferior
	process group regardless of having tty on stdin.

gdb/testsuite/
2013-07-26  Pedro Alves  <palves@redhat.com>

	* gdb.base/interrupt-noterm.c, gdb.base/interrupt-noterm.exp: New
	files.
2013-07-26 11:15:45 +00:00
..
boards * boards/native-stdio-gdbserver.exp (${board}_build_remote_cmd): Pass 2013-07-24 21:59:30 +00:00
config
gdb.ada
gdb.arch
gdb.asm
gdb.base GDB kills itself instead of interrupting inferior 2013-07-26 11:15:45 +00:00
gdb.btrace
gdb.cell
gdb.cp
gdb.disasm
gdb.dwarf2 gdb/testsuite/gdb.dwarf2: Replace @ with % for ARM compatability. 2013-07-19 10:01:26 +00:00
gdb.fortran
gdb.gdb
gdb.go
gdb.hp
gdb.java
gdb.linespec
gdb.mi Resue 'z' formatter from mi register display code. 2013-07-25 10:39:39 +00:00
gdb.modula2
gdb.multi
gdb.objc
gdb.opencl
gdb.opt
gdb.pascal
gdb.python
gdb.reverse
gdb.server
gdb.stabs
gdb.threads gdb/testsuite/gdb.threads: Ensure TLS tests link against pthreads. 2013-07-18 15:49:22 +00:00
gdb.trace gdb/ 2013-07-18 23:09:49 +00:00
gdb.xml
lib gdb/testsuite/ 2013-07-18 22:38:58 +00:00
aclocal.m4
ChangeLog GDB kills itself instead of interrupting inferior 2013-07-26 11:15:45 +00:00
configure
configure.ac
dg-extract-results.sh
Makefile.in
TODO