binutils-gdb/gdb/testsuite/gdb.base/symtab-search-order.exp
Doug Evans af3768e945 PR 17564: Fix objfile search order for static symbols.
When searching static symbols, gdb would search over all
expanded symtabs of all objfiles, and if that fails only then
would it search all partial/gdb_index tables of all objfiles.
This means that the user could get a random instance of the
symbol depending on what symtabs have been previously expanded.
Now the search is consistent, searching each objfile completely
before proceeding to the next one.

gdb/ChangeLog:

	PR symtab/17564
	* symtab.c (lookup_symbol_in_all_objfiles): Delete.
	(lookup_static_symbol): Move definition to new location and rewrite.
	(lookup_symbol_in_objfile): New function.
	(lookup_symbol_global_iterator_cb): Call it.

gdb/testsuite/ChangeLog:

	PR symtab/17564
	* gdb.base/symtab-search-order.exp: New file.
	* gdb.base/symtab-search-order.c: New file.
	* gdb.base/symtab-search-order-1.c: New file.
	* gdb.base/symtab-search-order-shlib-1.c: New file.
2014-11-10 15:48:49 -08:00

60 lines
1.8 KiB
Plaintext

# Copyright 2014 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
if {[skip_shlib_tests]} {
return 0
}
standard_testfile .c symtab-search-order-1.c symtab-search-order-shlib-1.c
set srcfile $srcdir/$subdir/$srcfile
set srcfile2 $srcdir/$subdir/$srcfile2
set lib1src $srcdir/$subdir/$srcfile3
set lib1 [standard_output_file symtab-search-order-1.sl]
set lib_opts "debug"
set exec_opts [list debug shlib=$lib1]
if [get_compiler_info] {
return -1
}
if { [gdb_compile_shlib $lib1src $lib1 $lib_opts] != ""
|| [gdb_compile [list $srcfile $srcfile2] $binfile executable \
$exec_opts] != ""} {
untested "Could not compile $lib1, or $srcfile."
return -1
}
# Start with a fresh gdb.
clean_restart $binfile
gdb_load_shlibs $lib1
if ![runto_main] {
fail "Can't run to main"
return -1
}
# PR 17564
# Expand something in the shared library,
# and then try to print static_global in the binary.
# We should get the static_global in the binary.
# Note: static_global in the binary needs to be in a file
# other than the one with "main" because gdb will expand
# the symtab with main when starting.
gdb_test "p shlib_1_func" "= .*<shlib_1_func>"
gdb_test "p static_global" " = 23"