From: Yao Qi Date: Fri, 10 Apr 2015 15:23:13 +0000 (+0100) Subject: [arm] watchpoint-reuse-slot.exp: skip setting HW points on some address X-Git-Tag: users/hjl/linux/release/2.25.51.0.2~2^2~16^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=de3db44c87a30c67deb38fa9d43d2db3bc98c161;p=thirdparty%2Fbinutils-gdb.git [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 * 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 --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0d5d07fd5c9..f28a08f7f22 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-04-10 Yao Qi + + * 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 * 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 6d2c867506f..abe81d60f25 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