mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
2011-12-13 Pedro Alves <pedro@codesourcery.com>
* gdb.base/watchpoint.c (struct foo2, foo2, struct foo4, foo4) (func6, func7): New. (main): Call func6 and func7. * gdb.base/watchpoint.exp (test_wide_location_1) (test_wide_location_2): New. (top level): Re-enable hardware watchpoints if necessary. Call test_wide_location_1 and test_wide_location_2.
This commit is contained in:
@ -1,3 +1,13 @@
|
|||||||
|
2011-12-13 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* gdb.base/watchpoint.c (struct foo2, foo2, struct foo4, foo4)
|
||||||
|
(func6, func7): New.
|
||||||
|
(main): Call func6 and func7.
|
||||||
|
* gdb.base/watchpoint.exp (test_wide_location_1)
|
||||||
|
(test_wide_location_2): New.
|
||||||
|
(top level): Re-enable hardware watchpoints if necessary. Call
|
||||||
|
test_wide_location_1 and test_wide_location_2.
|
||||||
|
|
||||||
2011-12-11 Yao Qi <yao@codesourcery.com>
|
2011-12-11 Yao Qi <yao@codesourcery.com>
|
||||||
|
|
||||||
* gdb.trace/status-stop.exp: Skip it if target doesn't support trace.
|
* gdb.trace/status-stop.exp: Skip it if target doesn't support trace.
|
||||||
|
@ -42,6 +42,18 @@ int doread = 0;
|
|||||||
char *global_ptr;
|
char *global_ptr;
|
||||||
char **global_ptr_ptr;
|
char **global_ptr_ptr;
|
||||||
|
|
||||||
|
struct foo2
|
||||||
|
{
|
||||||
|
int val[2];
|
||||||
|
};
|
||||||
|
struct foo2 foo2;
|
||||||
|
|
||||||
|
struct foo4
|
||||||
|
{
|
||||||
|
int val[4];
|
||||||
|
};
|
||||||
|
struct foo4 foo4;
|
||||||
|
|
||||||
void marker1 ()
|
void marker1 ()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -137,6 +149,22 @@ func5 ()
|
|||||||
val = 27;
|
val = 27;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
func6 (void)
|
||||||
|
{
|
||||||
|
/* func6 breakpoint here */
|
||||||
|
foo2.val[1] = 0;
|
||||||
|
foo2.val[1] = 11;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
func7 (void)
|
||||||
|
{
|
||||||
|
/* func7 breakpoint here */
|
||||||
|
foo4.val[3] = 0;
|
||||||
|
foo4.val[3] = 33;
|
||||||
|
}
|
||||||
|
|
||||||
int main ()
|
int main ()
|
||||||
{
|
{
|
||||||
#ifdef usestubs
|
#ifdef usestubs
|
||||||
@ -216,5 +244,9 @@ int main ()
|
|||||||
|
|
||||||
func5 ();
|
func5 ();
|
||||||
|
|
||||||
|
func6 ();
|
||||||
|
|
||||||
|
func7 ();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -660,6 +660,68 @@ proc test_watch_location {} {
|
|||||||
gdb_test_no_output "delete \$bpnum" "delete watch -location"
|
gdb_test_no_output "delete \$bpnum" "delete watch -location"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Tests watching areas larger than a word.
|
||||||
|
|
||||||
|
proc test_wide_location_1 {} {
|
||||||
|
# This test watches two words on most 32-bit ABIs, and one word on
|
||||||
|
# most 64-bit ABIs.
|
||||||
|
|
||||||
|
# Platforms where the target can't watch such a large region
|
||||||
|
# should clear hw_expected below.
|
||||||
|
if [target_info exists gdb,no_hardware_watchpoints] {
|
||||||
|
set hw_expected 0
|
||||||
|
} else {
|
||||||
|
set hw_expected 1
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_breakpoint [gdb_get_line_number "func6 breakpoint here"]
|
||||||
|
gdb_continue_to_breakpoint "func6 breakpoint here"
|
||||||
|
|
||||||
|
if { $hw_expected } {
|
||||||
|
gdb_test "watch foo2" "Hardware watchpoint .*: .*" "watch foo2"
|
||||||
|
gdb_test "continue" \
|
||||||
|
"Continuing.*Hardware watchpoint .*: .*New value = \\\{val = \\\{0, 11\\\}\\\}.*" \
|
||||||
|
"continue with watch foo2"
|
||||||
|
} else {
|
||||||
|
gdb_test "watch foo2" "atchpoint .*: .*" "watch foo2"
|
||||||
|
gdb_test "continue" \
|
||||||
|
"Continuing.*\[Ww\]atchpoint .*: .*New value = \\\{val = \\\{0, 11\\\}\\\}.*" \
|
||||||
|
"continue with watch foo2"
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_test_no_output "delete \$bpnum" "delete watch foo2"
|
||||||
|
}
|
||||||
|
|
||||||
|
proc test_wide_location_2 {} {
|
||||||
|
# This test watches four words on most 32-bit ABIs, and two words
|
||||||
|
# on 64-bit ABIs.
|
||||||
|
|
||||||
|
# Platforms where the target can't watch such a large region
|
||||||
|
# should clear hw_expected below.
|
||||||
|
if [target_info exists gdb,no_hardware_watchpoints] {
|
||||||
|
set hw_expected 0
|
||||||
|
} else {
|
||||||
|
set hw_expected 1
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_breakpoint [gdb_get_line_number "func7 breakpoint here"]
|
||||||
|
gdb_continue_to_breakpoint "func7 breakpoint here"
|
||||||
|
|
||||||
|
if { $hw_expected } {
|
||||||
|
gdb_test "watch foo4" "Hardware watchpoint .*: .*" "watch foo4"
|
||||||
|
gdb_test "continue" \
|
||||||
|
"Continuing.*Hardware watchpoint .*: .*New value = \\\{val = \\\{0, 0, 0, 33\\\}\\\}.*" \
|
||||||
|
"continue with watch foo4"
|
||||||
|
} else {
|
||||||
|
gdb_test "watch foo4" "atchpoint .*: .*" "watch foo4"
|
||||||
|
gdb_test "continue" \
|
||||||
|
"Continuing.*\[Ww\]atchpoint .*: .*New value = \\\{val = \\\{0, 0, 0, 33\\\}\\\}.*" \
|
||||||
|
"continue with watch foo4"
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_test_no_output "delete \$bpnum" "delete watch foo4"
|
||||||
|
}
|
||||||
|
|
||||||
proc test_inaccessible_watchpoint {} {
|
proc test_inaccessible_watchpoint {} {
|
||||||
global gdb_prompt
|
global gdb_prompt
|
||||||
|
|
||||||
@ -923,6 +985,14 @@ if [initialize] then {
|
|||||||
test_disable_enable_software_watchpoint
|
test_disable_enable_software_watchpoint
|
||||||
|
|
||||||
test_watch_location
|
test_watch_location
|
||||||
|
|
||||||
|
# Re-enable hardware watchpoints if necessary.
|
||||||
|
if ![target_info exists gdb,no_hardware_watchpoints] {
|
||||||
|
gdb_test_no_output "set can-use-hw-watchpoints 1" ""
|
||||||
|
}
|
||||||
|
|
||||||
|
test_wide_location_1
|
||||||
|
test_wide_location_2
|
||||||
}
|
}
|
||||||
|
|
||||||
# Restore old timeout
|
# Restore old timeout
|
||||||
|
Reference in New Issue
Block a user