mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-12 12:16:04 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
114 lines
3.1 KiB
Plaintext
114 lines
3.1 KiB
Plaintext
# Copyright 2006-2022 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 *-*-mingw*]
|
|
|| [istarget *-*-cygwin*]
|
|
|| [istarget *-*-pe*])} {
|
|
return 0
|
|
}
|
|
|
|
# This test uses GCC-specific syntax.
|
|
if [get_compiler_info] {
|
|
return -1
|
|
}
|
|
|
|
if {![test_compiler_info "gcc-*"]} {
|
|
return 0
|
|
}
|
|
|
|
proc do_test { lib1opts lib2opts lib1first } {
|
|
global srcdir subdir
|
|
|
|
set testfile "solib-weak"
|
|
set srcfile ${testfile}.c
|
|
|
|
set libfile1 "weaklib1"
|
|
set libfile2 "weaklib2"
|
|
set lib1src ${srcdir}/${subdir}/${libfile1}.c
|
|
set lib2src ${srcdir}/${subdir}/${libfile2}.c
|
|
|
|
# Select a unique name for this test. Give each library and
|
|
# executable a name reflecting its options, so that file caching
|
|
# on the target system does not pick up the wrong file.
|
|
set testopts ""
|
|
if {$lib1opts == ""} {
|
|
append testopts "lib1 nodebug, "
|
|
} else {
|
|
append testopts "lib1 debug, "
|
|
append lib1 "-dbg"
|
|
}
|
|
if {$lib2opts == ""} {
|
|
append testopts "lib2 nodebug, "
|
|
} else {
|
|
append testopts "lib2 debug, "
|
|
append lib2 "-dbg"
|
|
}
|
|
if {$lib1first} {
|
|
append testopts "lib1 first"
|
|
} else {
|
|
append testopts "lib2 first"
|
|
append testfile "-lib2"
|
|
}
|
|
|
|
set binfile [standard_output_file ${testfile}]
|
|
set lib1 [standard_output_file ${libfile1}.sl]
|
|
set lib2 [standard_output_file ${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_shlib $lib1
|
|
gdb_load_shlib $lib2
|
|
|
|
runto_main
|
|
|
|
gdb_breakpoint "bar"
|
|
|
|
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
|
|
}
|
|
}
|
|
}
|