This is the mail archive of the
gdb-prs@sourceware.org
mailing list for the GDB project.
[Bug symtab/17799] tracking bug for symbol lookup cache patch
- From: "xdje42 at gmail dot com" <sourceware-bugzilla at sourceware dot org>
- To: gdb-prs at sourceware dot org
- Date: Sun, 11 Jan 2015 23:02:49 +0000
- Subject: [Bug symtab/17799] tracking bug for symbol lookup cache patch
- Auto-submitted: auto-generated
- References: <bug-17799-4717 at http dot sourceware dot org/bugzilla/>
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.