1# Copyright 2007, 2009, 2010, 2011 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 16if $tracelevel then { 17 strace $tracelevel 18} 19 20# 21# test running programs 22# 23 24if {[skip_shlib_tests]} { 25 return 0 26} 27 28set testfile "watchpoint-solib" 29set libfile "watchpoint-solib-shr" 30set libname "${libfile}.sl" 31set libsrcfile ${libfile}.c 32set srcfile $srcdir/$subdir/$testfile.c 33set binfile $objdir/$subdir/$testfile 34set shlibdir ${objdir}/${subdir} 35set libsrc $srcdir/$subdir/$libfile.c 36set lib_sl $objdir/$subdir/$libname 37set lib_dlopen [shlib_target_file ${libname}] 38set lib_syms [shlib_symbol_file ${libname}] 39 40if [get_compiler_info ${binfile}] { 41 return -1 42} 43 44set lib_opts debug 45set exec_opts [list debug shlib_load additional_flags=-DSHLIB_NAME\=\"${lib_dlopen}\"] 46 47if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != "" 48 || [gdb_compile $srcfile $binfile executable $exec_opts] != ""} { 49 untested "Couldn't compile $libsrc or $srcfile." 50 return -1 51} 52 53# Start with a fresh gdb. 54 55gdb_exit 56gdb_start 57gdb_reinitialize_dir $srcdir/$subdir 58gdb_load ${binfile} 59gdb_load_shlibs $lib_sl 60 61if [target_info exists gdb_stub] { 62 gdb_step_for_stub; 63} 64 65runto_main 66 67# Disable hardware watchpoints if necessary. 68if [target_info exists gdb,no_hardware_watchpoints] { 69 gdb_test_no_output "set can-use-hw-watchpoints 0" "" 70} 71 72# Test that if we set a watchpoint on a global variable 73# in a explicitly loaded shared library, and then 74# re-run the application, gdb does not crash. 75gdb_test_multiple "break foo" "set pending breakpoint" { 76 -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { 77 gdb_test "y" "Breakpoint.*foo.*pending." "set pending breakpoint" 78 } 79} 80 81set prev_timeout $timeout 82set timeout 120 83 84gdb_test "continue" ".*Breakpoint 2.*foo.*" "continue to foo" 85gdb_test "watch g" "atchpoint 3: g" "set watchpoint on g" 86gdb_test "continue" ".*New value = 1.*" "continue to watchpoint hit" 87rerun_to_main 88gdb_test "continue" ".*Breakpoint 2.*foo.*" "continue to foo again" 89gdb_test "continue" ".*New value = 1.*" "continue to watchpoint hit again" 90 91set timeout $prev_timeout 92