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