gdb
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / memattr.exp
CommitLineData
fbcb778d
MS
1# Copyright 2011
2# Free Software Foundation, Inc.
3
4# This program is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3 of the License, or
7# (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17# This file is part of the gdb testsuite
18
19# Test the memory attribute commands.
20
21if $tracelevel then {
22 strace $tracelevel
23}
24
25set testfile "memattr"
26set srcfile ${testfile}.c
27
28if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
29 return -1
30}
31
32runto main
33
34set mem1start -1
35set mem2start -1
36set mem3start -1
37set mem4start -1
38set mem5start -1
39
40set mem1end -1
41set mem2end -1
42set mem3end -1
43set mem4end -1
44set mem5end -1
45
46
47gdb_test_multiple "info address mem1" "get address of mem1" {
48 -re "Symbol \"mem1\" is static storage at address ($hex).*$gdb_prompt $" {
49 set mem1start $expect_out(1,string)
50 }
51}
52
53gdb_test_multiple "info address mem2" "get address of mem2" {
54 -re "Symbol \"mem2\" is static storage at address ($hex).*$gdb_prompt $" {
55 set mem2start $expect_out(1,string)
56 }
57}
58
59gdb_test_multiple "info address mem3" "get address of mem3" {
60 -re "Symbol \"mem3\" is static storage at address ($hex).*$gdb_prompt $" {
61 set mem3start $expect_out(1,string)
62 }
63}
64
65gdb_test_multiple "info address mem4" "get address of mem4" {
66 -re "Symbol \"mem4\" is static storage at address ($hex).*$gdb_prompt $" {
67 set mem4start $expect_out(1,string)
68 }
69}
70
71gdb_test_multiple "info address mem5" "get address of mem5" {
72 -re "Symbol \"mem5\" is static storage at address ($hex).*$gdb_prompt $" {
73 set mem5start $expect_out(1,string)
74 }
75}
76
77gdb_test_multiple "print &mem1\[64\]" "get end of mem1" {
78 -re "$decimal = .* ($hex).*$gdb_prompt $" {
79 set mem1end $expect_out(1,string)
80 }
81}
82
83gdb_test_multiple "print &mem2\[64\]" "get end of mem2" {
84 -re "$decimal = .* ($hex).*$gdb_prompt $" {
85 set mem2end $expect_out(1,string)
86 }
87}
88
89gdb_test_multiple "print &mem3\[64\]" "get end of mem3" {
90 -re "$decimal = .* ($hex).*$gdb_prompt $" {
91 set mem3end $expect_out(1,string)
92 }
93}
94
95gdb_test_multiple "print &mem4\[64\]" "get end of mem4" {
96 -re "$decimal = .* ($hex).*$gdb_prompt $" {
97 set mem4end $expect_out(1,string)
98 }
99}
100
101gdb_test_multiple "print &mem5\[64\]" "get end of mem5" {
102 -re "$decimal = .* ($hex).*$gdb_prompt $" {
103 set mem5end $expect_out(1,string)
104 }
105}
106
107gdb_test_no_output "mem $mem1start $mem1end wo" "create mem region 1"
108gdb_test_no_output "mem $mem2start $mem2end ro" "create mem region 2"
109gdb_test_no_output "mem $mem3start $mem3end rw" "create mem region 3"
110gdb_test_no_output "mem $mem4start $mem4end rw" "create mem region 4"
111gdb_test_no_output "mem $mem5start $mem5end rw" "create mem region 5"
112
113set see1 0
114set see2 0
115set see3 0
116set see4 0
117set see5 0
118
119gdb_test_multiple "info mem" "info mem(1)" {
120 -re "1 y \t$hex $hex wo nocache \[^\r\n\]*" {
121 set see1 1
122 exp_continue
123 }
124 -re "2 y \t$hex $hex ro nocache \[^\r\n\]*" {
125 set see2 1
126 exp_continue
127 }
128 -re "3 y \t$hex $hex rw nocache \[^\r\n\]*" {
129 set see3 1
130 exp_continue
131 }
132 -re "4 y \t$hex $hex rw nocache \[^\r\n\]*" {
133 set see4 1
134 exp_continue
135 }
136 -re "5 y \t$hex $hex rw nocache .\[^\r\n\]*" {
137 set see5 1
138 exp_continue
139 }
140 -re "$gdb_prompt $" {
141 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
142 pass "info mem (1)"
143 } else {
144 fail "info mem (1)"
145 }
146 }
147}
148
149#
150# Test read-only, write-only
151#
152
153# mem1 is write only: read should fail.
154gdb_test "print mem1\[1\]" \
155 "Cannot access memory at address $hex" \
156 "mem1 cannot be read"
157
158gdb_test "print mem1\[1\] = 9" \
159 "$decimal = 9" \
160 "mem1 can be written"
161
162# mem2 is read only: write should fail.
163gdb_test "print mem2\[1\] = 9" \
164 "Cannot access memory at address $hex" \
165 "mem2 cannot be written"
166
167gdb_test "print mem2\[1\]" \
168 "$decimal = 0" \
169 "mem2 can be read"
170
171#
172# Test disable and enable
173#
174
175gdb_test_no_output "disable mem 1" "disable mem 1"
176gdb_test "info mem" "1 n .*" "mem 1 was disabled"
177
178gdb_test_no_output "enable mem 1" "enable mem 1"
179gdb_test "info mem" "1 y .*" "mem 1 was enabled"
180
181gdb_test_no_output "disable mem 2 4"
182
183set see1 0
184set see2 0
185set see3 0
186set see4 0
187set see5 0
188
189gdb_test_multiple "info mem" "mem 2 and 4 were disabled" {
190 -re "1 y \t$hex $hex wo nocache \[^\r\n\]*" {
191 set see1 1
192 exp_continue
193 }
194 -re "2 n \t$hex $hex ro nocache \[^\r\n\]*" {
195 set see2 1
196 exp_continue
197 }
198 -re "3 y \t$hex $hex rw nocache \[^\r\n\]*" {
199 set see3 1
200 exp_continue
201 }
202 -re "4 n \t$hex $hex rw nocache \[^\r\n\]*" {
203 set see4 1
204 exp_continue
205 }
206 -re "5 y \t$hex $hex rw nocache .\[^\r\n\]*" {
207 set see5 1
208 exp_continue
209 }
210 -re "$gdb_prompt $" {
211 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
212 pass "mem 2 and 4 were disabled"
213 } else {
214 fail "mem 2 and 4 were disabled"
215 }
216 }
217}
218
219gdb_test_no_output "enable mem 2-4" "enable mem 2-4"
220
221set see1 0
222set see2 0
223set see3 0
224set see4 0
225set see5 0
226
227gdb_test_multiple "info mem" "mem 2-4 were enabled" {
228 -re "1 y \t$hex $hex wo nocache \[^\r\n\]*" {
229 set see1 1
230 exp_continue
231 }
232 -re "2 y \t$hex $hex ro nocache \[^\r\n\]*" {
233 set see2 1
234 exp_continue
235 }
236 -re "3 y \t$hex $hex rw nocache \[^\r\n\]*" {
237 set see3 1
238 exp_continue
239 }
240 -re "4 y \t$hex $hex rw nocache \[^\r\n\]*" {
241 set see4 1
242 exp_continue
243 }
244 -re "5 y \t$hex $hex rw nocache .\[^\r\n\]*" {
245 set see5 1
246 exp_continue
247 }
248 -re "$gdb_prompt $" {
249 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
250 pass "mem 2-4 were enabled"
251 } else {
252 fail "mem 2-4 were enabled"
253 }
254 }
255}
256
257gdb_test_no_output "disable mem" "disable mem"
258
259set see1 0
260set see2 0
261set see3 0
262set see4 0
263set see5 0
264
265gdb_test_multiple "info mem" "mem 1 to 5 were disabled" {
266 -re "1 n \t$hex $hex wo nocache \[^\r\n\]*" {
267 set see1 1
268 exp_continue
269 }
270 -re "2 n \t$hex $hex ro nocache \[^\r\n\]*" {
271 set see2 1
272 exp_continue
273 }
274 -re "3 n \t$hex $hex rw nocache \[^\r\n\]*" {
275 set see3 1
276 exp_continue
277 }
278 -re "4 n \t$hex $hex rw nocache \[^\r\n\]*" {
279 set see4 1
280 exp_continue
281 }
282 -re "5 n \t$hex $hex rw nocache .\[^\r\n\]*" {
283 set see5 1
284 exp_continue
285 }
286 -re "$gdb_prompt $" {
287 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
288 pass "mem 1 to 5 were disabled"
289 } else {
290 fail "mem 1 to 5 were disabled"
291 }
292 }
293}
294
295gdb_test_no_output "enable mem" "enable mem"
296
297set see1 0
298set see2 0
299set see3 0
300set see4 0
301set see5 0
302
303gdb_test_multiple "info mem" "mem 1 to 5 were enabled" {
304 -re "1 y \t$hex $hex wo nocache \[^\r\n\]*" {
305 set see1 1
306 exp_continue
307 }
308 -re "2 y \t$hex $hex ro nocache \[^\r\n\]*" {
309 set see2 1
310 exp_continue
311 }
312 -re "3 y \t$hex $hex rw nocache \[^\r\n\]*" {
313 set see3 1
314 exp_continue
315 }
316 -re "4 y \t$hex $hex rw nocache \[^\r\n\]*" {
317 set see4 1
318 exp_continue
319 }
320 -re "5 y \t$hex $hex rw nocache .\[^\r\n\]*" {
321 set see5 1
322 exp_continue
323 }
324 -re "$gdb_prompt $" {
325 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
326 pass "mem 1 to 5 were enabled"
327 } else {
328 fail "mem 1 to 5 were enabled"
329 }
330 }
331}
332
333gdb_test "disable mem 7 8" \
334 "No memory region number 7.*No memory region number 8." \
335 "disable non-existant regions"
336
337#
338# Test delete
339#
340
341set see1 0
342set see2 0
343set see3 0
344set see4 0
345set see5 0
346
347gdb_test_no_output "delete mem 1" "delete mem 1"
348gdb_test_multiple "info mem" "mem 1 was deleted" {
349 -re "1 y \t$hex $hex wo nocache \[^\r\n\]*" {
350 set see1 1
351 exp_continue
352 }
353 -re "2 y \t$hex $hex ro nocache \[^\r\n\]*" {
354 set see2 1
355 exp_continue
356 }
357 -re "3 y \t$hex $hex rw nocache \[^\r\n\]*" {
358 set see3 1
359 exp_continue
360 }
361 -re "4 y \t$hex $hex rw nocache \[^\r\n\]*" {
362 set see4 1
363 exp_continue
364 }
365 -re "5 y \t$hex $hex rw nocache .\[^\r\n\]*" {
366 set see5 1
367 exp_continue
368 }
369 -re "$gdb_prompt $" {
370 if { !$see1 && $see2 && $see3 && $see4 && $see5 } then {
371 pass "mem 1 was deleted"
372 } else {
373 fail "mem 1 was deleted"
374 }
375 }
376}
377
378set see1 0
379set see2 0
380set see3 0
381set see4 0
382set see5 0
383
384gdb_test_no_output "delete mem 2 4" "delete mem 2 4"
385gdb_test_multiple "info mem" "mem 2 and 4 were deleted" {
386 -re "1 y \t$hex $hex wo nocache \[^\r\n\]*" {
387 set see1 1
388 exp_continue
389 }
390 -re "2 y \t$hex $hex ro nocache \[^\r\n\]*" {
391 set see2 1
392 exp_continue
393 }
394 -re "3 y \t$hex $hex rw nocache \[^\r\n\]*" {
395 set see3 1
396 exp_continue
397 }
398 -re "4 y \t$hex $hex rw nocache \[^\r\n\]*" {
399 set see4 1
400 exp_continue
401 }
402 -re "5 y \t$hex $hex rw nocache .\[^\r\n\]*" {
403 set see5 1
404 exp_continue
405 }
406 -re "$gdb_prompt $" {
407 if { !$see1 && !$see2 && $see3 && !$see4 && $see5 } then {
408 pass "mem 2 and 4 were deleted"
409 } else {
410 fail "mem 2 and 4 were deleted"
411 }
412 }
413}
414
415set see1 0
416set see2 0
417set see3 0
418set see4 0
419set see5 0
420
421gdb_test "delete mem 2-4" \
422 "No memory region number 2.*No memory region number 4." \
423 "delete mem 2-4"
424gdb_test_multiple "info mem" "mem 2-4 were deleted" {
425 -re "1 y \t$hex $hex wo nocache \[^\r\n\]*" {
426 set see1 1
427 exp_continue
428 }
429 -re "2 y \t$hex $hex ro nocache \[^\r\n\]*" {
430 set see2 1
431 exp_continue
432 }
433 -re "3 y \t$hex $hex rw nocache \[^\r\n\]*" {
434 set see3 1
435 exp_continue
436 }
437 -re "4 y \t$hex $hex rw nocache \[^\r\n\]*" {
438 set see4 1
439 exp_continue
440 }
441 -re "5 y \t$hex $hex rw nocache .\[^\r\n\]*" {
442 set see5 1
443 exp_continue
444 }
445 -re "$gdb_prompt $" {
446 if { !$see1 && !$see2 && !$see3 && !$see4 && $see5 } then {
447 pass "mem 2-4 were deleted"
448 } else {
449 fail "mem 2-4 were deleted"
450 }
451 }
452}
453
454gdb_test "delete mem 8" "No memory region number 8." \
455 "delete non-existant region"
This page took 0.049185 seconds and 4 git commands to generate.