# Copyright 2007-2021 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 "failed to compile"
  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 {
  return 0
}

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

gdb_test "continue" \
	 "Continuing.*"

# 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


