gdb/
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.trace / limits.exp
1 # Copyright 1998, 2007, 2008, 2009 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 if [istarget "m68k-*-elf"] then {
17 pass "Test not supported on this target"
18 return;
19 }
20
21 load_lib "trace-support.exp"
22
23 if $tracelevel then {
24 strace $tracelevel
25 }
26
27 set prms_id 0
28 set bug_id 0
29
30 set testfile "limits"
31 set srcfile ${testfile}.c
32 set binfile $objdir/$subdir/$testfile
33
34 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
35 executable {debug nowarnings}] != "" } {
36 untested limits.exp
37 return -1
38 }
39
40 # Tests:
41 # 1) Meet and exceed artificial limit on number of tracepoints
42 # 2) Meet and exceed artificial limit on number of memranges
43 # 3) Meet and exceed artificial limit on bytes of bytecode data
44 # [NOTE: number four is moved out into its own separate test module.]
45 # 4) Meet and exceed artificial limit on bytes of trace buffer storage
46 # (circular and non-circular modes). However note that a more
47 # thorough test of the circular mode can be made separately.
48
49 set cr "\[\r\n\]+"
50
51 proc gdb_tracepoint_limit_test { } {
52 global gdb_prompt
53 global cr
54
55 # Make sure we're in a sane starting state.
56 gdb_test "tstop" "" ""
57 gdb_test "tfind none" "" ""
58 gdb_delete_tracepoints
59
60 # Set three tracepoints
61 gdb_test "trace foo" \
62 "Tracepoint \[0-9\]+ at .*" \
63 "tracepoint limit test: set first tracepoint"
64
65 gdb_test "trace bar" \
66 "Tracepoint \[0-9\]+ at .*" \
67 "tracepoint limit test: set second tracepoint"
68
69 gdb_test "trace baz" \
70 "Tracepoint \[0-9\]+ at .*" \
71 "tracepoint limit test: set third tracepoint"
72
73 # Set secret artificial tracepoint limit to four
74 gdb_test "maint packet QTLimit:tp:4" \
75 "received: .OK." \
76 "tracepoint limit test: set limit to four"
77
78 # Now sending three tracepoints should succeed.
79 send_gdb "tstart\n"
80 gdb_expect {
81 -re "$cr$gdb_prompt" {
82 pass "tracepoint limit test: send fewer than limit"
83 }
84 default {
85 fail "tracepoint limit test: send fewer than limit"
86 }
87 }
88
89 # Set secret artificial tracepoint limit to three
90 gdb_test "maint packet QTLimit:tp:3" \
91 "received: .OK." \
92 "tracepoint limit test: set limit to three"
93
94 # Now sending three tracepoints should still succeed.
95 send_gdb "tstart\n"
96 gdb_expect {
97 -re "$cr$gdb_prompt" {
98 pass "tracepoint limit test: send equal to limit"
99 }
100 default {
101 fail "tracepoint limit test: send equal to limit"
102 }
103 }
104
105 # Set secret artificial tracepoint limit to two
106 gdb_test "maint packet QTLimit:tp:2" \
107 "received: .OK." \
108 "tracepoint limit test: set limit to two"
109
110 # Now sending three tracepoints should fail.
111 gdb_test "tstart" \
112 ".*\[Ee\]rror.*" \
113 "tracepoint limit test: send more than limit"
114
115 # Clean up:
116 gdb_test "tstop" "" ""
117 gdb_test "maint packet QTLimit:tp:FFFFFFFF" "" ""
118 }
119
120 proc gdb_memrange_limit_test { } {
121 global gdb_prompt
122 global cr
123
124 # Make sure we're in a sane starting state.
125 gdb_test "tstop" "" ""
126 gdb_test "tfind none" "" ""
127 gdb_delete_tracepoints
128
129 # Set three tracepoints, and make 'em collect memranges
130 gdb_test "trace foo" \
131 "Tracepoint \[0-9\]+ at .*" \
132 "memrange limit test: set first tracepoint"
133
134 gdb_trace_setactions "memrange limit test: set first actions" \
135 "" \
136 "collect \$arg" "^$"
137
138 gdb_test "trace bar" \
139 "Tracepoint \[0-9\]+ at .*" \
140 "memrange limit test: set second tracepoint"
141
142 gdb_trace_setactions "memrange limit test: set second actions" \
143 "" \
144 "collect \$arg" "^$"
145
146 gdb_test "trace baz" \
147 "Tracepoint \[0-9\]+ at .*" \
148 "memrange limit test: set third tracepoint"
149
150 gdb_trace_setactions "memrange limit test: set third actions" \
151 "" \
152 "collect \$arg" "^$"
153
154 # Set secret artificial memrange limit to four
155 gdb_test "maint packet QTLimit:memrange:4" \
156 "received: .OK." \
157 "memrange limit test: set limit to four"
158
159 # Now sending three memranges should still succeed.
160 send_gdb "tstart\n"
161 gdb_expect {
162 -re "$cr$gdb_prompt" {
163 pass "memrange limit test: send fewer than limit"
164 }
165 default {
166 fail "memrange limit test: send fewer than limit"
167 }
168 }
169
170 # Set secret artificial memrange limit to three
171 gdb_test "maint packet QTLimit:memrange:3" \
172 "received: .OK." \
173 "memrange limit test: set limit to three"
174
175 # Now sending three memranges should still succeed.
176 send_gdb "tstart\n"
177 gdb_expect {
178 -re "$cr$gdb_prompt" {
179 pass "memrange limit test: send equal to limit"
180 }
181 default {
182 fail "memrange limit test: send equal to limit"
183 }
184 }
185
186 # Set secret artificial memrange limit to two
187 gdb_test "maint packet QTLimit:memrange:2" \
188 "received: .OK." \
189 "memrange limit test: set limit to two"
190
191 # Now sending three memranges should fail.
192 gdb_test "tstart" \
193 ".*\[Ee\]rror.*" \
194 "memrange limit test: send more than limit"
195
196 # Clean up:
197 gdb_test "tstop" "" ""
198 gdb_test "maint packet QTLimit:memrange:FFFFFFFF" "" ""
199 }
200
201
202 proc gdb_bytecode_limit_test { } {
203 global gdb_prompt
204 global cr
205
206 # Make sure we're in a sane starting state.
207 gdb_test "tstop" "" ""
208 gdb_test "tfind none" "" ""
209 gdb_delete_tracepoints
210
211 # Set three tracepoints
212 gdb_test "trace foo" \
213 "Tracepoint \[0-9\]+ at .*" \
214 "bytecode limit test: set first tracepoint"
215
216 gdb_trace_setactions "bytecode limit test: set first actions" \
217 "" \
218 "collect x + n" "^$"
219
220 gdb_test "trace bar" \
221 "Tracepoint \[0-9\]+ at .*" \
222 "bytecode limit test: set second tracepoint"
223
224 gdb_trace_setactions "bytecode limit test: set second actions" \
225 "" \
226 "collect y + n" "^$"
227
228 gdb_test "trace baz" \
229 "Tracepoint \[0-9\]+ at .*" \
230 "bytecode limit test: set third tracepoint"
231
232 gdb_trace_setactions "bytecode limit test: set third actions" \
233 "" \
234 "collect z + n" "^$"
235
236 # Set secret artificial bytecode limit to a large number
237 gdb_test "maint packet QTLimit:bytecode:400" \
238 "received: .OK." \
239 "bytecode limit test: set limit to large"
240
241 # Now sending three bytecodes should still succeed.
242 send_gdb "tstart\n"
243 gdb_expect {
244 -re "$cr$gdb_prompt" {
245 pass "bytecode limit test: send fewer than limit"
246 }
247 default {
248 fail "bytecode limit test: send fewer than limit"
249 }
250 }
251
252 # Set secret artificial bytecode limit to a small number
253 gdb_test "maint packet QTLimit:bytecode:40" \
254 "received: .OK." \
255 "bytecode limit test: set limit to small"
256
257 # Now sending three bytecodes should fail.
258 gdb_test "tstart" \
259 ".*\[Ee\]rror.*" \
260 "bytecode limit test: send more than limit"
261
262
263 # Clean up:
264 gdb_test "tstop" "" ""
265 gdb_test "maint packet QTLimit:bytecode:FFFFFFFF" "" ""
266 }
267
268 proc gdb_trace_limits_tests { } {
269 global gdb_prompt
270
271 # We generously give ourselves one "pass" if we successfully
272 # detect that this test cannot be run on this target!
273
274 if { ![gdb_target_supports_trace] } then {
275 pass "Current target does not support trace"
276 return 1;
277 }
278
279 if [gdb_test "maint packet QTLimit:tp:ffffffff" \
280 "received: .OK." ""] then {
281 pass "This test cannot be run on this target"
282 return 1;
283 }
284
285 if [gdb_test "maint packet QTLimit:memrange:ffffffff" \
286 "received: .OK." ""] then {
287 pass "This test cannot be run on this target"
288 return 1;
289 }
290
291 if [gdb_test "maint packet QTLimit:bytecode:ffffffff" \
292 "received: .OK." ""] then {
293 pass "This test cannot be run on this target"
294 return;
295 }
296
297 gdb_tracepoint_limit_test
298 gdb_memrange_limit_test
299 gdb_bytecode_limit_test
300 }
301
302 # Start with a fresh gdb.
303
304 gdb_exit
305 gdb_start
306 gdb_reinitialize_dir $srcdir/$subdir
307 gdb_load $binfile
308
309 if [target_info exists gdb_stub] {
310 gdb_step_for_stub;
311 }
312 # Body of test encased in a proc so we can return prematurely.
313 gdb_trace_limits_tests
This page took 0.036811 seconds and 4 git commands to generate.