Go to file
Pedro Alves c2c118cfe1 GDBserver: don't resume all threads if the Hc thread disapears
There's code in linux_wait_1 that resumes all threads if the Hc thread
disappears.  It's the wrong thing to do, as GDB has told GDBserver to
resume only one thread, because e.g., the user has scheduler-locking
enabled, or because GDB was stepping the program over a breakpoint.
Resuming all threads behind GDB's back can't be good in either case.

The right thing to do is to detect that that the (only) resumed thread
is gone, and let GDB know about it.  The Linux backend is already
doing that nowadays, since:

 commit fa96cb382c
 Author:     Pedro Alves <palves@redhat.com>
 AuthorDate: Thu Feb 27 14:30:08 2014 +0000

     Teach GDBserver's Linux backend about no unwaited-for children (TARGET_WAITKIND_NO_RESUMED).

The backend detects that all resumed threads have disappeared, and
returns TARGET_WAITKIND_NO_RESUMED to the core of GDBserver, which
then reports an error to GDB.

There's no need to frob the passed in ptid to wait for the continue
thread either -- linux_wait_for_event only returns events for resumed
threads.

The badness (of resuming threads) can actually be observed in the
testsuite, if we force-disable vCont support in GDBserver -- before
the patch, gdb.threads/no-unwaited-for-left.exp hangs if we disable
vCont:

 (gdb) continue
 Continuing.
 FAIL: gdb.threads/no-unwaited-for-left.exp: continue to breakpoint: break-here (timeout)
 ... more cascading timeouts ....

After the patch, gdb.threads/no-unwaited-for-left.exp behaves the same
with or without vCont support:

 (gdb) continue
 Continuing.
 [New Thread 32226]
 [Switching to Thread 32226]

 Breakpoint 2, thread_a (arg=0x0) at /home/pedro/gdb/mygit/build/../src/gdb/testsuite/gdb.threads/no-unwaited-for-left.c:28
 28	  return 0; /* break-here */
 (gdb) PASS: gdb.threads/no-unwaited-for-left.exp: continue to breakpoint: break-here
...
 continue
 Continuing.
 warning: Remote failure reply: E.No unwaited-for children left.

 [Thread 32222] #1 stopped.
 (gdb) FAIL: gdb.threads/no-unwaited-for-left.exp: continue stops when the main thread exits

Overall, this is also good for getting rid of a RSP detail from the backend.

gdb/gdbserver/
2014-11-12  Pedro Alves  <palves@redhat.com>

	* linux-low.c (linux_wait_1): Don't force a wait for the Hc
	thread, and don't resume all threads if the Hc thread has exited.
2014-11-12 11:30:49 +00:00
bfd Throw away dodgy coff line number info earlier 2014-11-12 15:15:03 +10:30
binutils Fix invalid memory accesses for more corrupt binary files. 2014-11-11 20:50:03 +00:00
config Fix --diable-shared --enable-plugins build breakage 2014-08-19 21:59:56 +09:30
cpu or1k: add missing l.msync, l.psync and l.psync instructions. 2014-07-20 20:26:09 +03:00
elfcpp Add tls support to gold aarch64 backend. 2014-09-17 14:24:10 -07:00
etc PR external/{16327,16328}: Remove etc/configure.texi and etc/standards.texi. 2014-06-27 11:33:25 +02:00
gas Fix z80-coff build breakage 2014-11-12 15:05:30 +10:30
gdb GDBserver: don't resume all threads if the Hc thread disapears 2014-11-12 11:30:49 +00:00
gold Fix race condition when using --threads with linker plugins. 2014-11-07 16:12:58 -08:00
gprof Import updated translations supplied by the Translation Project. 2014-11-03 12:26:48 +00:00
include Add mach parameter to nios2_find_opcode_hash. 2014-11-06 13:12:21 -08:00
intl
ld * avrtiny.sc: Apply avr.sc fixes. 2014-11-11 20:44:03 +03:00
libdecnumber PR c/59871 c/ * c-typeck.c (build_compound_expr): Warn even for right-hand operand of a comma expression. (emit_side_effect_warnings): Likewise. libdecnumber/ * decNumberLocal.h (UBFROMUS, UBFROMUI): Remove last argument. testsuite/ * gcc.dg/20020220-2.c: Adjust dg-warning message. * gcc.dg/pr59871.c: New test. 2014-05-08 10:18:28 -06:00
libiberty Fix gnu11 fallout on Solaris 10+ 2014-11-05 15:07:38 +01:00
opcodes Add mach parameter to nios2_find_opcode_hash. 2014-11-06 13:12:21 -08:00
readline readline/search.c: Remove useless parameter '0' for rl_message() 2014-09-22 09:52:06 -04:00
sim Shadow SIM's debug_printf function 2014-08-28 11:59:09 +01:00
texinfo
.cvsignore
.gitattributes Add a .gitattributes file for use with git-merge-changelog 2014-07-25 18:07:23 -04:00
.gitignore
ChangeLog src-release.sh: configure using --target. 2014-10-15 09:50:53 +02:00
compile
config-ml.in
config.guess
config.rpath
config.sub Import config.sub from upstream config repo 2014-07-29 07:04:52 -04:00
configure Add aarch64 to list of targets that support gold. 2014-10-03 14:48:14 -07:00
configure.ac Add aarch64 to list of targets that support gold. 2014-10-03 14:48:14 -07:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS
COPYING.NEWLIB
depcomp
djunpack.bat
install-sh
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS Update description of ownership of files in include/ 2014-11-04 16:14:14 -08:00
Makefile.def PR sanitizer/56781 * Makefile.def: Set bootstrap=true; for host fixincludes. * configure.ac: Don't bootstrap host fixincludes unless --with-build-config=bootstrap-{a,ub}san. * Makefile.in: Regenerated. * configure: Regenerated. 2014-05-08 10:18:30 -06:00
Makefile.in PR sanitizer/56781 * Makefile.def: Set bootstrap=true; for host fixincludes. * configure.ac: Don't bootstrap host fixincludes unless --with-build-config=bootstrap-{a,ub}san. * Makefile.in: Regenerated. * configure: Regenerated. 2014-05-08 10:18:30 -06:00
Makefile.tpl PR bootstrap/58572 * Makefile.tpl (POSTSTAGE1_CXX_EXPORT): Use -isystem instead of -I for libstdc++-v3 includes if $(LEAN). * Makefile.in: Regenerated. 2014-05-08 10:18:29 -06:00
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
README
README-maintainer-mode
setup.com
src-release.sh src-release.sh: configure using --target. 2014-10-15 09:50:53 +02:00
symlink-tree
ylwrap

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.