From: Pedro Alves Date: Tue, 9 Nov 2010 18:23:52 +0000 (+0000) Subject: gdb/ X-Git-Tag: cgen-snapshot-20101201~176 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a1442452ec3d5cf08e0baefb7aa8691b28ea9682;p=thirdparty%2Fbinutils-gdb.git gdb/ * breakpoint.c (watch_command_1): Get a pointer of the lazy version of the expression's value, even if reading the value from memory fails. When creating a -location watchpoint, get the value's address from the lazy value pointer. gdb/testsuite/ * gdb.base/watchpoint.exp: Test "watch -location" with an innacessible location. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index affffde8fea..10c635f534c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2010-11-09 Pedro Alves + + * breakpoint.c (watch_command_1): Get a pointer of the lazy + version of the expression's value, even if reading the value from + memory fails. When creating a -location watchpoint, get the + value's address from the lazy value pointer. + 2010-11-07 Jan Kratochvil * infrun.c (restore_inferior_thread_state): Use diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index b4502e7057d..ffa8c52026d 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -8022,7 +8022,7 @@ watch_command_1 (char *arg, int accessflag, int from_tty, int just_location) struct breakpoint *b, *scope_breakpoint = NULL; struct expression *exp; struct block *exp_valid_block = NULL, *cond_exp_valid_block = NULL; - struct value *val, *mark; + struct value *val, *mark, *result; struct frame_info *frame; char *exp_start = NULL; char *exp_end = NULL; @@ -8121,12 +8121,12 @@ watch_command_1 (char *arg, int accessflag, int from_tty, int just_location) exp_valid_block = innermost_block; mark = value_mark (); - fetch_subexp_value (exp, &pc, &val, NULL, NULL); + fetch_subexp_value (exp, &pc, &val, &result, NULL); if (just_location) { exp_valid_block = NULL; - val = value_addr (val); + val = value_addr (result); release_value (val); value_free_to_mark (mark); } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 1eacf9db50c..dae986b6285 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-09 Pedro Alves + + * gdb.base/watchpoint.exp: Test "watch -location" with an + innacessible location. + 2010-11-09 Edjunior Machado Luis Machado diff --git a/gdb/testsuite/gdb.base/watchpoint.exp b/gdb/testsuite/gdb.base/watchpoint.exp index 6721bdac534..0a829691e66 100644 --- a/gdb/testsuite/gdb.base/watchpoint.exp +++ b/gdb/testsuite/gdb.base/watchpoint.exp @@ -683,6 +683,11 @@ proc test_inaccessible_watchpoint {} { "$watchpoint_msg \[0-9\]+: \\*\\(int \\*\\) 0" delete_breakpoints + # The same, but using -location through an indirection. + gdb_test "watch -location *global_ptr" \ + "$watchpoint_msg \[0-9\]+: \-location: \\*global_ptr" + delete_breakpoints + # This step requires two HW watchpoints. Since PPC Server only has # a single one, it will use a SW watchpoint in this case. if [istarget powerpc64-*] {