diff options
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/mi/mi-cmd-file.c | 25 | ||||
-rw-r--r-- | gdb/objfiles.h | 18 | ||||
-rw-r--r-- | gdb/source.c | 24 | ||||
-rw-r--r-- | gdb/symtab.c | 131 |
5 files changed, 114 insertions, 95 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d07f2c1..8452837 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2019-01-09 Tom Tromey <tom@tromey.com> + * symtab.c (find_line_symtab, info_sources_command) + (make_source_files_completion_list): Use objfile_compunits. + * source.c (select_source_symtab): Use objfile_compunits. + * objfiles.h (struct objfile): Update comment. + (ALL_OBJFILES): Remove. + (ALL_FILETABS): Remove. + * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Use + objfile_compunits. + +2019-01-09 Tom Tromey <tom@tromey.com> + * symmisc.c (print_objfile_statistics, dump_objfile) (maintenance_print_symbols): Use compunit_filetabs. * source.c (forget_cached_source_info_for_objfile): Use diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c index d645e5a..2071b9f 100644 --- a/gdb/mi/mi-cmd-file.c +++ b/gdb/mi/mi-cmd-file.c @@ -84,7 +84,6 @@ void mi_cmd_file_list_exec_source_files (const char *command, char **argv, int argc) { struct ui_out *uiout = current_uiout; - struct objfile *objfile; if (!mi_valid_noargs ("-file-list-exec-source-files", argc, argv)) error (_("-file-list-exec-source-files: Usage: No args")); @@ -93,15 +92,21 @@ mi_cmd_file_list_exec_source_files (const char *command, char **argv, int argc) uiout->begin (ui_out_type_list, "files"); /* Look at all of the file symtabs. */ - ALL_FILETABS (objfile, cu, s) - { - uiout->begin (ui_out_type_tuple, NULL); - - uiout->field_string ("file", symtab_to_filename_for_display (s)); - uiout->field_string ("fullname", symtab_to_fullname (s)); - - uiout->end (ui_out_type_tuple); - } + for (objfile *objfile : all_objfiles (current_program_space)) + { + for (compunit_symtab *cu : objfile_compunits (objfile)) + { + for (symtab *s : compunit_filetabs (cu)) + { + uiout->begin (ui_out_type_tuple, NULL); + + uiout->field_string ("file", symtab_to_filename_for_display (s)); + uiout->field_string ("fullname", symtab_to_fullname (s)); + + uiout->end (ui_out_type_tuple); + } + } + } map_symbol_filenames (print_partial_file_name, NULL, 1 /*need_fullname*/); diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 33acb20..b8d5b65 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -430,7 +430,7 @@ struct objfile Although this is a tree structure, GDB only support one level (ie a separate debug for a separate debug is not supported). Note that separate debug object are in the main chain and therefore will be - visited by ALL_OBJFILES & co iterators. Separate debug objfile always + visited by all_objfiles & co iterators. Separate debug objfile always has a non-nul separate_debug_objfile_backlink. */ /* Link to the first separate debug object, if any. */ @@ -604,14 +604,6 @@ public: } }; - -/* Traverse all object files in the current program space. */ - -#define ALL_OBJFILES(obj) \ - for ((obj) = current_program_space->objfiles; \ - (obj) != NULL; \ - (obj) = (obj)->next) - /* A range adapter that makes it possible to iterate over all compunits in one objfile. */ @@ -705,14 +697,6 @@ private: struct objfile *m_objfile; }; -/* Traverse all symtabs in all objfiles in the current symbol - space. */ - -#define ALL_FILETABS(objfile, ps, s) \ - ALL_OBJFILES (objfile) \ - for (compunit_symtab *ps : objfile_compunits (objfile)) \ - for (symtab *s : compunit_filetabs (cu)) - #define ALL_OBJFILE_OSECTIONS(objfile, osect) \ for (osect = objfile->sections; osect < objfile->sections_end; osect++) \ if (osect->the_bfd_section == NULL) \ diff --git a/gdb/source.c b/gdb/source.c index 14dda01..abe4c6c 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -238,8 +238,6 @@ clear_current_source_symtab_and_line (void) void select_source_symtab (struct symtab *s) { - struct objfile *ofp; - if (s) { current_source_symtab = s; @@ -271,16 +269,22 @@ select_source_symtab (struct symtab *s) current_source_line = 1; - ALL_FILETABS (ofp, cu, symtab) + for (objfile *ofp : all_objfiles (current_program_space)) { - const char *name = symtab->filename; - int len = strlen (name); - - if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0 - || strcmp (name, "<<C++-namespaces>>") == 0))) + for (compunit_symtab *cu : objfile_compunits (ofp)) { - current_source_pspace = current_program_space; - current_source_symtab = symtab; + for (symtab *symtab : compunit_filetabs (cu)) + { + const char *name = symtab->filename; + int len = strlen (name); + + if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0 + || strcmp (name, "<<C++-namespaces>>") == 0))) + { + current_source_pspace = current_program_space; + current_source_symtab = symtab; + } + } } } diff --git a/gdb/symtab.c b/gdb/symtab.c index b32eca1..c4343cd 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -3359,37 +3359,42 @@ find_line_symtab (struct symtab *sym_tab, int line, (objfile, symtab_to_fullname (sym_tab)); } - struct objfile *objfile; - ALL_FILETABS (objfile, cu, s) - { - struct linetable *l; - int ind; - - if (FILENAME_CMP (sym_tab->filename, s->filename) != 0) - continue; - if (FILENAME_CMP (symtab_to_fullname (sym_tab), - symtab_to_fullname (s)) != 0) - continue; - l = SYMTAB_LINETABLE (s); - ind = find_line_common (l, line, &exact, 0); - if (ind >= 0) - { - if (exact) - { - best_index = ind; - best_linetable = l; - best_symtab = s; - goto done; - } - if (best == 0 || l->item[ind].line < best) - { - best = l->item[ind].line; - best_index = ind; - best_linetable = l; - best_symtab = s; - } - } - } + for (objfile *objfile : all_objfiles (current_program_space)) + { + for (compunit_symtab *cu : objfile_compunits (objfile)) + { + for (symtab *s : compunit_filetabs (cu)) + { + struct linetable *l; + int ind; + + if (FILENAME_CMP (sym_tab->filename, s->filename) != 0) + continue; + if (FILENAME_CMP (symtab_to_fullname (sym_tab), + symtab_to_fullname (s)) != 0) + continue; + l = SYMTAB_LINETABLE (s); + ind = find_line_common (l, line, &exact, 0); + if (ind >= 0) + { + if (exact) + { + best_index = ind; + best_linetable = l; + best_symtab = s; + goto done; + } + if (best == 0 || l->item[ind].line < best) + { + best = l->item[ind].line; + best_index = ind; + best_linetable = l; + best_symtab = s; + } + } + } + } + } } done: if (best_index < 0) @@ -4180,7 +4185,6 @@ output_partial_symbol_filename (const char *filename, const char *fullname, static void info_sources_command (const char *ignore, int from_tty) { - struct objfile *objfile; struct output_source_filename_data data; if (!have_full_symbols () && !have_partial_symbols ()) @@ -4195,12 +4199,18 @@ info_sources_command (const char *ignore, int from_tty) printf_filtered ("Source files for which symbols have been read in:\n\n"); data.first = 1; - ALL_FILETABS (objfile, cu, s) - { - const char *fullname = symtab_to_fullname (s); + for (objfile *objfile : all_objfiles (current_program_space)) + { + for (compunit_symtab *cu : objfile_compunits (objfile)) + { + for (symtab *s : compunit_filetabs (cu)) + { + const char *fullname = symtab_to_fullname (s); - output_source_filename (fullname, &data); - } + output_source_filename (fullname, &data); + } + } + } printf_filtered ("\n\n"); printf_filtered ("Source files for which symbols " @@ -5581,7 +5591,6 @@ maybe_add_partial_symtab_filename (const char *filename, const char *fullname, completion_list make_source_files_completion_list (const char *text, const char *word) { - struct objfile *objfile; size_t text_len = strlen (text); completion_list list; const char *base_name; @@ -5592,28 +5601,34 @@ make_source_files_completion_list (const char *text, const char *word) filename_seen_cache filenames_seen; - ALL_FILETABS (objfile, cu, s) + for (objfile *objfile : all_objfiles (current_program_space)) { - if (not_interesting_fname (s->filename)) - continue; - if (!filenames_seen.seen (s->filename) - && filename_ncmp (s->filename, text, text_len) == 0) - { - /* This file matches for a completion; add it to the current - list of matches. */ - add_filename_to_list (s->filename, text, word, &list); - } - else + for (compunit_symtab *cu : objfile_compunits (objfile)) { - /* NOTE: We allow the user to type a base name when the - debug info records leading directories, but not the other - way around. This is what subroutines of breakpoint - command do when they parse file names. */ - base_name = lbasename (s->filename); - if (base_name != s->filename - && !filenames_seen.seen (base_name) - && filename_ncmp (base_name, text, text_len) == 0) - add_filename_to_list (base_name, text, word, &list); + for (symtab *s : compunit_filetabs (cu)) + { + if (not_interesting_fname (s->filename)) + continue; + if (!filenames_seen.seen (s->filename) + && filename_ncmp (s->filename, text, text_len) == 0) + { + /* This file matches for a completion; add it to the current + list of matches. */ + add_filename_to_list (s->filename, text, word, &list); + } + else + { + /* NOTE: We allow the user to type a base name when the + debug info records leading directories, but not the other + way around. This is what subroutines of breakpoint + command do when they parse file names. */ + base_name = lbasename (s->filename); + if (base_name != s->filename + && !filenames_seen.seen (base_name) + && filename_ncmp (base_name, text, text_len) == 0) + add_filename_to_list (base_name, text, word, &list); + } + } } } |