aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2012-08-27 08:58:01 +0000
committerPedro Alves <palves@redhat.com>2012-08-27 08:58:01 +0000
commit1591a1e8523aff54250fd7376b0ceeb83e5f2b15 (patch)
treef13bdd89527a676bbd1afe716bf354a71cabab3e /gdb
parentf4b8daea2addae0f9bc702040c2381d69fb35fb8 (diff)
downloadgdb-1591a1e8523aff54250fd7376b0ceeb83e5f2b15.zip
gdb-1591a1e8523aff54250fd7376b0ceeb83e5f2b15.tar.gz
gdb-1591a1e8523aff54250fd7376b0ceeb83e5f2b15.tar.bz2
2012-08-27 Wei-cheng Wang <cole945@gmail.com>
* memattr.c (create_mem_region): Fix memory region overlapping checking. 2012-08-27 Wei-cheng Wang <cole945@gmail.com> Yao Qi <yao@codesourcery.com> Pedro Alves <palves@redhat.com> * gdb.base/memattr.exp (delete_memory, region_pass, region_fail): New procedures. (top level): Add overlap checking tests.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/memattr.c2
-rw-r--r--gdb/testsuite/ChangeLog8
-rw-r--r--gdb/testsuite/gdb.base/memattr.exp92
4 files changed, 106 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 666a35f..d17f533 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2012-08-27 Wei-cheng Wang <cole945@gmail.com>
+
+ * memattr.c (create_mem_region): Fix memory region overlapping
+ checking.
+
2012-08-24 Siddhesh Poyarekar <siddhesh@redhat.com>
* h8300-tdep.c (h8300_push_dummy_call): Replace unsafe alloca
diff --git a/gdb/memattr.c b/gdb/memattr.c
index ec7deb5..bd92f1d 100644
--- a/gdb/memattr.c
+++ b/gdb/memattr.c
@@ -207,7 +207,7 @@ create_mem_region (CORE_ADDR lo, CORE_ADDR hi,
if ((lo >= n->lo && (lo < n->hi || n->hi == 0))
|| (hi > n->lo && (hi <= n->hi || n->hi == 0))
- || (lo <= n->lo && (hi >= n->hi || hi == 0)))
+ || (lo <= n->lo && ((hi >= n->hi && n->hi != 0) || hi == 0)))
{
printf_unfiltered (_("overlapping memory region\n"));
return;
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index c78f4fb..153339b 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2012-08-27 Wei-cheng Wang <cole945@gmail.com>
+ Yao Qi <yao@codesourcery.com>
+ Pedro Alves <palves@redhat.com>
+
+ * gdb.base/memattr.exp (delete_memory, region_pass, region_fail):
+ New procedures.
+ (top level): Add overlap checking tests.
+
2012-08-24 Tom Tromey <tromey@redhat.com>
* lib/gdb.exp (skip_unwinder_tests): Don't leave 'ok' set if
diff --git a/gdb/testsuite/gdb.base/memattr.exp b/gdb/testsuite/gdb.base/memattr.exp
index 4065808..0528dce 100644
--- a/gdb/testsuite/gdb.base/memattr.exp
+++ b/gdb/testsuite/gdb.base/memattr.exp
@@ -448,3 +448,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"
+}