warn if "source" fails to open the file when from_tty == 0
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / memattr.exp
CommitLineData
28e7fd62 1# Copyright 2011-2013 Free Software Foundation, Inc.
fbcb778d
MS
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# This file is part of the gdb testsuite
17
18# Test the memory attribute commands.
19
f8b41b00 20standard_testfile .c
fbcb778d
MS
21
22if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
23 return -1
24}
25
26runto main
27
28set mem1start -1
29set mem2start -1
30set mem3start -1
31set mem4start -1
32set mem5start -1
33
34set mem1end -1
35set mem2end -1
36set mem3end -1
37set mem4end -1
38set mem5end -1
39
40
41gdb_test_multiple "info address mem1" "get address of mem1" {
42 -re "Symbol \"mem1\" is static storage at address ($hex).*$gdb_prompt $" {
43 set mem1start $expect_out(1,string)
44 }
45}
46
47gdb_test_multiple "info address mem2" "get address of mem2" {
48 -re "Symbol \"mem2\" is static storage at address ($hex).*$gdb_prompt $" {
49 set mem2start $expect_out(1,string)
50 }
51}
52
53gdb_test_multiple "info address mem3" "get address of mem3" {
54 -re "Symbol \"mem3\" is static storage at address ($hex).*$gdb_prompt $" {
55 set mem3start $expect_out(1,string)
56 }
57}
58
59gdb_test_multiple "info address mem4" "get address of mem4" {
60 -re "Symbol \"mem4\" is static storage at address ($hex).*$gdb_prompt $" {
61 set mem4start $expect_out(1,string)
62 }
63}
64
65gdb_test_multiple "info address mem5" "get address of mem5" {
66 -re "Symbol \"mem5\" is static storage at address ($hex).*$gdb_prompt $" {
67 set mem5start $expect_out(1,string)
68 }
69}
70
71gdb_test_multiple "print &mem1\[64\]" "get end of mem1" {
72 -re "$decimal = .* ($hex).*$gdb_prompt $" {
73 set mem1end $expect_out(1,string)
74 }
75}
76
77gdb_test_multiple "print &mem2\[64\]" "get end of mem2" {
78 -re "$decimal = .* ($hex).*$gdb_prompt $" {
79 set mem2end $expect_out(1,string)
80 }
81}
82
83gdb_test_multiple "print &mem3\[64\]" "get end of mem3" {
84 -re "$decimal = .* ($hex).*$gdb_prompt $" {
85 set mem3end $expect_out(1,string)
86 }
87}
88
89gdb_test_multiple "print &mem4\[64\]" "get end of mem4" {
90 -re "$decimal = .* ($hex).*$gdb_prompt $" {
91 set mem4end $expect_out(1,string)
92 }
93}
94
95gdb_test_multiple "print &mem5\[64\]" "get end of mem5" {
96 -re "$decimal = .* ($hex).*$gdb_prompt $" {
97 set mem5end $expect_out(1,string)
98 }
99}
100
101gdb_test_no_output "mem $mem1start $mem1end wo" "create mem region 1"
102gdb_test_no_output "mem $mem2start $mem2end ro" "create mem region 2"
103gdb_test_no_output "mem $mem3start $mem3end rw" "create mem region 3"
104gdb_test_no_output "mem $mem4start $mem4end rw" "create mem region 4"
105gdb_test_no_output "mem $mem5start $mem5end rw" "create mem region 5"
106
107set see1 0
108set see2 0
109set see3 0
110set see4 0
111set see5 0
112
113gdb_test_multiple "info mem" "info mem(1)" {
b66e66ee 114 -re "1 y \[ \t\]+$hex $hex wo nocache \[^\r\n\]*" {
fbcb778d
MS
115 set see1 1
116 exp_continue
117 }
b66e66ee 118 -re "2 y \[ \t\]+$hex $hex ro nocache \[^\r\n\]*" {
fbcb778d
MS
119 set see2 1
120 exp_continue
121 }
b66e66ee 122 -re "3 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
123 set see3 1
124 exp_continue
125 }
b66e66ee 126 -re "4 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
127 set see4 1
128 exp_continue
129 }
b66e66ee 130 -re "5 y \[ \t\]+$hex $hex rw nocache .\[^\r\n\]*" {
fbcb778d
MS
131 set see5 1
132 exp_continue
133 }
134 -re "$gdb_prompt $" {
135 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
136 pass "info mem (1)"
137 } else {
138 fail "info mem (1)"
139 }
140 }
141}
142
143#
144# Test read-only, write-only
145#
146
147# mem1 is write only: read should fail.
148gdb_test "print mem1\[1\]" \
149 "Cannot access memory at address $hex" \
150 "mem1 cannot be read"
151
152gdb_test "print mem1\[1\] = 9" \
153 "$decimal = 9" \
154 "mem1 can be written"
155
156# mem2 is read only: write should fail.
157gdb_test "print mem2\[1\] = 9" \
158 "Cannot access memory at address $hex" \
159 "mem2 cannot be written"
160
161gdb_test "print mem2\[1\]" \
162 "$decimal = 0" \
163 "mem2 can be read"
164
165#
166# Test disable and enable
167#
168
169gdb_test_no_output "disable mem 1" "disable mem 1"
170gdb_test "info mem" "1 n .*" "mem 1 was disabled"
171
172gdb_test_no_output "enable mem 1" "enable mem 1"
173gdb_test "info mem" "1 y .*" "mem 1 was enabled"
174
175gdb_test_no_output "disable mem 2 4"
176
177set see1 0
178set see2 0
179set see3 0
180set see4 0
181set see5 0
182
183gdb_test_multiple "info mem" "mem 2 and 4 were disabled" {
b66e66ee 184 -re "1 y \[ \t\]+$hex $hex wo nocache \[^\r\n\]*" {
fbcb778d
MS
185 set see1 1
186 exp_continue
187 }
b66e66ee 188 -re "2 n \[ \t\]+$hex $hex ro nocache \[^\r\n\]*" {
fbcb778d
MS
189 set see2 1
190 exp_continue
191 }
b66e66ee 192 -re "3 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
193 set see3 1
194 exp_continue
195 }
b66e66ee 196 -re "4 n \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
197 set see4 1
198 exp_continue
199 }
b66e66ee 200 -re "5 y \[ \t\]+$hex $hex rw nocache .\[^\r\n\]*" {
fbcb778d
MS
201 set see5 1
202 exp_continue
203 }
204 -re "$gdb_prompt $" {
205 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
206 pass "mem 2 and 4 were disabled"
207 } else {
208 fail "mem 2 and 4 were disabled"
209 }
210 }
211}
212
213gdb_test_no_output "enable mem 2-4" "enable mem 2-4"
214
215set see1 0
216set see2 0
217set see3 0
218set see4 0
219set see5 0
220
221gdb_test_multiple "info mem" "mem 2-4 were enabled" {
b66e66ee 222 -re "1 y \[ \t\]+$hex $hex wo nocache \[^\r\n\]*" {
fbcb778d
MS
223 set see1 1
224 exp_continue
225 }
b66e66ee 226 -re "2 y \[ \t\]+$hex $hex ro nocache \[^\r\n\]*" {
fbcb778d
MS
227 set see2 1
228 exp_continue
229 }
b66e66ee 230 -re "3 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
231 set see3 1
232 exp_continue
233 }
b66e66ee 234 -re "4 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
235 set see4 1
236 exp_continue
237 }
b66e66ee 238 -re "5 y \[ \t\]+$hex $hex rw nocache .\[^\r\n\]*" {
fbcb778d
MS
239 set see5 1
240 exp_continue
241 }
242 -re "$gdb_prompt $" {
243 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
244 pass "mem 2-4 were enabled"
245 } else {
246 fail "mem 2-4 were enabled"
247 }
248 }
249}
250
251gdb_test_no_output "disable mem" "disable mem"
252
253set see1 0
254set see2 0
255set see3 0
256set see4 0
257set see5 0
258
259gdb_test_multiple "info mem" "mem 1 to 5 were disabled" {
b66e66ee 260 -re "1 n \[ \t\]+$hex $hex wo nocache \[^\r\n\]*" {
fbcb778d
MS
261 set see1 1
262 exp_continue
263 }
b66e66ee 264 -re "2 n \[ \t\]+$hex $hex ro nocache \[^\r\n\]*" {
fbcb778d
MS
265 set see2 1
266 exp_continue
267 }
b66e66ee 268 -re "3 n \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
269 set see3 1
270 exp_continue
271 }
b66e66ee 272 -re "4 n \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
273 set see4 1
274 exp_continue
275 }
b66e66ee 276 -re "5 n \[ \t\]+$hex $hex rw nocache .\[^\r\n\]*" {
fbcb778d
MS
277 set see5 1
278 exp_continue
279 }
280 -re "$gdb_prompt $" {
281 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
282 pass "mem 1 to 5 were disabled"
283 } else {
284 fail "mem 1 to 5 were disabled"
285 }
286 }
287}
288
289gdb_test_no_output "enable mem" "enable mem"
290
291set see1 0
292set see2 0
293set see3 0
294set see4 0
295set see5 0
296
297gdb_test_multiple "info mem" "mem 1 to 5 were enabled" {
b66e66ee 298 -re "1 y \[ \t\]+$hex $hex wo nocache \[^\r\n\]*" {
fbcb778d
MS
299 set see1 1
300 exp_continue
301 }
b66e66ee 302 -re "2 y \[ \t\]+$hex $hex ro nocache \[^\r\n\]*" {
fbcb778d
MS
303 set see2 1
304 exp_continue
305 }
b66e66ee 306 -re "3 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
307 set see3 1
308 exp_continue
309 }
b66e66ee 310 -re "4 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
311 set see4 1
312 exp_continue
313 }
b66e66ee 314 -re "5 y \[ \t\]+$hex $hex rw nocache .\[^\r\n\]*" {
fbcb778d
MS
315 set see5 1
316 exp_continue
317 }
318 -re "$gdb_prompt $" {
319 if { $see1 && $see2 && $see3 && $see4 && $see5 } then {
320 pass "mem 1 to 5 were enabled"
321 } else {
322 fail "mem 1 to 5 were enabled"
323 }
324 }
325}
326
327gdb_test "disable mem 7 8" \
328 "No memory region number 7.*No memory region number 8." \
329 "disable non-existant regions"
330
331#
332# Test delete
333#
334
335set see1 0
336set see2 0
337set see3 0
338set see4 0
339set see5 0
340
341gdb_test_no_output "delete mem 1" "delete mem 1"
342gdb_test_multiple "info mem" "mem 1 was deleted" {
b66e66ee 343 -re "1 y \[ \t\]+$hex $hex wo nocache \[^\r\n\]*" {
fbcb778d
MS
344 set see1 1
345 exp_continue
346 }
b66e66ee 347 -re "2 y \[ \t\]+$hex $hex ro nocache \[^\r\n\]*" {
fbcb778d
MS
348 set see2 1
349 exp_continue
350 }
b66e66ee 351 -re "3 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
352 set see3 1
353 exp_continue
354 }
b66e66ee 355 -re "4 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
356 set see4 1
357 exp_continue
358 }
b66e66ee 359 -re "5 y \[ \t\]+$hex $hex rw nocache .\[^\r\n\]*" {
fbcb778d
MS
360 set see5 1
361 exp_continue
362 }
363 -re "$gdb_prompt $" {
364 if { !$see1 && $see2 && $see3 && $see4 && $see5 } then {
365 pass "mem 1 was deleted"
366 } else {
367 fail "mem 1 was deleted"
368 }
369 }
370}
371
372set see1 0
373set see2 0
374set see3 0
375set see4 0
376set see5 0
377
378gdb_test_no_output "delete mem 2 4" "delete mem 2 4"
379gdb_test_multiple "info mem" "mem 2 and 4 were deleted" {
b66e66ee 380 -re "1 y \[ \t\]+$hex $hex wo nocache \[^\r\n\]*" {
fbcb778d
MS
381 set see1 1
382 exp_continue
383 }
b66e66ee 384 -re "2 y \[ \t\]+$hex $hex ro nocache \[^\r\n\]*" {
fbcb778d
MS
385 set see2 1
386 exp_continue
387 }
b66e66ee 388 -re "3 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
389 set see3 1
390 exp_continue
391 }
b66e66ee 392 -re "4 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
393 set see4 1
394 exp_continue
395 }
b66e66ee 396 -re "5 y \[ \t\]+$hex $hex rw nocache .\[^\r\n\]*" {
fbcb778d
MS
397 set see5 1
398 exp_continue
399 }
400 -re "$gdb_prompt $" {
401 if { !$see1 && !$see2 && $see3 && !$see4 && $see5 } then {
402 pass "mem 2 and 4 were deleted"
403 } else {
404 fail "mem 2 and 4 were deleted"
405 }
406 }
407}
408
409set see1 0
410set see2 0
411set see3 0
412set see4 0
413set see5 0
414
415gdb_test "delete mem 2-4" \
416 "No memory region number 2.*No memory region number 4." \
417 "delete mem 2-4"
418gdb_test_multiple "info mem" "mem 2-4 were deleted" {
b66e66ee 419 -re "1 y \[ \t\]+$hex $hex wo nocache \[^\r\n\]*" {
fbcb778d
MS
420 set see1 1
421 exp_continue
422 }
b66e66ee 423 -re "2 y \[ \t\]+$hex $hex ro nocache \[^\r\n\]*" {
fbcb778d
MS
424 set see2 1
425 exp_continue
426 }
b66e66ee 427 -re "3 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
428 set see3 1
429 exp_continue
430 }
b66e66ee 431 -re "4 y \[ \t\]+$hex $hex rw nocache \[^\r\n\]*" {
fbcb778d
MS
432 set see4 1
433 exp_continue
434 }
b66e66ee 435 -re "5 y \[ \t\]+$hex $hex rw nocache .\[^\r\n\]*" {
fbcb778d
MS
436 set see5 1
437 exp_continue
438 }
439 -re "$gdb_prompt $" {
440 if { !$see1 && !$see2 && !$see3 && !$see4 && $see5 } then {
441 pass "mem 2-4 were deleted"
442 } else {
443 fail "mem 2-4 were deleted"
444 }
445 }
446}
447
448gdb_test "delete mem 8" "No memory region number 8." \
449 "delete non-existant region"
1591a1e8
PA
450
451#
452# Test overlapping checking
453#
454
455proc delete_memory {} {
456 global gdb_prompt
457
458 gdb_test_multiple "delete mem" "delete mem" {
459 -re "Delete all memory regions.*y or n.*$" {
4ec70201 460 send_gdb "y\n"
1591a1e8
PA
461 exp_continue
462 }
463 -re "$gdb_prompt $" { }
464 }
465}
466
467# Create a region that doesn't overlap (a PASS in the table).
468
469proc region_pass { region } {
470 gdb_test_no_output "mem $region ro" "$region: no-overlap"
471}
472
473# Try to create a region that overlaps (a FAIL in the table).
474
475proc region_fail { region } {
476 gdb_test "mem $region ro" "overlapping memory region" "$region: overlap"
477}
478
479# Test normal case (upper != 0)
480#
481# lo' hi'
482# |--------|
483# 10 20 30 40 50 60 70 80 90
484# |-----| FAIL
485# |--| FAIL
486# |--| FAIL
487# |--| FAIL
488# |-----| FAIL
489# |--------| FAIL
490# |--------------| FAIL
491# |--------------------- FAIL
492# |------------------ FAIL
493# |--------------- FAIL
494# |--| PASS
495# |--| PASS
496# |--- PASS
497
498delete_memory
499gdb_test_no_output "mem 0x30 0x60 ro"
500with_test_prefix "0x30 0x60" {
501 region_fail "0x20 0x40"
502 region_fail "0x30 0x40"
503 region_fail "0x40 0x50"
504 region_fail "0x50 0x60"
505 region_fail "0x50 0x70"
506 region_fail "0x30 0x60"
507 region_fail "0x20 0x70"
508 region_fail "0x20 0x0"
509 region_fail "0x30 0x0"
510 region_fail "0x40 0x0"
511 region_pass "0x20 0x30"
512 region_pass "0x60 0x70"
513 region_pass "0x80 0x0"
514}
515
516# Test special case (upper == 0)
517#
518# lo' hi'
519# |---------------
520# 00 10 20 30 40 50 60 70 80
521# |--------| FAIL
522# |-----| FAIL
523# |--| FAIL
524# |------------------ FAIL
525# |--------------- FAIL
526# |------------ FAIL
527# |--| PASS
528# |--| PASS
529
530delete_memory
531gdb_test_no_output "mem 0x30 0x0 ro"
532with_test_prefix "0x30 0x0" {
533 region_fail "0x20 0x50"
534 region_fail "0x30 0x50"
535 region_fail "0x40 0x50"
536 region_fail "0x20 0x0"
537 region_fail "0x30 0x0"
538 region_fail "0x40 0x0"
539 region_pass "0x20 0x30"
540 region_pass "0x00 0x10"
541}
This page took 0.367248 seconds and 4 git commands to generate.