aboutsummaryrefslogtreecommitdiff
path: root/gdb/symfile.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2011-12-21 14:25:53 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2011-12-21 14:25:53 +0000
commit4ac39b9724731b84d25b5ae8b30506679e9adea1 (patch)
tree542f1b3e065fc37a639c8f0e2e9460a37746da17 /gdb/symfile.c
parentbb2f58dc41241652af78a29619c0a7986669bcd3 (diff)
downloadgdb-4ac39b9724731b84d25b5ae8b30506679e9adea1.zip
gdb-4ac39b9724731b84d25b5ae8b30506679e9adea1.tar.gz
gdb-4ac39b9724731b84d25b5ae8b30506679e9adea1.tar.bz2
gdb/
* symfile.c (objfilep): New typedef and new DEF_VEC_P. (reread_symbols): Remove variable reread_one, new variables new_objfiles, all_cleanups and ix. Use new_objfiles instead of reread_one. Push changed objfiles to new_objfiles, call observer_notify_new_objfile for them later.
Diffstat (limited to 'gdb/symfile.c')
-rw-r--r--gdb/symfile.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/gdb/symfile.c b/gdb/symfile.c
index e9c290c..3dbc756 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -2371,15 +2371,22 @@ add_symbol_file_command (char *args, int from_tty)
}
+typedef struct objfile *objfilep;
+
+DEF_VEC_P (objfilep);
+
/* Re-read symbols if a symbol-file has changed. */
void
reread_symbols (void)
{
struct objfile *objfile;
long new_modtime;
- int reread_one = 0;
struct stat new_statbuf;
int res;
+ VEC (objfilep) *new_objfiles = NULL;
+ struct cleanup *all_cleanups;
+
+ all_cleanups = make_cleanup (VEC_cleanup (objfilep), &new_objfiles);
/* With the addition of shared libraries, this should be modified,
the load time should be saved in the partial symbol tables, since
@@ -2594,21 +2601,33 @@ reread_symbols (void)
and now, we *want* this to be out of date, so don't call stat
again now. */
objfile->mtime = new_modtime;
- reread_one = 1;
init_entry_point_info (objfile);
+
+ VEC_safe_push (objfilep, new_objfiles, objfile);
}
}
- if (reread_one)
+ if (new_objfiles)
{
+ int ix;
+
/* Notify objfiles that we've modified objfile sections. */
objfiles_changed ();
clear_symtab_users (0);
+
+ /* clear_objfile_data for each objfile was called before freeing it and
+ observer_notify_new_objfile (NULL) has been called by
+ clear_symtab_users above. Notify the new files now. */
+ for (ix = 0; VEC_iterate (objfilep, new_objfiles, ix, objfile); ix++)
+ observer_notify_new_objfile (objfile);
+
/* At least one objfile has changed, so we can consider that
the executable we're debugging has changed too. */
observer_notify_executable_changed ();
}
+
+ do_cleanups (all_cleanups);
}