[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.
This commit is contained in:
parent
cb71640d03
commit
de3db44c87
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue