# 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] {
    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


