daily update
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / ena-dis-br.exp
CommitLineData
9c7bb332
AC
1# This testcase is part of GDB, the GNU debugger.
2
0b302171
JB
3# Copyright 1997-1999, 2003-2004, 2007-2012 Free Software Foundation,
4# Inc.
c906108c
SS
5
6# This program is free software; you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
e22f8b7c 8# the Free Software Foundation; either version 3 of the License, or
c906108c 9# (at your option) any later version.
e22f8b7c 10#
c906108c
SS
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
e22f8b7c 15#
c906108c 16# You should have received a copy of the GNU General Public License
e22f8b7c 17# along with this program. If not, see <http://www.gnu.org/licenses/>.
c906108c 18
c906108c
SS
19#
20# test running programs
21#
c906108c
SS
22
23set testfile "break"
24set srcfile ${testfile}.c
a1dea79a 25set srcfile1 ${testfile}1.c
c906108c
SS
26set binfile ${objdir}/${subdir}/${testfile}
27
fc91c6c2 28if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug nowarnings}] != "" } {
b60f0898
JB
29 untested ena-dis-br.exp
30 return -1
a1dea79a
FF
31}
32
fc91c6c2 33if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug nowarnings}] != "" } {
b60f0898
JB
34 untested ena-dis-br.exp
35 return -1
a1dea79a
FF
36}
37
fc91c6c2 38if { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug nowarnings}] != "" } {
b60f0898
JB
39 untested ena-dis-br.exp
40 return -1
c906108c
SS
41}
42
43gdb_exit
44gdb_start
45gdb_reinitialize_dir $srcdir/$subdir
46gdb_load ${binfile}
47
a1dea79a
FF
48set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
49set bp_location8 [gdb_get_line_number "set breakpoint 8 here" $srcfile1]
50set bp_location9 [gdb_get_line_number "set breakpoint 9 here" $srcfile1]
51set bp_location11 [gdb_get_line_number "set breakpoint 11 here"]
52set bp_location13 [gdb_get_line_number "set breakpoint 13 here" $srcfile1]
53set bp_location14 [gdb_get_line_number "set breakpoint 14 here" $srcfile1]
54set bp_location15 [gdb_get_line_number "set breakpoint 15 here" $srcfile1]
55set bp_location16 [gdb_get_line_number "set breakpoint 16 here" $srcfile1]
56set bp_location17 [gdb_get_line_number "set breakpoint 17 here" $srcfile1]
57set bp_location18 [gdb_get_line_number "set breakpoint 18 here" $srcfile1]
58
c906108c
SS
59if ![runto_main] then { fail "enable/disable break tests suppressed" }
60
61# Verify that we can set a breakpoint (the location is irrelevant),
62# then enable it (yes, it's already enabled by default), then hit it.
c906108c 63
9c7bb332
AC
64proc break_at { breakpoint where } {
65 global gdb_prompt
66 global expect_out
c906108c 67
9c7bb332
AC
68 set test "break $breakpoint"
69 set bp 0
70 gdb_test_multiple "$test" "$test" {
71 -re "Breakpoint (\[0-9\]*) at .*$where.*$gdb_prompt $" {
72 set bp $expect_out(1,string)
73 pass "$test"
74 }
75 }
76 return $bp
c906108c
SS
77}
78
9c7bb332 79set bp [break_at "marker1" " line ($bp_location15|$bp_location16)"]
c906108c 80
27d3a1a2 81gdb_test_no_output "enable $bp" "enable break marker1"
c906108c 82
9c7bb332
AC
83gdb_test "info break $bp" \
84 "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+keep\[ \t\]+y.*" \
85 "info break marker1"
c906108c 86
9c7bb332
AC
87# See the comments in condbreak.exp for "run until breakpoint at
88# marker1" for an explanation of the xfail below.
89set test "continue to break marker1"
90gdb_test_multiple "continue" "$test" {
91 -re "Breakpoint \[0-9\]*, marker1.*$gdb_prompt $" {
92 pass "$test"
93 }
94 -re "Breakpoint \[0-9\]*, $hex in marker1.*$gdb_prompt $" {
95 xfail "$test"
96 }
c906108c
SS
97}
98
27d3a1a2 99gdb_test_no_output "delete $bp" "delete break marker1"
c906108c 100
9c7bb332
AC
101# Verify that we can set a breakpoint to be self-disabling after the
102# first time it triggers.
103set bp [break_at "marker2" " line ($bp_location8|$bp_location9)"]
c906108c 104
27d3a1a2 105gdb_test_no_output "enable once $bp" "enable once break marker2"
9c7bb332
AC
106
107gdb_test "info break $bp" \
108 "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+dis\[ \t\]+y.*" \
109 "info auto-disabled break marker2"
110
111# See the comments in condbreak.exp for "run until breakpoint at
112# marker1" for an explanation of the xfail below.
113set test "continue to auto-disabled break marker2"
114gdb_test_multiple "continue" "$test" {
115 -re "Breakpoint \[0-9\]*, marker2.*$gdb_prompt $" {
116 pass "$test"
117 }
118 -re "Breakpoint \[0-9\]*, $hex in marker2.*$gdb_prompt $" {
119 xfail "$test"
120 }
c906108c
SS
121}
122
9c7bb332
AC
123gdb_test "info break $bp" \
124 "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+dis\[ \t\]+n.*" \
125 "info auto-disabled break marker2"
126
c906108c 127# Verify that we don't stop at a disabled breakpoint.
7a292a7a
SS
128gdb_continue_to_end "no stop"
129rerun_to_main
130gdb_continue_to_end "no stop at auto-disabled break marker2"
c906108c 131
9c7bb332
AC
132# Verify that we can set a breakpoint to be self-deleting after the
133# first time it triggers.
134if ![runto_main] then {
135 fail "enable/disable break tests suppressed"
c906108c
SS
136}
137
9c7bb332 138set bp [break_at "marker3" " line ($bp_location17|$bp_location18)"]
c906108c 139
27d3a1a2 140gdb_test_no_output "enable del $bp" "enable del break marker3"
c906108c 141
9c7bb332
AC
142gdb_test "info break $bp" \
143 "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+del\[ \t\]+y.*" \
144 "info auto-deleted break marker2"
c906108c 145
9c7bb332
AC
146gdb_test "continue" \
147 ".*marker3 .*:($bp_location17|$bp_location18).*" \
148 "continue to auto-deleted break marker3"
149
150gdb_test "info break $bp" \
e5a67952 151 ".*No breakpoint or watchpoint matching.*" \
9c7bb332 152 "info auto-deleted break marker3"
c906108c
SS
153
154# Verify that we can set a breakpoint and manually disable it (we've
155# already proven that disabled bp's don't trigger).
c906108c 156
9c7bb332 157set bp [break_at "marker4" " line ($bp_location14|$bp_location13).*"]
c906108c 158
27d3a1a2 159gdb_test_no_output "disable $bp" "disable break marker4"
9c7bb332
AC
160
161gdb_test "info break $bp" \
162 "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+keep\[ \t\]+n.*" \
163 "info break marker4"
c906108c
SS
164
165# Verify that we can set a breakpoint with an ignore count N, which
166# should cause the next N triggers of the bp to be ignored. (This is
167# a flavor of enablement/disablement, after all.)
c906108c 168
9c7bb332
AC
169if ![runto_main] then {
170 fail "enable/disable break tests suppressed"
c906108c
SS
171}
172
9c7bb332
AC
173set bp [break_at "marker1" " line ($bp_location15|$bp_location16).*"]
174
c906108c
SS
175# Verify that an ignore of a non-existent breakpoint is gracefully
176# handled.
9c7bb332
AC
177
178gdb_test "ignore 999 2" \
179 "No breakpoint number 999..*" \
180 "ignore non-existent break"
c906108c
SS
181
182# Verify that a missing ignore count is gracefully handled.
9c7bb332
AC
183
184gdb_test "ignore $bp" \
185 "Second argument .specified ignore-count. is missing..*" \
186 "ignore break with missing ignore count"
c906108c
SS
187
188# Verify that a negative or zero ignore count is handled gracefully
189# (they both are treated the same).
c906108c 190
9c7bb332
AC
191gdb_test "ignore $bp -1" \
192 "Will stop next time breakpoint \[0-9\]* is reached..*" \
193 "ignore break marker1 -1"
c906108c 194
9c7bb332
AC
195gdb_test "ignore $bp 0" \
196 "Will stop next time breakpoint \[0-9\]* is reached..*" \
197 "ignore break marker1 0"
c906108c 198
9c7bb332
AC
199gdb_test "ignore $bp 1" \
200 "Will ignore next crossing of breakpoint \[0-9\]*.*" \
201 "ignore break marker1"
202
203gdb_test "info break $bp" \
204 "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+keep\[ \t\]+y.*ignore next 1 hits.*" \
205 "info ignored break marker1"
c906108c 206
7a292a7a
SS
207gdb_continue_to_end "no stop at ignored break marker1"
208rerun_to_main
c906108c 209
11cf8741
JM
210# See the comments in condbreak.exp for "run until breakpoint at marker1"
211# for an explanation of the xfail below.
9c7bb332
AC
212set test "continue to break marker1, 2nd time"
213gdb_test_multiple "continue" "$test" {
214 -re "Breakpoint \[0-9\]*, marker1.*$gdb_prompt $" {
215 pass "continue to break marker1, 2nd time"
216 }
217 -re "Breakpoint \[0-9\]*, $hex in marker1.*$gdb_prompt $" {
218 xfail "continue to break marker1, 2nd time"
219 }
c906108c
SS
220}
221
222# Verify that we can specify both an ignore count and an auto-delete.
c906108c 223
9c7bb332
AC
224if ![runto_main] then {
225 fail "enable/disable break tests suppressed"
c906108c
SS
226}
227
9c7bb332 228set bp [break_at marker1 " line ($bp_location15|$bp_location16).*"]
c906108c 229
9c7bb332
AC
230gdb_test "ignore $bp 1" \
231 "Will ignore next crossing of breakpoint \[0-9\]*.*" \
232 "ignore break marker1"
c906108c 233
27d3a1a2 234gdb_test_no_output "enable del $bp" "enable del break marker1"
9c7bb332
AC
235
236gdb_test "info break $bp" \
237 "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+del\[ \t\]+y.*ignore next 1 hits.*" \
238 "info break marker1"
c906108c 239
7a292a7a
SS
240gdb_continue_to_end "no stop at ignored & auto-deleted break marker1"
241rerun_to_main
c906108c 242
9c7bb332
AC
243gdb_test "continue" \
244 ".*marker1 .*:($bp_location15|$bp_location16).*" \
245 "continue to ignored & auto-deleted break marker1"
c906108c
SS
246
247# Verify that a disabled breakpoint's ignore count isn't updated when
248# the bp is encountered.
c906108c 249
9c7bb332
AC
250if ![runto_main] then {
251 fail "enable/disable break tests suppressed"
c906108c
SS
252}
253
9c7bb332 254set bp [break_at marker1 " line ($bp_location15|$bp_location16)"]
c906108c 255
9c7bb332
AC
256gdb_test "ignore $bp 10" \
257 "Will ignore next 10 crossings of breakpoint \[0-9\]*.*" \
258 "ignore break marker1"
259
27d3a1a2 260gdb_test_no_output "disable $bp" "disable break marker1"
c906108c 261
7a292a7a
SS
262gdb_continue_to_end "no stop at ignored & disabled break marker1"
263rerun_to_main
c906108c 264
9c7bb332
AC
265gdb_test "info break $bp" \
266 "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+keep\[ \t\]+n.*ignore next 10 hits.*" \
267 "info ignored & disabled break marker1"
c906108c
SS
268
269# Verify that GDB correctly handles the "continue" command with an argument,
270# which is an ignore count to set on the currently stopped-at breakpoint.
271# (Also verify that GDB gracefully handles the case where the inferior
272# isn't stopped at a breakpoint.)
273#
274if ![runto_main] then { fail "enable/disable break tests suppressed" }
275
9c7bb332
AC
276gdb_test "break $bp_location1" \
277 "Breakpoint \[0-9\]*.*, line $bp_location1.*" \
278 "prepare to continue with ignore count"
279
280gdb_test "continue 2" \
281 "Will ignore next crossing of breakpoint \[0-9\]*. Continuing..*" \
282 "continue with ignore count"
283
284gdb_test "next" ".*$bp_location11\[ \t\]*marker1.*" \
285 step after continue with ignore count"
286
287set test "continue with ignore count, not stopped at bpt"
288gdb_test_multiple "continue 2" "$test" {
289 -re "Not stopped at any breakpoint; argument ignored.*$gdb_prompt $" {
290 pass "$test"
291 }
292 -re "No breakpoint number -1.*$gdb_prompt $" {
293 kfail gdb/1689 "$test"
294 }
c906108c
SS
295}
296
297gdb_exit
298return 0
This page took 1.172267 seconds and 4 git commands to generate.