From 1591a1e8523aff54250fd7376b0ceeb83e5f2b15 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 27 Aug 2012 08:58:01 +0000 Subject: [PATCH] 2012-08-27 Wei-cheng Wang * memattr.c (create_mem_region): Fix memory region overlapping checking. 2012-08-27 Wei-cheng Wang Yao Qi Pedro Alves * gdb.base/memattr.exp (delete_memory, region_pass, region_fail): New procedures. (top level): Add overlap checking tests. --- gdb/ChangeLog | 5 +++ gdb/memattr.c | 2 +- gdb/testsuite/ChangeLog | 8 ++++ gdb/testsuite/gdb.base/memattr.exp | 92 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) 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 + + * memattr.c (create_mem_region): Fix memory region overlapping + checking. + 2012-08-24 Siddhesh Poyarekar * 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 + Yao Qi + Pedro Alves + + * gdb.base/memattr.exp (delete_memory, region_pass, region_fail): + New procedures. + (top level): Add overlap checking tests. + 2012-08-24 Tom Tromey * 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" +} -- 2.7.4