Index: gdb/testsuite/gdb.base/memattr.exp |
diff --git a/gdb/testsuite/gdb.base/memattr.exp b/gdb/testsuite/gdb.base/memattr.exp |
index 4065808997748868ba90e9e2d323569ea9033d29..455bea55ff5742d9d9e766335e11598b1b2593e3 100644 |
--- a/gdb/testsuite/gdb.base/memattr.exp |
+++ b/gdb/testsuite/gdb.base/memattr.exp |
@@ -1,4 +1,4 @@ |
-# Copyright 2011-2012 Free Software Foundation, Inc. |
+# Copyright 2011-2013 Free Software Foundation, Inc. |
# This program is free software; you can redistribute it and/or modify |
# it under the terms of the GNU General Public License as published by |
@@ -17,8 +17,7 @@ |
# Test the memory attribute commands. |
-set testfile "memattr" |
-set srcfile ${testfile}.c |
+standard_testfile .c |
if { [prepare_for_testing $testfile.exp $testfile $srcfile] } { |
return -1 |
@@ -448,3 +447,95 @@ gdb_test_multiple "info mem" "mem 2-4 were deleted" { |
gdb_test "delete mem 8" "No memory region number 8." \ |
"delete non-existant region" |
+ |
+# |
+# Test overlapping checking |
+# |
+ |
+proc delete_memory {} { |
+ global gdb_prompt |
+ |
+ gdb_test_multiple "delete mem" "delete mem" { |
+ -re "Delete all memory regions.*y or n.*$" { |
+ send_gdb "y\n" |
+ exp_continue |
+ } |
+ -re "$gdb_prompt $" { } |
+ } |
+} |
+ |
+# Create a region that doesn't overlap (a PASS in the table). |
+ |
+proc region_pass { region } { |
+ gdb_test_no_output "mem $region ro" "$region: no-overlap" |
+} |
+ |
+# Try to create a region that overlaps (a FAIL in the table). |
+ |
+proc region_fail { region } { |
+ gdb_test "mem $region ro" "overlapping memory region" "$region: overlap" |
+} |
+ |
+# Test normal case (upper != 0) |
+# |
+# lo' hi' |
+# |--------| |
+# 10 20 30 40 50 60 70 80 90 |
+# |-----| FAIL |
+# |--| FAIL |
+# |--| FAIL |
+# |--| FAIL |
+# |-----| FAIL |
+# |--------| FAIL |
+# |--------------| FAIL |
+# |--------------------- FAIL |
+# |------------------ FAIL |
+# |--------------- FAIL |
+# |--| PASS |
+# |--| PASS |
+# |--- PASS |
+ |
+delete_memory |
+gdb_test_no_output "mem 0x30 0x60 ro" |
+with_test_prefix "0x30 0x60" { |
+ region_fail "0x20 0x40" |
+ region_fail "0x30 0x40" |
+ region_fail "0x40 0x50" |
+ region_fail "0x50 0x60" |
+ region_fail "0x50 0x70" |
+ region_fail "0x30 0x60" |
+ region_fail "0x20 0x70" |
+ region_fail "0x20 0x0" |
+ region_fail "0x30 0x0" |
+ region_fail "0x40 0x0" |
+ region_pass "0x20 0x30" |
+ region_pass "0x60 0x70" |
+ region_pass "0x80 0x0" |
+} |
+ |
+# Test special case (upper == 0) |
+# |
+# lo' hi' |
+# |--------------- |
+# 00 10 20 30 40 50 60 70 80 |
+# |--------| FAIL |
+# |-----| FAIL |
+# |--| FAIL |
+# |------------------ FAIL |
+# |--------------- FAIL |
+# |------------ FAIL |
+# |--| PASS |
+# |--| PASS |
+ |
+delete_memory |
+gdb_test_no_output "mem 0x30 0x0 ro" |
+with_test_prefix "0x30 0x0" { |
+ region_fail "0x20 0x50" |
+ region_fail "0x30 0x50" |
+ region_fail "0x40 0x50" |
+ region_fail "0x20 0x0" |
+ region_fail "0x30 0x0" |
+ region_fail "0x40 0x0" |
+ region_pass "0x20 0x30" |
+ region_pass "0x00 0x10" |
+} |