gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 16 Aug 2010 19:53:05 +0000 (19:53 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 16 Aug 2010 19:53:05 +0000 (19:53 +0000)
* 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
gdb/breakpoint.c
gdb/breakpoint.h

index 78296e8b4a25c65d57b74e0f7a12be4e996f2a80..a800d84a390667bd1cb4051aaf3417dd80a01108 100644 (file)
@@ -1,3 +1,12 @@
+2010-08-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * 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  <tromey@redhat.com>
 
        * value.c (release_value): Clear 'next' pointer.
index 212c2033bb04d01dd1a9b0fab4a408470900dac5..4ed3c31f12c7f53ad1b0db404cecb167b564ed74 100644 (file)
@@ -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);
index 18dfe223ae25c2682f2362e0f61fbc87cb812e66..155a6d48051a04062e6561da834e48e184d5ac81 100644 (file)
@@ -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;