This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] [arm] watchpoint-reuse-slot.exp: skip setting HW points on some address


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=de3db44c87a30c67deb38fa9d43d2db3bc98c161

commit de3db44c87a30c67deb38fa9d43d2db3bc98c161
Author: Yao Qi <yao.qi@linaro.org>
Date:   Fri Apr 10 16:23:13 2015 +0100

    [arm] watchpoint-reuse-slot.exp: skip setting HW points on some address
    
    Hi,
    ARM linux kernel has some requirements on the address/length setting
    for HW breakpoints/watchpoints, but watchpoint-reuse-slot.exp doesn't
    consider them and sets HW points on various addresses.  Many fails
    are causes as a result:
    
    stepi^M
    Warning:^M
    Could not insert hardware watchpoint 20.^M
    Could not insert hardware breakpoints:^M
    You may have requested too many hardware breakpoints/watchpoints.^M
    ^M
    (gdb) FAIL: gdb.base/watchpoint-reuse-slot.exp: always-inserted off: watch x watch: : width 2, iter 2: base + 1: stepi advanced
    
    watch *(buf.byte + 2 + 1)@2^M
    Hardware watchpoint 388: *(buf.byte + 2 + 1)@2^M
    Warning:^M
    Could not insert hardware watchpoint 388.^M
    Could not insert hardware breakpoints:^M
    You may have requested too many hardware breakpoints/watchpoints.^M
    ^M
    (gdb) FAIL: gdb.base/watchpoint-reuse-slot.exp: always-inserted on: watch x watch: : width 2, iter 2: base + 1: watch *(buf.byte + 2 + 1)@2
    
    This patch is to reflect kernel requirements in watchpoint-reuse-slot.exp
    in order to skip some tests.
    
    gdb/testsuite:
    
    2015-04-10  Yao Qi  <yao.qi@linaro.org>
    
    	* gdb.base/watchpoint-reuse-slot.exp (valid_addr_p): Return
    	false for some offset and width combinations which aren't
    	supported by linux kernel.

Diff:
---
 gdb/testsuite/ChangeLog                          |  6 ++++++
 gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp | 27 ++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 0d5d07f..f28a08f 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-04-10  Yao Qi  <yao.qi@linaro.org>
+
+	* gdb.base/watchpoint-reuse-slot.exp (valid_addr_p): Return
+	false for some offset and width combinations which aren't
+	supported by linux kernel.
+
 2015-04-10  Pedro Alves  <palves@redhat.com>
 
 	* gdb.threads/step-over-lands-on-breakpoint.exp (do_test): New
diff --git a/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp b/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp
index 6d2c867..abe81d6 100644
--- a/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp
+++ b/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp
@@ -150,6 +150,33 @@ proc valid_addr_p {cmd offset width} {
 		return 0
 	    }
 	}
+    } elseif { [istarget "arm*-*-linux*"] } {
+	if { $cmd == "hbreak" } {
+	    # Breakpoints must be of length 2 (thumb) or 4 (ARM) bytes.
+	    if { $width != 2 && $width != 4 } {
+		return 0
+	    }
+	} else {
+	    # Watchpoints can be of length 1, 2, 4 or 8 bytes.
+	    if { [expr $width % 2] != 0 } {
+		return 0
+	    }
+	}
+
+	if { [expr ($offset) % 8] == 0 && $width == 8 } {
+	    # If WIDTH is 8 byte, the address should be 8-byte aligned.
+	    return 1
+	} elseif { [expr ($offset) % 4] == 0 } {
+	    return 1
+	} elseif { [expr ($offset) % 4] == 2 && $width == 2 } {
+	    # Halfword watchpoints and breakpoints.
+	    return 1
+	} elseif { [expr ($offset) % 4] == 1 && $width == 1 && $cmd != "hbreak" } {
+	    # Single byte watchpoints.
+	    return 1
+	} else {
+	    return 0
+	}
     }
 
     return 1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]