diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-12-21 14:25:53 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-12-21 14:25:53 +0000 |
commit | 4ac39b9724731b84d25b5ae8b30506679e9adea1 (patch) | |
tree | 542f1b3e065fc37a639c8f0e2e9460a37746da17 /gdb/symfile.c | |
parent | bb2f58dc41241652af78a29619c0a7986669bcd3 (diff) | |
download | gdb-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.c | 25 |
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); } |