Go to file
Pedro Alves 5cc3ce8b5f Fix signal handler/event-loop races
GDB's core signal handling suffers from a classical signal handler /
mainline code race:

  int
  gdb_do_one_event (void)
  {
  ...
  /* First let's see if there are any asynchronous signal handlers
       that are ready.  These would be the result of invoking any of the
       signal handlers.  */
    if (invoke_async_signal_handlers ())
      return 1;
  ...
    /* Block waiting for a new event.  (...).  */

    if (gdb_wait_for_event (1) < 0)
      return -1;
  ...
  }

If a signal is delivered while gdb is blocked in the poll/select
inside gdb_wait_for_event, then the select/poll breaks with EINTR,
we'll loop back around and call invoke_async_signal_handlers.

However, if the signal handler runs between
invoke_async_signal_handlers and gdb_wait_for_event,
gdb_wait_for_event will block, until the next unrelated event...

The fix is to a struct serial_event, and register it in the set of
files that select/poll in gdb_wait_for_event waits on.  The signal
handlers that defer work to invoke_async_signal_handlers call
mark_async_signal_handler, which is adjusted to also set the new
serial event in addition to setting a flag, and is thus now is
garanteed to immediately unblock the next gdb_select/poll call, up
until invoke_async_signal_handlers is called and the event is cleared.

gdb/ChangeLog:
2016-04-12  Pedro Alves  <palves@redhat.com>

	* event-loop.c: Include "ser-event.h".
	(async_signal_handlers_serial_event): New global.
	(async_signals_handler, initialize_async_signal_handlers): New
	functions.
	(mark_async_signal_handler): Set
	async_signal_handlers_serial_event.
	(invoke_async_signal_handlers): Clear
	async_signal_handlers_serial_event.
	* event-top.c (async_init_signals): Call
	initialize_async_signal_handlers.
2016-04-12 16:53:40 +01:00
bfd Properly handle dynamic reloc against normal symbol 2016-04-11 19:41:52 -07:00
binutils MIPS/opcodes: Fix undecoded MIPS16 extended instruction bit disassembly 2016-04-11 18:01:18 +01:00
config Sync top level files with gcc. 2016-02-10 10:54:29 +00:00
cpu Correct fr30 comment 2016-03-03 12:55:30 +10:30
elfcpp Remove is_n64_ data member from Mips_relobj class. 2016-03-18 14:54:35 -07:00
etc Remove spurious empty line in changelog entry. 2016-03-18 13:09:03 +00:00
gas Add support for .extCondCode, .extCoreRegister and .extAuxRegister. 2016-04-12 10:21:06 +02:00
gdb Fix signal handler/event-loop races 2016-04-12 16:53:40 +01:00
gold enable -Wwrite-strings for gas 2016-03-31 07:30:56 -04:00
gprof enable -Wwrite-strings for gas 2016-03-31 07:30:56 -04:00
include Add support for .extCondCode, .extCoreRegister and .extAuxRegister. 2016-04-12 10:21:06 +02:00
intl Regen intl/configure 2015-08-31 12:53:36 +09:30
ld Properly handle dynamic reloc against normal symbol 2016-04-11 19:41:52 -07:00
libdecnumber Remove leading/trailing white spaces in ChangeLog 2015-07-24 04:16:47 -07:00
libiberty Sync libiberty with GCC. 2016-01-28 21:44:42 +01:00
opcodes Add support for .extCondCode, .extCoreRegister and .extAuxRegister. 2016-04-12 10:21:06 +02:00
readline Revert "Sync readline/ to version 7.0 alpha" 2015-07-25 15:57:00 -04:00
sim Fix primary reason why the SH simulation hasn't been working on 64 bit hosts. 2016-04-10 11:02:47 +09:00
texinfo
zlib Import zlib 1.2.8 with local change merged in. 2015-11-25 15:14:47 -08:00
.cvsignore
.gitattributes Add a .gitattributes file for use with git-merge-changelog 2014-07-25 18:07:23 -04:00
.gitignore Import changes made to files shared with the FSF GCC project. 2016-01-11 11:06:56 +00:00
ChangeLog Add mips and s390 build targets for gold. 2016-03-17 15:37:10 -07:00
compile Update from upstream Automake 2014-11-16 13:43:48 +01:00
config-ml.in Sync toplevel files with GCC 2015-07-27 07:49:05 -07:00
config.guess Import changes made to files shared with the FSF GCC project. 2016-01-11 11:06:56 +00:00
config.rpath Remove freebsd1 from libtool.m4 macros and config.rpath. 2011-02-13 21:00:14 +00:00
config.sub Import changes made to files shared with the FSF GCC project. 2016-01-11 11:06:56 +00:00
configure Add mips and s390 build targets for gold. 2016-03-17 15:37:10 -07:00
configure.ac Add mips and s390 build targets for gold. 2016-03-17 15:37:10 -07:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS 2013-01-07 Jeff Johnston <jjohnstn@redhat.com> 2013-01-07 21:39:26 +00:00
COPYING.NEWLIB 2013-10-01 Jeff Johnston <jjohnstn@redhat.com> 2013-10-01 18:14:04 +00:00
depcomp Update from upstream Automake 2014-11-16 13:43:48 +01:00
djunpack.bat
install-sh Update from upstream Automake 2014-11-16 13:43:48 +01:00
libtool.m4 Sync top-level btool.m4 with GCC 2016-01-12 08:44:52 -08:00
lt~obsolete.m4
ltgcc.m4
ltmain.sh PR target/59788 2014-02-06 11:01:57 +01:00
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 Sync top-level Makefile.def with GCC 2016-01-12 08:34:40 -08:00
Makefile.in Sync top level files with gcc. 2016-02-10 10:54:29 +00:00
Makefile.tpl Sync top level files with gcc. 2016-02-10 10:54:29 +00:00
makefile.vms
missing Update from upstream Automake 2014-11-16 13:43:48 +01:00
mkdep
mkinstalldirs Update from upstream Automake 2014-11-16 13:43:48 +01:00
move-if-change Update `move-if-change' from gnulib 2014-11-16 17:04:02 +01:00
README
README-maintainer-mode
setup.com
src-release.sh fix gdb version parsing in src-release.sh 2016-01-17 10:01:55 +04:00
symlink-tree
ylwrap Update from upstream Automake 2014-11-16 13:43:48 +01:00

		   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.