OSDN Git Service

* breakpoint.c (bpstat_check_breakpoint_conditions): Use
authorDaniel Jacobowitz <dan@debian.org>
Wed, 11 Mar 2009 20:26:01 +0000 (20:26 +0000)
committerDaniel Jacobowitz <dan@debian.org>
Wed, 11 Mar 2009 20:26:01 +0000 (20:26 +0000)
value_mark and value_free_to_mark.
* objfiles.c (free_objfile): Call objfile_free_data before
freeing the BFD.

gdb/ChangeLog
gdb/breakpoint.c
gdb/objfiles.c

index ea4697a..400bb73 100644 (file)
@@ -1,3 +1,10 @@
+2009-03-11  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * breakpoint.c (bpstat_check_breakpoint_conditions): Use
+       value_mark and value_free_to_mark.
+       * objfiles.c (free_objfile): Call objfile_free_data before
+       freeing the BFD.
+
 2009-03-10  Hui Zhu  <teawater@gmail.com>
 
        * disasm.c (gdb_disassembly): Remove unused argument
index 893e1c2..472eda4 100644 (file)
@@ -2882,6 +2882,13 @@ bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
       
       if (bl->cond && bl->owner->disposition != disp_del_at_next_stop)
        {
+         /* We use value_mark and value_free_to_mark because it could
+            be a long time before we return to the command level and
+            call free_all_values.  We can't call free_all_values
+            because we might be in the middle of evaluating a
+            function call.  */
+         struct value *mark = value_mark ();
+
          /* Need to select the frame, with all that implies
             so that the conditions will have the right context.  */
          select_frame (get_current_frame ());
@@ -2890,7 +2897,7 @@ bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
                            "Error in testing breakpoint condition:\n",
                            RETURN_MASK_ALL);
          /* FIXME-someday, should give breakpoint # */
-         free_all_values ();
+         value_free_to_mark (mark);
        }
       if (bl->cond && value_is_zero)
        {
index bc77de8..795d53b 100644 (file)
@@ -422,6 +422,9 @@ free_objfile (struct objfile *objfile)
       (*objfile->sf->sym_finish) (objfile);
     }
 
+  /* Discard any data modules have associated with the objfile.  */
+  objfile_free_data (objfile);
+
   /* We always close the bfd, unless the OBJF_KEEPBFD flag is set.  */
 
   if (objfile->obfd != NULL && !(objfile->flags & OBJF_KEEPBFD))
@@ -476,7 +479,6 @@ free_objfile (struct objfile *objfile)
 
   /* The last thing we do is free the objfile struct itself. */
 
-  objfile_free_data (objfile);
   if (objfile->name != NULL)
     {
       xfree (objfile->name);