1# Copyright 2007-2020 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# 17# test running programs 18# 19 20if {[skip_shlib_tests]} { 21 return 0 22} 23 24set testfile "watchpoint-solib" 25set libfile "watchpoint-solib-shr" 26set libname "${libfile}.sl" 27set libsrcfile ${libfile}.c 28set srcfile $srcdir/$subdir/$testfile.c 29set binfile [standard_output_file $testfile] 30set shlibdir [standard_output_file {}] 31set libsrc $srcdir/$subdir/$libfile.c 32set lib_sl [standard_output_file $libname] 33set lib_dlopen [shlib_target_file ${libname}] 34set lib_syms [shlib_symbol_file ${libname}] 35 36if [get_compiler_info] { 37 return -1 38} 39 40set lib_opts debug 41set exec_opts [list debug shlib_load additional_flags=-DSHLIB_NAME=\"${lib_dlopen}\"] 42 43if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != "" 44 || [gdb_compile $srcfile $binfile executable $exec_opts] != ""} { 45 untested "failed to compile" 46 return -1 47} 48 49# Start with a fresh gdb. 50 51gdb_exit 52gdb_start 53gdb_reinitialize_dir $srcdir/$subdir 54gdb_load ${binfile} 55gdb_load_shlib $lib_sl 56 57runto_main 58 59# Disable hardware watchpoints if necessary. 60if [target_info exists gdb,no_hardware_watchpoints] { 61 gdb_test_no_output "set can-use-hw-watchpoints 0" "" 62} 63 64# Test that if we set a watchpoint on a global variable 65# in a explicitly loaded shared library, and then 66# re-run the application, gdb does not crash. 67gdb_test_multiple "break foo" "set pending breakpoint" { 68 -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { 69 gdb_test "y" "Breakpoint.*foo.*pending." "set pending breakpoint" 70 } 71} 72 73gdb_test "continue" ".*Breakpoint 2.*foo.*" "continue to foo" 74gdb_test "watch g" "atchpoint 3: g" "set watchpoint on g" 75gdb_test "continue" ".*New value = 1.*" "continue to watchpoint hit" 76rerun_to_main 77 78with_timeout_factor 30 { 79 gdb_test "continue" ".*Breakpoint 2.*foo.*" "continue to foo again" 80} 81 82gdb_test "continue" ".*New value = 1.*" "continue to watchpoint hit again" 83