Binutils with MCST patches
Go to file
Pedro Alves 6e5d74e747 Fix PR 21218: GDB dumps core when escaping newline in multi-line command
With commit 3b12939dfc ("Replace the sync_execution global with a
new enum prompt_state tristate"), GDB started aborting if you try
splitting an input line with a continuation char (backslash) while in
a multi-line command:

 (gdb) commands
 Type commands for breakpoint(s) 1, one per line.
 End with a line saying just "end".
 >print \

 (gdb) 1      # note "(gdb)" incorrectly printed here.
 >end

 readline: readline_callback_read_char() called with no handler!
 $

That abort is actually a symptom of an old problem introduced when
gdb_readline_wrapper was rewritten to use asynchronous readline, back
in 2007.  Note how the "(gdb)" prompt is printed above in the "(gdb)
1" line.  Clearly it shouldn't be there, but it already was before the
commit mentioned above.  Fixing that also fixes the readline abort
shown above.

The problem starts when command_line_input passes a NULL prompt to
gdb_readline_wrapper when it finds previous incomplete input due to a
backslash, trying to fetch more input without printing another ">"
secondary prompt.  That itself should not be a problem, because
passing NULL to gdb_readline_wrapper has the same meaning as passing a
pointer to empty string, since gdb_readline_wrapper exposes the same
interface as 'readline(char *)'.  However, gdb_readline_wrapper passes
the prompt argument directly to display_gdb_prompt, and for the
latter, a NULL prompt argument has a different meaning - it requests
printing the primary prompt.

Before commit 782a7b8ef9c096 (which rewrote gdb_readline_wrapper to
use asynchronous readline), GDB behaved like this:

 (gdb) commands
 [....]
 >print \
 1
 >end
 (gdb)

The above is what this commit restores GDB back to.

New test included.

gdb/ChangeLog:
2017-03-08  Pedro Alves  <palves@redhat.com>

	PR cli/21218
	* top.c (gdb_readline_wrapper): Avoid passing NULL to
	display_gdb_prompt.
	(command_line_input): Add comment.

gdb/testsuite/ChangeLog:
2017-03-08  Pedro Alves  <palves@redhat.com>
	    Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR cli/21218
	* gdb.base/commands.exp (backslash_in_multi_line_command_test):
	New proc.
	(top level): Call it.
2017-03-08 11:41:35 +00:00
bfd Automatic date update in version.in 2017-03-08 00:00:42 +00:00
binutils Fix reading numeric values from GNU BUILD NOTEs. 2017-03-06 17:21:04 +00:00
config picflag.m4 high bit set in comment 2017-01-05 00:02:57 +10:30
cpu Add fall through comment to source in cpu/ 2016-10-06 22:48:37 +10:30
elfcpp Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
etc update-copyright.py for binutils 2017-01-05 00:03:07 +10:30
gas Correct @section placement for makeinfo 4.13 2017-03-07 19:41:56 +10:30
gdb Fix PR 21218: GDB dumps core when escaping newline in multi-line command 2017-03-08 11:41:35 +00:00
gold PowerPC ld segfault on script discarding dynamic sections 2017-02-22 08:44:41 +10:30
gprof Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
include Add support for displaying and merging GNU_BUILD_NOTEs. 2017-03-01 11:09:46 +00:00
intl Regen intl/configure 2015-08-31 12:53:36 +09:30
ld Fix ld uninitialized read of script ASSERT data structure 2017-03-07 12:33:28 +10:30
libdecnumber Remove leading/trailing white spaces in ChangeLog 2015-07-24 04:16:47 -07:00
libiberty Sync libiberty sources with GCC mainline. 2017-03-01 15:09:29 +00:00
opcodes Add support for Intel CET instructions 2017-03-06 15:26:37 -08:00
readline Improve MinGW support in Readline 2016-09-17 11:50:37 +03:00
sim Fix umulh and smulh bugs. Fix bugs in last week's sumov.s testsuite. 2017-03-03 13:10:45 -08:00
texinfo * texinfo/texinfo.tex: Update to version 2009-03-28.05. 2009-04-21 12:36:46 +00:00
zlib Sync ZLIB with FSF GCC sources, bringing in version 1.2.11. 2017-02-20 12:52:22 +00:00
.cvsignore add autom4te.cache to .cvsignore 2007-02-13 15:25:58 +00:00
.gitattributes Add a .gitattributes file for use with git-merge-changelog 2014-07-25 18:07:23 -04:00
.gitignore Add archives and make stamps to the .gitignore file. 2016-09-27 15:10:42 +01:00
COPYING
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
COPYING3 * COPYING3: New file. Contains version 3 of the GNU General Public License. 2007-07-17 13:50:23 +00:00
COPYING3.LIB * COPYING3: New file. Contains version 3 of the GNU General Public License. 2007-07-17 13:50:23 +00:00
ChangeLog Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
MAINTAINERS Update description of ownership of files in include/ 2014-11-04 16:14:14 -08:00
Makefile.def Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
Makefile.in Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
Makefile.tpl Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
README
README-maintainer-mode Cleanups after the update to Autoconf 2.64, Automake 1.11. 2009-08-22 17:08:11 +00: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 Sync config.sub,config.guess with upstream. 2016-11-07 13:08:55 -08:00
config.rpath Remove freebsd1 from libtool.m4 macros and config.rpath. 2011-02-13 21:00:14 +00:00
config.sub Import config.sub 2016-12-31 11:47:16 +10:30
configure Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
configure.ac Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
depcomp Update from upstream Automake 2014-11-16 13:43:48 +01:00
djunpack.bat * djunpack.bat: Use ".." quoting in Sed command, for the sake of 2009-03-27 13:37:09 +00:00
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
ltgcc.m4 * libtool.m4: Update to libtool 2.2.6. 2008-09-29 15:28:14 +00:00
ltmain.sh PR target/59788 2014-02-06 11:01:57 +01:00
ltoptions.m4 Sync Libtool from GCC. 2010-01-09 21:11:44 +00:00
ltsugar.m4 * libtool.m4: Update to libtool 2.2.6. 2008-09-29 15:28:14 +00:00
ltversion.m4 Sync Libtool from GCC. 2010-01-09 21:11:44 +00:00
lt~obsolete.m4 Sync Libtool from GCC. 2010-01-09 21:11:44 +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
setup.com 2009-09-01 Tristan Gingold <gingold@adacore.com> 2009-09-01 13:38:26 +00:00
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

		   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.