Go to file
Joel Brobecker 8e81706197 inadvertent language switch during breakpoint_re_set_one
Trying to insert a breakpoint using *FUNC'address with an Ada program
and then running the program until reaching that breakpoint currently
yields the following behavior:

    (gdb) break *a'address
    Breakpoint 1 at 0x40240c: file a.adb, line 1.
    (gdb) run
    [1]  + 27222 suspended (tty output) /[...]/gdb -q simple_main

Unsuspending GDB then shows it was suspended trying to report
the following error:

    Starting program: /home/takamaka.a/brobecke/ex/simple/a
    Error in re-setting breakpoint 1: Unmatched single quote.
    Error in re-setting breakpoint 1: Unmatched single quote.
    Error in re-setting breakpoint 1: Unmatched single quote.
    [Inferior 1 (process 32470) exited normally]

The "a'address" is Ada speak for function A's address ("A" by
itself means the result of calling A with no arguments). The
transcript above shows that we're having problems trying to
parse the breakpoint location while re-setting it.  As a result,
we also fail to stop at the breakpoint.

Normally, breakpoint locations are evaluated with the current_language
being set to the language of the breakpoint. But, unfortunately for us,
what happened in this case is that parse_exp_in_context_1 calls
get_selected_block which eventually leads to a call to select_frame
because the current_frame hadn't been set yet.  select_frame then
finds that our language_mode is auto, and therefore changes the
current_language to match the language of the frame we just selected.
In our case, the language chosen was 'c', which of course is not
able to parse an Ada expression, hence the error.

This patch prevents this by forcing the language_mode to manual
before we call breakpoint_re_set_one.

gdb/ChangeLog:

        * breakpoint.c (breakpoint_re_set): Temporarily force language_mode
        to language_mode_manual while calling breakpoint_re_set_one.

gdb/testsuite/ChangeLog:

        * gdb.ada/bp_fun_addr: New testcase.

Tested on x86_64-linux.
2018-06-01 09:36:59 -07:00
bfd Bump version number to 2.30.52 2018-06-01 09:34:16 -07:00
binutils Bump version number to 2.30.52 2018-06-01 09:34:16 -07:00
config
cpu
elfcpp
etc
gas Bump version number to 2.30.52 2018-06-01 09:34:16 -07:00
gdb inadvertent language switch during breakpoint_re_set_one 2018-06-01 09:36:59 -07:00
gold
gprof Bump version number to 2.30.52 2018-06-01 09:34:16 -07:00
include include: 2018-05-28 Bernd Edlinger <bernd.edlinger@hotmail.de> 2018-05-31 10:17:13 +01:00
intl
ld Bump version number to 2.30.52 2018-06-01 09:34:16 -07:00
libdecnumber
libiberty include: 2018-05-28 Bernd Edlinger <bernd.edlinger@hotmail.de> 2018-05-31 10:17:13 +01:00
opcodes Bump version number to 2.30.52 2018-06-01 09:34:16 -07:00
readline
sim
texinfo
zlib
.cvsignore
.gitattributes
.gitignore
ChangeLog
compile
config-ml.in
config.guess
config.rpath
config.sub
configure
configure.ac
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
Makefile.def
Makefile.in
Makefile.tpl
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
README
README-maintainer-mode
setup.com
src-release.sh
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.