This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug symtab/17799] tracking bug for symbol lookup cache patch


https://sourceware.org/bugzilla/show_bug.cgi?id=17799

--- Comment #3 from Doug Evans <xdje42 at gmail dot com> ---
Bleah.
breakpoint_re_set is called before observer_notify_new_objfile(NULL)
in clear_symtab_users.

This means that the symbol lookup that breakpoint_re_set does
will get stale data and can cause a gdb crash.

Filing for reference sake.

2015-01-11  Doug Evans  <xdje42@gmail.com>

        * symfile.c (clear_symtab_users): Call observer_notify_new_objfile
        before calling breakpoint_re_set.

diff --git a/gdb/symfile.c b/gdb/symfile.c
index d55e361..3242ba1 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -3027,12 +3027,17 @@ clear_symtab_users (int add_flags)
      breakpoint_re_set may try to access the current symtab.  */
   clear_current_source_symtab_and_line ();

+  /* Notify anyone listening that the previous loaded symtab(s) are invalid.
+     It is important to do this before calling breakpoint_re_set as the latter
+     will try to look up symbols, and for example the symbol cache needs to
+     be flushed first.  */
+  observer_notify_new_objfile (NULL);
+
   clear_displays ();
   if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
     breakpoint_re_set ();
   clear_last_displayed_sal ();
   clear_pc_function_cache ();
-  observer_notify_new_objfile (NULL);

   /* Clear globals which might have pointed into a removed objfile.
      FIXME: It's not clear which of these are supposed to persist

-- 
You are receiving this mail because:
You are on the CC list for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]