# Copyright 2014-2017 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 "failed to compile"
    return -1
}

# Start with a fresh gdb.

clean_restart $binfile
gdb_load_shlib $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"
