]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.base/condbreak.exp
Update copyright year range in all GDB files.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.base / condbreak.exp
CommitLineData
b811d2c2 1# Copyright 1997-2020 Free Software Foundation, Inc.
c906108c
SS
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
e22f8b7c 5# the Free Software Foundation; either version 3 of the License, or
c906108c 6# (at your option) any later version.
e22f8b7c 7#
c906108c
SS
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.
e22f8b7c 12#
c906108c 13# You should have received a copy of the GNU General Public License
e22f8b7c 14# along with this program. If not, see <http://www.gnu.org/licenses/>.
c906108c 15
c906108c
SS
16# This test was written by Rich Title.
17# Purpose is to test conditional breakpoints.
18# Modeled after "break.exp".
19
c906108c
SS
20#
21# test running programs
22#
c906108c 23
f76495c8 24standard_testfile break.c break1.c
a1dea79a 25
5b362f04 26if {[prepare_for_testing "failed to prepare" $testfile [list $srcfile $srcfile2] \
f76495c8
TT
27 {debug nowarnings}]} {
28 return -1
c906108c
SS
29}
30
4c93b1db 31if [get_compiler_info] {
ae59b1da 32 return -1
085dd6e6
JM
33}
34
f76495c8 35clean_restart ${binfile}
c906108c
SS
36
37
a1dea79a
FF
38set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
39set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]
f76495c8 40set bp_location8 [gdb_get_line_number "set breakpoint 8 here" $srcfile2]
f76495c8
TT
41set bp_location14 [gdb_get_line_number "set breakpoint 14 here" $srcfile2]
42set bp_location15 [gdb_get_line_number "set breakpoint 15 here" $srcfile2]
f76495c8 43set bp_location17 [gdb_get_line_number "set breakpoint 17 here" $srcfile2]
a1dea79a 44
c906108c
SS
45#
46# test break at function
47#
48gdb_test "break main" \
49 "Breakpoint.*at.* file .*$srcfile, line.*" \
50 "breakpoint function"
51
52#
53# test conditional break at function
54#
55gdb_test "break marker1 if 1==1" \
f76495c8 56 "Breakpoint.*at.* file .*$srcfile2, line.*"
c906108c 57
27d3a1a2 58gdb_test_no_output "delete 2"
c906108c
SS
59
60#
61# test conditional break at line number
62#
a1dea79a
FF
63gdb_test "break $srcfile:$bp_location1 if 1==1" \
64 "Breakpoint.*at.* file .*$srcfile, line $bp_location1\\."
c906108c 65
27d3a1a2 66gdb_test_no_output "delete 3"
c906108c
SS
67
68#
69# test conditional break at function
70#
71gdb_test "break marker1 if (1==1)" \
f76495c8 72 "Breakpoint.*at.* file .*$srcfile2, line.*"
c906108c
SS
73
74#
75# test conditional break at line number
76#
a1dea79a
FF
77gdb_test "break $srcfile:$bp_location1 if (1==1)" \
78 "Breakpoint.*at.* file .*$srcfile, line $bp_location1\\."
c906108c
SS
79
80gdb_test "break marker2 if (a==43)" \
f76495c8 81 "Breakpoint.*at.* file .*$srcfile2, line.*"
c906108c 82
429374b8
JK
83#
84# Check break involving inferior function call.
85# Ensure there is at least one additional breakpoint with higher VMA.
86#
87gdb_test "break marker3 if (multi_line_if_conditional(1,1,1)==0)" \
f76495c8 88 "Breakpoint.*at.* file .*$srcfile2, line.*"
429374b8 89gdb_test "break marker4" \
f76495c8 90 "Breakpoint.*at.* file .*$srcfile2, line.*"
429374b8 91
c906108c
SS
92#
93# check to see what breakpoints are set
94#
c906108c 95gdb_test "info break" \
54e52265 96 "Num Type\[ \]+Disp Enb Address\[ \]+What.*
a1dea79a 97\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$bp_location6.*
b6304613 98\[0-9\]+\[\t \]+breakpoint keep y.* in marker1 at .*$srcfile2:$bp_location15.*
0d381245 99\[\t \]+stop only if \\(1==1\\).*
a1dea79a 100\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$bp_location1.*
0d381245 101\[\t \]+stop only if \\(1==1\\).*
b6304613 102\[0-9\]+\[\t \]+breakpoint keep y.* in marker2 at .*$srcfile2:$bp_location8.*
429374b8 103\[\t \]+stop only if \\(a==43\\).*
b6304613 104\[0-9\]+\[\t \]+breakpoint keep y.* in marker3 at .*$srcfile2:$bp_location17.*
429374b8 105\[\t \]+stop only if \\(multi_line_if_conditional\\(1,1,1\\)==0\\).*
b6304613 106\[0-9\]+\[\t \]+breakpoint keep y.* in marker4 at .*$srcfile2:$bp_location14.*" \
c906108c
SS
107 "breakpoint info"
108
109
110#
7a292a7a 111# run until the breakpoint at main is hit.
c906108c 112#
7a292a7a
SS
113
114
cce74817 115rerun_to_main
c906108c
SS
116
117#
118# run until the breakpoint at a line number
119#
a1dea79a 120gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location1.*$bp_location1\[\t \]+printf.*factorial.*" \
c906108c
SS
121 "run until breakpoint set at a line number"
122
123#
124# run until the breakpoint at marker1
125#
11cf8741
JM
126# If the inferior stops at the first instruction of a source line, GDB
127# won't print the actual PC value; the source line is enough to
128# exactly specify the PC. But if the inferior is instead stopped in
129# the midst of a source line, GDB will include the PC in the
130# breakpoint hit message. This way, GDB always provides the exact
131# stop location, but avoids clutter when possible.
132#
133# Suppose you have a function written completely on one source line, like:
2c415c0f 134# int foo (int x) { return 0; }
11cf8741
JM
135# Setting a breakpoint at `foo' actually places the breakpoint after
136# foo's prologue.
137#
138# GCC's STABS writer always emits a line entry attributing the
139# prologue instructions to the line containing the function's open
140# brace, even if the first user instruction is also on that line.
141# This means that, in the case of a one-line function, you will get
142# two line entries in the debug info for the same line: one at the
143# function's entry point, and another at the first user instruction.
144# GDB preserves these duplicated line entries, and prefers the later
145# one; thus, when the program stops after the prologue, at the first
146# user instruction, GDB's search finds the second line entry, decides
147# that the PC is indeed at the beginning of a source line, and doesn't
148# print an address in the breakpoint hit message.
149#
150# GCC's Dwarf2 writer, on the other hand, squeezes out duplicate line
151# entries, so GDB considers the source line to begin at the start of
152# the function's prologue. Thus, if the program stops at the
153# breakpoint, GDB will decide that the PC is not at the beginning of a
154# source line, and will print an address.
155#
156# I think the Dwarf2 writer's behavior is arguably correct, but not
157# helpful. If the user sets a breakpoint at that source line, they
158# want that breakpoint to fall after the prologue. Identifying the
159# prologue's code with the opening brace is nice, but it shouldn't
160# take precedence over real code.
161#
162# Until the Dwarf2 writer gets fixed, I'm going to XFAIL its behavior.
ad3986f0 163gdb_test_multiple "continue" "run until breakpoint at marker1" {
dc7e1a77 164 -re "Continuing\\..*Breakpoint \[0-9\]+, marker1 \\(\\) at .*$srcfile2:$bp_location15.*$bp_location15\[\t \]+.*$gdb_prompt $" {
11cf8741
JM
165 pass "run until breakpoint at marker1"
166 }
dc7e1a77 167 -re "Continuing\\..*Breakpoint \[0-9\]+, $hex in marker1 \\(\\) at .*$srcfile2:$bp_location15.*$bp_location15\[\t \]+.*$gdb_prompt $" {
11cf8741
JM
168 xfail "run until breakpoint at marker1"
169 }
11cf8741 170}
c906108c 171
c906108c 172# run until the breakpoint at marker2
dfcd3bfb 173# Same issues here as above.
a0b3c4fd 174setup_xfail hppa2.0w-*-* 11512CLLbs
ad3986f0 175gdb_test_multiple "continue" "run until breakpoint at marker2" {
dc7e1a77 176 -re "Continuing\\..*Breakpoint \[0-9\]+, marker2 \\(a=43\\) at .*$srcfile2:$bp_location8.*$bp_location8\[\t \]+.*$gdb_prompt $" {
dfcd3bfb
JM
177 pass "run until breakpoint at marker2"
178 }
dc7e1a77 179 -re "Continuing\\..*Breakpoint \[0-9\]+, $hex in marker2 \\(a=43\\) at .*$srcfile2:$bp_location8.*$bp_location8\[\t \]+.*$gdb_prompt $" {
dfcd3bfb
JM
180 xfail "run until breakpoint at marker2"
181 }
dfcd3bfb 182}
b6199126
DJ
183
184# Test combinations of conditional and thread-specific breakpoints.
185gdb_test "break main if (1==1) thread 999" \
186 "Unknown thread 999\\."
187gdb_test "break main thread 999 if (1==1)" \
188 "Unknown thread 999\\."
189
190# Verify that both if and thread can be distinguished from a breakpoint
191# address expression.
192gdb_test "break *main if (1==1) thread 999" \
193 "Unknown thread 999\\."
194gdb_test "break *main thread 999 if (1==1)" \
195 "Unknown thread 999\\."
196
197# Similarly for task.
198gdb_test "break *main if (1==1) task 999" \
199 "Unknown task 999\\."
200gdb_test "break *main task 999 if (1==1)" \
201 "Unknown task 999\\."
202
203# GDB accepts abbreviations for "thread" and "task".
204gdb_test "break *main if (1==1) t 999" \
205 "Unknown thread 999\\."
206gdb_test "break *main if (1==1) th 999" \
207 "Unknown thread 999\\."
208gdb_test "break *main if (1==1) ta 999" \
209 "Unknown task 999\\."
429374b8
JK
210
211set test "run until breakpoint at marker3"
212gdb_test_multiple "continue" $test {
dc7e1a77 213 -re "Continuing\\..*Breakpoint \[0-9\]+, marker3 \\(a=$hex \"stack\", b=$hex \"trace\"\\) at .*$srcfile2:$bp_location17.*$bp_location17\[\t \]+.*$gdb_prompt $" {
429374b8
JK
214 pass $test
215 }
dc7e1a77 216 -re "Continuing\\..*Breakpoint \[0-9\]+, $hex in marker3 \\(a=$hex \"stack\", b=$hex \"trace\"\\) at .*$srcfile2:$bp_location17.*$bp_location17\[\t \]+.*$gdb_prompt $" {
429374b8
JK
217 xfail $test
218 }
219}
220
221set test "run until breakpoint at marker4"
222gdb_test_multiple "continue" $test {
dc7e1a77 223 -re "Continuing\\..*Breakpoint \[0-9\]+, marker4 \\(d=177601976\\) at .*$srcfile2:$bp_location14.*$bp_location14\[\t \]+.*$gdb_prompt $" {
429374b8
JK
224 pass $test
225 }
dc7e1a77 226 -re "Continuing\\..*Breakpoint \[0-9\]+, $hex in marker4 \\(d=177601976\\) at .*$srcfile2:$bp_location14.*$bp_location14\[\t \]+.*$gdb_prompt $" {
429374b8
JK
227 xfail $test
228 }
229}
d55637df
TT
230
231gdb_test "complete cond 1" "cond 1"
232gdb_test "set variable \$var = 1"
233gdb_test "complete cond \$v" "cond \\\$var"
234gdb_test "complete cond 1 values\[0\].a" "cond 1 values.0..a_field"