]> Git Repo - binutils.git/commitdiff
[arm] watchpoint-reuse-slot.exp: skip setting HW points on some address
authorYao Qi <[email protected]>
Fri, 10 Apr 2015 15:23:13 +0000 (16:23 +0100)
committerYao Qi <[email protected]>
Fri, 10 Apr 2015 15:23:13 +0000 (16:23 +0100)
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  <[email protected]>

* gdb.base/watchpoint-reuse-slot.exp (valid_addr_p): Return
false for some offset and width combinations which aren't
supported by linux kernel.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp

index 0d5d07fd5c90273cb0d8fd31fa44842387687dca..f28a08f7f226032161689a9d11b315c9535a1064 100644 (file)
@@ -1,3 +1,9 @@
+2015-04-10  Yao Qi  <[email protected]>
+
+       * 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  <[email protected]>
 
        * gdb.threads/step-over-lands-on-breakpoint.exp (do_test): New
index 6d2c867506f4d176619a23c50c0f8bc6eee5e13c..abe81d60f25c431de24f6d474156d8197d6b2881 100644 (file)
@@ -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
This page took 0.037689 seconds and 4 git commands to generate.