Go to file
Joel Brobecker 2ad01556c7 [Ada] Do not cache lookup result if not full_search
The ada_lookup_symbol_list function has recently been changed to accept
a "full_search" parameter. When null, this parameter instructs the
function to perform a partial search (global and static symbols are not
searched). When doing a partial search, the result should not be saved
into the lookup cache, as the result might be incomplete.

This manifested itself when trying to perform a function call on AVR
after having inserted a breakpoint inside that function:

    (gdb) b same
    Breakpoint 2 at 0x78: file r.adb, line 5.
    (gdb) call same(42)

    Breakpoint 2, r.same (i=42) at r.adb:5
    5             return I;
    The program being debugged stopped while in a function called from GDB.
    Evaluation of the expression containing the function
    (at 0x0x800068) will be abandoned.
    ^^^^^^^^^^^^^^^
    When the function is done executing, GDB will silently stop.

The expected output for the underlined portion is "(r.same)".

What happens is that the breakpoint command triggers 3 lookups of the
name "same":
  1. full search in LABEL_DOMAIN -> no match, cached;
  2. full search in VAR_DOMAIN -> 1 match, cached;
  3. partial search in VAR_DOMAIN -> no match, cached.

The third lookup therefore causes the results of the partial search
to be cached, thus overriding the result of the full search lookup.

During the following command, the reference to "same" triggers a lookup
of that symbol again. And since GDB CAN find the result of that lookup
in the cache, it returns just that, which is: No match. (wrong!)

As a result, we fallback on the symbol table to resolve the lookup.
And instead of pushing an OP_VAR_VALUE subexpression for symbol "same",
the parser ends up pushing an UNOP_MEMVAL subexpression using the value
of the minimal symbol. This is where being on AVR becomes important:
addresses on AVR are modular types, and if GDB thinks an address is
a data address, it converts it.

This is where one notices the fact that the breakpoint was inserted
at 0x78, and yet GDB says that the function we stopped at is at
0x0x800068...

This patch fixes the problem by making sure we only cache the result
of full searches.

gdb/ChangeLog:

        * ada-lang.c (ada_lookup_symbol_list): Only cache the result of
        full searches.
2012-02-29 19:35:37 +00:00
bfd daily update 2012-02-28 23:00:05 +00:00
binutils * doc/binutils.texi (c++filt): Fix typos. 2012-02-29 10:44:10 +00:00
config config/: 2011-12-20 17:01:30 +00:00
cpu cpu/ 2012-02-27 06:57:57 +00:00
elfcpp * mips.h: New file 2012-01-28 01:04:22 +00:00
etc PR other/46202: implement install-strip. 2010-11-20 19:37:58 +00:00
gas * config/tc-crx.c (check_range): Correct uint32_t misconceptions. 2012-02-27 12:36:21 +00:00
gdb [Ada] Do not cache lookup result if not full_search 2012-02-29 19:35:37 +00:00
gold * testsuite/Makefile.am (initpri2): Add --ctors-in-init-array option. 2012-02-16 19:37:34 +00:00
gprof * po/sr.po: New Serbian translation. 2012-02-06 13:42:32 +00:00
include gas/ 2012-02-27 06:37:40 +00:00
intl merge from gcc 2010-09-27 21:01:18 +00:00
ld Add big-endian support for tilegx. 2012-02-25 19:51:34 +00:00
libdecnumber config/: 2011-12-20 17:01:30 +00:00
libiberty * make-relative-prefix.c (make_relative_prefix_1): Avoid warning 2012-01-26 14:28:31 +00:00
opcodes cpu/ 2012-02-27 06:57:57 +00:00
readline * signals.c (_rl_block_sigwinch, _rl_release_sigwinch): Add 2012-02-24 17:14:43 +00:00
sim Update sim_fetch_register, sim_store_register for sh and mn10300. 2012-02-16 23:17:27 +00:00
texinfo
.cvsignore
.gitignore start a gitignore 2010-11-17 19:34:59 +00:00
ChangeLog 2012-02-21 Joern Rennecke <joern.rennecke@embecosm.com> 2012-02-21 22:40:27 +00:00
compile
config-ml.in * config-ml.in: Don't handle arc-*-elf*. 2011-03-22 20:01:13 +00:00
config.guess Sync from upstream: 2011-06-06 10:36:06 +00:00
config.rpath Remove freebsd1 from libtool.m4 macros and config.rpath. 2011-02-13 21:00:14 +00:00
config.sub * config.sub: Update to version 2011-10-29 (added rl78) 2011-11-02 00:56:53 +00:00
configure * configure: Regenerate. 2011-12-18 10:20:52 +00:00
configure.ac 2011-11-09 Roland McGrath <mcgrathr@google.com> 2011-11-09 18:57:30 +00:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS 2012-02-21 Joern Rennecke <joern.rennecke@embecosm.com> 2012-02-21 22:40:27 +00:00
COPYING.NEWLIB 2012-02-21 Joern Rennecke <joern.rennecke@embecosm.com> 2012-02-21 22:40:27 +00:00
depcomp
djunpack.bat
install-sh
libtool.m4 Remove freebsd1 from libtool.m4 macros and config.rpath. 2011-02-13 21:00:14 +00:00
lt~obsolete.m4
ltgcc.m4
ltmain.sh Backport from Libtool: Fix relink mode to use absolute path if hardcode_minus_L. 2011-01-13 18:52:53 +00:00
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS Import move-if-change script from gnulib. 2011-02-12 15:47:02 +00:00
Makefile.def 2011-11-09 Roland McGrath <mcgrathr@google.com> 2011-11-09 18:57:30 +00:00
Makefile.in 2011-11-09 Roland McGrath <mcgrathr@google.com> 2011-11-09 18:57:30 +00:00
Makefile.tpl 2011-11-09 Roland McGrath <mcgrathr@google.com> 2011-11-09 18:57:30 +00:00
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change Import move-if-change script from gnulib. 2011-02-12 15:47:02 +00:00
README
README-maintainer-mode
setup.com
src-release Include the <root>/cpu/ dir in GDB releases 2011-08-19 15:48:36 +00: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.