# Copyright 2007-2012 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 ${objdir}/${subdir}/${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 ${objdir}/${subdir}/${testfile}
set bin_flags [list debug shlib=${binfile_lib}]

if [get_compiler_info ${binfile}] {
    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_shlibs $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


