# Copyright 2007-2016 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/>.
#
# Contributed by Markus Deuling <deuling@de.ibm.com>.
#

if {[skip_shlib_tests]} {
    return 0
}

# Library file.
set libname "solib-symbol-lib"
set srcfile_lib ${srcdir}/${subdir}/${libname}.c
set binfile_lib [standard_output_file ${libname}.so]
set lib_flags [list debug ldflags=-Wl,-Bsymbolic]
# Binary file.
set testfile "solib-symbol-main"
set srcfile ${srcdir}/${subdir}/${testfile}.c
set binfile [standard_output_file ${testfile}]
set bin_flags [list debug shlib=${binfile_lib}]

if [get_compiler_info] {
    return -1
}

if { [gdb_compile_shlib ${srcfile_lib} ${binfile_lib} $lib_flags] != ""
     || [gdb_compile ${srcfile} ${binfile} executable $bin_flags] != "" } {
  untested "Could not compile $binfile_lib or $binfile."
  return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
gdb_load_shlib $binfile_lib

# Set a breakpoint in the binary.
gdb_test "br foo2" \
	 "Breakpoint.*file.*${testfile}\\.c.*" \
	 "foo2 in main"

delete_breakpoints

if ![runto_main] then {
  fail "Can't run to main"
  return 0
}

# Break in the library.
gdb_test "br foo" \
	 "Breakpoint.*file.*${libname}\\.c.*" \
	 "foo in libmd"

gdb_test "continue" \
	 "Continuing.*" \
	 "continue"

# This symbol is now looked up in the ELF library and the binary.
gdb_test "br foo2" \
	 "Breakpoint.*: foo2. .2 locations..*" \
	 "foo2 in mdlib"

gdb_exit

return 0


