old-cross-binutils/gdb/testsuite/gdb.base/solib-weak.exp
Joel Brobecker e22f8b7c8c Switch the license of all .exp files to GPLv3.
Switch the license of all .f and .f90 files to GPLv3.
        Switch the license of all .s and .S files to GPLv3.
2007-08-23 18:14:19 +00:00

115 lines
3.2 KiB
Text

# Copyright 2006, 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 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/>.
# Test setting breakpoints on shared library functions provided by more
# than one shared library, when one of the implementations is a "weak"
# symbol. GDB should set a breakpoint at the first copy it finds.
if {[skip_shlib_tests]} {
return 0
}
# These targets have shared libraries, but weak symbols are not meaningful.
if {([istarget arm*-*-symbianelf*]
|| [istarget *-*-mingw*]
|| [istarget *-*-cygwin*]
|| [istarget *-*-pe*])} {
return 0
}
# This test uses GCC-specific syntax.
if [get_compiler_info not-used] {
return -1
}
if {![test_compiler_info "gcc-*"]} {
return 0
}
proc do_test { lib1opts lib2opts lib1first } {
global objdir srcdir subdir
set testopts ""
if {$lib1opts == ""} {
append testopts "lib1 nodebug, "
} else {
append testopts "lib1 debug, "
}
if {$lib2opts == ""} {
append testopts "lib2 nodebug, "
} else {
append testopts "lib2 debug, "
}
if {$lib1first} {
append testopts "lib1 first"
} else {
append testopts "lib2 first"
}
set testfile "solib-weak"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
set libfile1 "weaklib1"
set libfile2 "weaklib2"
set lib1src ${srcdir}/${subdir}/${libfile1}.c
set lib2src ${srcdir}/${subdir}/${libfile2}.c
set lib1 ${objdir}/${subdir}/${libfile1}.sl
set lib2 ${objdir}/${subdir}/${libfile2}.sl
if $lib1first {
set exec_opts [list debug shlib=${lib1} shlib=${lib2}]
set expected_file ${libfile1}
} else {
set exec_opts [list debug shlib=${lib2} shlib=${lib1}]
set expected_file ${libfile2}
}
if { [gdb_compile_shlib ${lib1src} ${lib1} ${lib1opts}] != ""
|| [gdb_compile_shlib ${lib2src} ${lib2} ${lib2opts}] != ""
|| [gdb_compile "${srcdir}/${subdir}/${srcfile}" ${binfile} executable $exec_opts] != ""} {
return -1
}
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
gdb_load_shlibs $lib1 $lib2
runto_main
gdb_breakpoint "bar"
# If the library which will be used is compiled without debugging
# information, GDB will pick the wrong copy of "bar", i.e. the one
# with debugging information.
if {(${lib1opts} == "" && ${lib2opts} != "" && ${lib1first} == 1)
|| (${lib1opts} != "" && ${lib2opts} == "" && ${lib1first} == 0)} {
setup_kfail *-*-* gdb/1824
}
gdb_test "continue" "Breakpoint .* bar .*${expected_file}\\..*" \
"run to breakpoint - $testopts"
}
foreach lib1opts {{} {debug}} {
foreach lib2opts {{} {debug}} {
foreach lib1first {1 0} {
do_test $lib1opts $lib2opts $lib1first
}
}
}