From d63d0675b66c96510a519c93795e3ba3b074e979 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Mon, 16 Aug 2010 19:53:05 +0000 Subject: [PATCH] gdb/ * breakpoint.c (update_watchpoint): Add source empty line. Prefer EXP_STRING_REPARSE to EXP_STRING. (watch_command_1): Set also EXP_STRING_REPARSE. (delete_breakpoint): Free also EXP_STRING_REPARSE. * breakpoint.h (struct breakpoint): New field exp_string_reparse. Update comment for exp_string. --- gdb/ChangeLog | 9 +++++++++ gdb/breakpoint.c | 11 ++++++++--- gdb/breakpoint.h | 5 ++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 78296e8b4a2..a800d84a390 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2010-08-16 Jan Kratochvil + + * breakpoint.c (update_watchpoint): Add source empty line. Prefer + EXP_STRING_REPARSE to EXP_STRING. + (watch_command_1): Set also EXP_STRING_REPARSE. + (delete_breakpoint): Free also EXP_STRING_REPARSE. + * breakpoint.h (struct breakpoint): New field exp_string_reparse. + Update comment for exp_string. + 2010-08-16 Tom Tromey * value.c (release_value): Clear 'next' pointer. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 212c2033bb0..4ed3c31f12c 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -1339,12 +1339,13 @@ update_watchpoint (struct breakpoint *b, int reparse) if (within_current_scope && reparse) { char *s; + if (b->exp) { xfree (b->exp); b->exp = NULL; } - s = b->exp_string; + s = b->exp_string_reparse ? b->exp_string_reparse : b->exp_string; b->exp = parse_exp_1 (&s, b->exp_valid_block, 0); /* If the meaning of expression itself changed, the old value is no longer relevant. We don't want to report a watchpoint hit @@ -8211,10 +8212,13 @@ watch_command_1 (char *arg, int accessflag, int from_tty, int just_location) t = check_typedef (TYPE_TARGET_TYPE (check_typedef (t))); name = type_to_string (t); - b->exp_string = xstrprintf ("* (%s *) %s", name, - core_addr_to_string (addr)); + b->exp_string_reparse = xstrprintf ("* (%s *) %s", name, + core_addr_to_string (addr)); xfree (name); + b->exp_string = xstrprintf ("-location: %.*s", + (int) (exp_end - exp_start), exp_start); + /* The above expression is in C. */ b->language = language_c; } @@ -9658,6 +9662,7 @@ delete_breakpoint (struct breakpoint *bpt) xfree (bpt->addr_string); xfree (bpt->exp); xfree (bpt->exp_string); + xfree (bpt->exp_string_reparse); value_free (bpt->val); xfree (bpt->source_file); xfree (bpt->exec_pathname); diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 18dfe223ae2..155a6d48051 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -450,8 +450,11 @@ struct breakpoint /* String form of the breakpoint condition (malloc'd), or NULL if there is no condition. */ char *cond_string; - /* String form of exp (malloc'd), or NULL if none. */ + /* String form of exp to use for displaying to the user (malloc'd), or + NULL if none. */ char *exp_string; + /* String form to use for reparsing of EXP (malloc'd) or NULL. */ + char *exp_string_reparse; /* The expression we are watching, or NULL if not a watchpoint. */ struct expression *exp; -- 2.30.2