1b725ae77Skettenis# Copyright 2003, 2004 2b725ae77Skettenis# Free Software Foundation, Inc. 3b725ae77Skettenis 4b725ae77Skettenis# This program is free software; you can redistribute it and/or modify 5b725ae77Skettenis# it under the terms of the GNU General Public License as published by 6b725ae77Skettenis# the Free Software Foundation; either version 2 of the License, or 7b725ae77Skettenis# (at your option) any later version. 8b725ae77Skettenis# 9b725ae77Skettenis# This program is distributed in the hope that it will be useful, 10b725ae77Skettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of 11b725ae77Skettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12b725ae77Skettenis# GNU General Public License for more details. 13b725ae77Skettenis# 14b725ae77Skettenis# You should have received a copy of the GNU General Public License 15b725ae77Skettenis# along with this program; if not, write to the Free Software 16b725ae77Skettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17b725ae77Skettenis 18b725ae77Skettenis# Please email any bugs, comments, and/or additions to this file to: 19b725ae77Skettenis# bug-gdb@prep.ai.mit.edu 20b725ae77Skettenis 21b725ae77Skettenis# This file was created by Jeff Johnston. (jjohnstn@redhat.com) 22b725ae77Skettenis# The shared library compilation portion was copied from shlib-call.exp which was 23b725ae77Skettenis# written by Elena Zannoni (ezannoni@redhat.com). 24b725ae77Skettenis 25b725ae77Skettenisif $tracelevel then { 26b725ae77Skettenis strace $tracelevel 27b725ae77Skettenis} 28b725ae77Skettenis 29b725ae77Skettenis# 30b725ae77Skettenis# test running programs 31b725ae77Skettenis# 32b725ae77Skettenisset prms_id 0 33b725ae77Skettenisset bug_id 0 34b725ae77Skettenis 35b725ae77Skettenis# are we on a target board? 36b725ae77Skettenisif ![isnative] then { 37b725ae77Skettenis return 0 38b725ae77Skettenis} 39b725ae77Skettenis 40b725ae77Skettenisset testfile "pending" 41b725ae77Skettenisset libfile "pendshr" 42b725ae77Skettenisset srcfile ${testfile}.c 43b725ae77Skettenisset binfile ${objdir}/${subdir}/${testfile} 44b725ae77Skettenis 45b725ae77Skettenisif [get_compiler_info ${binfile}] { 46b725ae77Skettenis return -1 47b725ae77Skettenis} 48b725ae77Skettenis 49b725ae77Skettenisif { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}.o" object {debug}] != "" } { 50b725ae77Skettenis gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 51b725ae77Skettenis} 52b725ae77Skettenis 53b725ae77Skettenis# Build the shared libraries this test case needs. 54b725ae77Skettenis# 55b725ae77Skettenis 56b725ae77Skettenisif {$gcc_compiled == 0} { 57b725ae77Skettenis if [istarget "hppa*-hp-hpux*"] then { 58b725ae77Skettenis set additional_flags "additional_flags=+z" 59b725ae77Skettenis } elseif { [istarget "mips-sgi-irix*"] } { 60b725ae77Skettenis # Disable SGI compiler's implicit -Dsgi 61b725ae77Skettenis set additional_flags "additional_flags=-Usgi" 62b725ae77Skettenis } else { 63b725ae77Skettenis # don't know what the compiler is... 64b725ae77Skettenis set additional_flags "" 65b725ae77Skettenis } 66b725ae77Skettenis} else { 67b725ae77Skettenis if { ([istarget "powerpc*-*-aix*"] 68b725ae77Skettenis || [istarget "rs6000*-*-aix*"]) } { 69b725ae77Skettenis set additional_flags "" 70b725ae77Skettenis } else { 71b725ae77Skettenis set additional_flags "additional_flags=-fpic" 72b725ae77Skettenis } 73b725ae77Skettenis} 74b725ae77Skettenis 75b725ae77Skettenisif {[gdb_compile "${srcdir}/${subdir}/${libfile}.c" "${objdir}/${subdir}/${libfile}.o" object [list debug $additional_flags]] != ""} { 76b725ae77Skettenis gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 77b725ae77Skettenis} 78b725ae77Skettenis 79b725ae77Skettenisif [istarget "hppa*-*-hpux*"] { 80b725ae77Skettenis remote_exec build "ld -b ${objdir}/${subdir}/${libfile}.o -o ${objdir}/${subdir}/${libfile}.sl" 81b725ae77Skettenis} else { 82b725ae77Skettenis set additional_flags "additional_flags=-shared" 83b725ae77Skettenis if {[gdb_compile "${objdir}/${subdir}/${libfile}.o" "${objdir}/${subdir}/${libfile}.sl" executable [list debug $additional_flags]] != ""} { 84b725ae77Skettenis gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 85b725ae77Skettenis } 86b725ae77Skettenis} 87b725ae77Skettenis 88b725ae77Skettenisif { ($gcc_compiled 89b725ae77Skettenis && ([istarget "powerpc*-*-aix*"] 90b725ae77Skettenis || [istarget "rs6000*-*-aix*"] )) } { 91b725ae77Skettenis set additional_flags "additional_flags=-L${objdir}/${subdir}" 92b725ae77Skettenis} elseif { [istarget "mips-sgi-irix*"] } { 93b725ae77Skettenis set additional_flags "additional_flags=-rpath ${objdir}/${subdir}" 94b725ae77Skettenis} else { 95b725ae77Skettenis set additional_flags "" 96b725ae77Skettenis} 97b725ae77Skettenisif {[gdb_compile "${objdir}/${subdir}/${testfile}.o ${objdir}/${subdir}/${libfile}.sl" "${binfile}" executable [list debug $additional_flags]] != ""} { 98b725ae77Skettenis gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 99b725ae77Skettenis} 100b725ae77Skettenis 101b725ae77Skettenisgdb_exit 102b725ae77Skettenisgdb_start 103b725ae77Skettenisgdb_reinitialize_dir $srcdir/$subdir 104b725ae77Skettenisgdb_load ${binfile} 105b725ae77Skettenis 106b725ae77Skettenisif [target_info exists gdb_stub] { 107b725ae77Skettenis gdb_step_for_stub; 108b725ae77Skettenis} 109b725ae77Skettenis# 110b725ae77Skettenis# Test setting, querying, and modifying pending breakpoints 111b725ae77Skettenis# 112b725ae77Skettenis 113b725ae77Skettenisgdb_test_multiple "break pendfunc1" "set pending breakpoint" { 114b725ae77Skettenis -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { 115b725ae77Skettenis gdb_test "y" "Breakpoint.*pendfunc1.*pending." "set pending breakpoint" 116b725ae77Skettenis } 117b725ae77Skettenis} 118b725ae77Skettenis 119b725ae77Skettenisgdb_test "info break" \ 120b725ae77Skettenis "Num Type\[ \]+Disp Enb Address\[ \]+What.* 121b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendfunc1.*" \ 122b725ae77Skettenis"single pending breakpoint info" 123b725ae77Skettenis 124b725ae77Skettenis# 125b725ae77Skettenis# Test breaking at existing function 126b725ae77Skettenis# 127b725ae77Skettenis 128b725ae77Skettenisset mainline [gdb_get_line_number "break main here"] 129b725ae77Skettenis 130b725ae77Skettenisgdb_test "break main" \ 131b725ae77Skettenis "Breakpoint.*at.* file .*$srcfile, line $mainline.*" \ 132b725ae77Skettenis "breakpoint function" 133b725ae77Skettenis 134b725ae77Skettenisgdb_test "info break" \ 135b725ae77Skettenis "Num Type\[ \]+Disp Enb Address\[ \]+What.* 136b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendfunc1.* 137b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline" \ 138b725ae77Skettenis"pending plus real breakpoint info" 139b725ae77Skettenis 140b725ae77Skettenis 141b725ae77Skettenis# 142b725ae77Skettenis# Test not setting a pending breakpoint 143b725ae77Skettenis# 144b725ae77Skettenisgdb_test_multiple "break pendfunc2" "Don't set pending breakpoint" { 145b725ae77Skettenis -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { 146b725ae77Skettenis gdb_test "n" "" "Don't set pending breakpoint" 147b725ae77Skettenis } 148b725ae77Skettenis} 149b725ae77Skettenis 150b725ae77Skettenis# 151b725ae77Skettenis# Add condition to pending breakpoint 152b725ae77Skettenis# 153b725ae77Skettenis 154b725ae77Skettenisgdb_test "condition 1 k == 1" "" 155b725ae77Skettenis 156b725ae77Skettenisgdb_test "info break" \ 157b725ae77Skettenis "Num Type\[ \]+Disp Enb Address\[ \]+What.* 158b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendfunc1.* 159b725ae77Skettenis\[\t \]+stop only if k == 1.* 160b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline" \ 161b725ae77Skettenis"pending plus condition" 162b725ae77Skettenis 163b725ae77Skettenis# 164b725ae77Skettenis# Disable pending breakpoint 165b725ae77Skettenis# 166b725ae77Skettenis 167b725ae77Skettenisgdb_test "disable 1" "" 168b725ae77Skettenis 169b725ae77Skettenisgdb_test "info break" \ 170b725ae77Skettenis "Num Type\[ \]+Disp Enb Address\[ \]+What.* 171b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep n.*PENDING.*pendfunc1.* 172b725ae77Skettenis\[\t \]+stop only if k == 1.* 173b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline" \ 174b725ae77Skettenis"pending disabled" 175b725ae77Skettenis 176b725ae77Skettenis# 177b725ae77Skettenis# Add commands to pending breakpoint 178b725ae77Skettenis# 179b725ae77Skettenisgdb_test "commands 1\nprint k\nend" "" \ 180b725ae77Skettenis "Set commands for pending breakpoint" 181b725ae77Skettenis 182b725ae77Skettenisgdb_test "info break" \ 183b725ae77Skettenis "Num Type\[ \]+Disp Enb Address\[ \]+What.* 184b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep n.*PENDING.*pendfunc1.* 185b725ae77Skettenis\[\t \]+stop only if k == 1.* 186b725ae77Skettenis\[\t \]+print k.* 187b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline" \ 188b725ae77Skettenis"pending disabled plus commands" 189b725ae77Skettenis 190b725ae77Skettenis# 191b725ae77Skettenis# Try a pending break for a line in a source file with a condition 192b725ae77Skettenis# 193b725ae77Skettenis 194b725ae77Skettenisgdb_test_multiple "break pendshr.c:26 if x > 3" "Set pending breakpoint 2" { 195b725ae77Skettenis -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { 196b725ae77Skettenis gdb_test "y" "Breakpoint.*pendshr.c:26.*pending." \ 197b725ae77Skettenis "Set pending breakpoint 2" 198b725ae77Skettenis } 199b725ae77Skettenis} 200b725ae77Skettenis 201b725ae77Skettenisgdb_test "info break" \ 202b725ae77Skettenis "Num Type\[ \]+Disp Enb Address\[ \]+What.* 203b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep n.*PENDING.*pendfunc1.* 204b725ae77Skettenis\[\t \]+stop only if k == 1.* 205b725ae77Skettenis\[\t \]+print k.* 206b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline.* 207b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendshr.c:26 if x > 3.*" \ 208b725ae77Skettenis"multiple pending breakpoints" 209b725ae77Skettenis 210*11efff7fSkettenis 211*11efff7fSkettenis# 212*11efff7fSkettenis# Try a pending break for a line in a source file with ignore count: 213*11efff7fSkettenis# 214*11efff7fSkettenis 215*11efff7fSkettenisgdb_test_multiple "break pendshr.c:27" "Set pending breakpoint 3" { 216*11efff7fSkettenis -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { 217*11efff7fSkettenis gdb_test "y" "Breakpoint.*pendshr.c:27.*pending." \ 218*11efff7fSkettenis "Set pending breakpoint 3" 219*11efff7fSkettenis } 220*11efff7fSkettenis} 221*11efff7fSkettenis 222*11efff7fSkettenisgdb_test {ignore $bpnum 2} "Will ignore next 2 crossings of breakpoint .*" \ 223*11efff7fSkettenis "set ignore count on pending breakpoint 3" 224*11efff7fSkettenis 225*11efff7fSkettenisgdb_test "info break" \ 226*11efff7fSkettenis "Num Type\[ \]+Disp Enb Address\[ \]+What.* 227*11efff7fSkettenis\[0-9\]+\[\t \]+breakpoint keep n.*PENDING.*pendfunc1.* 228*11efff7fSkettenis\[\t \]+stop only if k == 1.* 229*11efff7fSkettenis\[\t \]+print k.* 230*11efff7fSkettenis\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline.* 231*11efff7fSkettenis\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendshr.c:26 if x > 3.* 232*11efff7fSkettenis\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendshr.c:27.*ignore next 2 hits.*" \ 233*11efff7fSkettenis"multiple pending breakpoints 2" 234*11efff7fSkettenis 235b725ae77Skettenis# 236b725ae77Skettenis# Run to main which should resolve a pending breakpoint 237b725ae77Skettenis# 238b725ae77Skettenis 239b725ae77Skettenisgdb_test "run" \ 240b725ae77Skettenis"Breakpoint.*at.* 241b725ae77SkettenisPending breakpoint \"pendshr.c:26 if x > 3\" resolved.* 242b725ae77SkettenisBreakpoint.*, main.*$mainline.*" \ 243b725ae77Skettenis"running to main" 244b725ae77Skettenis 245b725ae77Skettenis# 246b725ae77Skettenis# Re-enable the first pending breakpoint which should resolve 247b725ae77Skettenis# 248b725ae77Skettenis 249b725ae77Skettenisgdb_test "enable 1" \ 250b725ae77Skettenis"Breakpoint.*at.* 251b725ae77SkettenisPending breakpoint \"pendfunc1.* resolved.*" \ 252b725ae77Skettenis"re-enabling pending breakpoint that can resolve instantly" 253b725ae77Skettenis 254b725ae77Skettenis# 255b725ae77Skettenis# Continue to verify conditionals and commands for breakpoints are honored 256b725ae77Skettenis# 257b725ae77Skettenis 258b725ae77Skettenisgdb_test "continue" \ 259b725ae77Skettenis".*Breakpoint.*pendfunc1.*at.*pendshr.c:26.*4;" \ 260b725ae77Skettenis"continue to resolved breakpoint 2" 261b725ae77Skettenis 262b725ae77Skettenisgdb_test "continue" \ 263b725ae77Skettenis".*Breakpoint.*pendfunc1.*at.*pendshr.c:26.* 264b725ae77Skettenis\[$\]1 = 1." \ 265b725ae77Skettenis"continue to resolved breakpoint 1" 266b725ae77Skettenis 267*11efff7fSkettenis# 268*11efff7fSkettenis# Disable the other two breakpoints, and continue to the one with 269*11efff7fSkettenis# the ignore count. Make sure you hit it the third time, x should 270*11efff7fSkettenis# be 3 then. 271*11efff7fSkettenis# 272*11efff7fSkettenis 273*11efff7fSkettenisgdb_test "disable 7" "" "Disable other breakpoints" 274*11efff7fSkettenisgdb_test "disable 5" "" "Disable other breakpoints" 275*11efff7fSkettenis 276*11efff7fSkettenisgdb_test "continue" \ 277*11efff7fSkettenis {.*Breakpoint.*pendfunc1.*\(x=3\) at.*pendshr.c:27.*printf.*;} \ 278*11efff7fSkettenis"continue to resolved breakpoint 3" 279*11efff7fSkettenis 280b725ae77Skettenisdelete_breakpoints 281b725ae77Skettenis 282b725ae77Skettenisgdb_breakpoint "main" 283b725ae77Skettenis 284b725ae77Skettenis# 285b725ae77Skettenis# Set non-existent pending breakpoint 286b725ae77Skettenis# 287b725ae77Skettenisgdb_test_multiple "break imaginary" "set imaginary pending breakpoint" { 288b725ae77Skettenis -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { 289b725ae77Skettenis gdb_test "y" "Breakpoint.*imaginary.*pending." \ 290b725ae77Skettenis "set imaginary pending breakpoint" 291b725ae77Skettenis } 292b725ae77Skettenis} 293b725ae77Skettenis 294b725ae77Skettenis# 295b725ae77Skettenis# rerun program and make sure that any pending breakpoint remains and no 296b725ae77Skettenis# error messages are issued for the missing function 297b725ae77Skettenis# 298b725ae77Skettenis 299b725ae77Skettenisrerun_to_main 300*11efff7fSkettenis 301b725ae77Skettenisgdb_test "info break" \ 302b725ae77Skettenis "Num Type\[ \]+Disp Enb Address\[ \]+What.* 303b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline.* 304b725ae77Skettenis\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*imaginary.*" \ 305b725ae77Skettenis"verify pending breakpoint after restart" 306