# Copyright 2007 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
#
# 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

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

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

delete_breakpoints

# Break in the library.
gdb_test "br foo" \
	 "" \
	 "foo in libmd"

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

# This symbol is now looked up in the ELF library.
gdb_test "br foo2" \
	 "Breakpoint.*file.*${srcfile_lib}.*" \
	 "foo2 in mdlib"

gdb_exit

return 0


