From patchwork Sun Nov 25 16:54:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 30285 Received: (qmail 93445 invoked by alias); 25 Nov 2018 16:54:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 93267 invoked by uid 89); 25 Nov 2018 16:54:53 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: gateway32.websitewelcome.com Received: from gateway32.websitewelcome.com (HELO gateway32.websitewelcome.com) (192.185.145.119) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 25 Nov 2018 16:54:47 +0000 Received: from cm11.websitewelcome.com (cm11.websitewelcome.com [100.42.49.5]) by gateway32.websitewelcome.com (Postfix) with ESMTP id 0660214AAD for ; Sun, 25 Nov 2018 10:54:46 -0600 (CST) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id QxgDgzrmeRPojQxgDg8ywk; Sun, 25 Nov 2018 10:54:46 -0600 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=QwK3rMzyVU9GAMXYzU4PKzlPYexMI4MWS04hG1CEfNo=; b=xpJbSz0Fon4m89lXOd42dSxf85 +bSYy5pxkx/eFm1OETGpddtdPZRM2b3XeWEyjtF+HnwipHlTxrEVz2hDFSzGeH4IFCv7CW+AVyvZR 6qs3sVIkN3AzmWtA+VxMRQ5op; Received: from 97-122-190-66.hlrn.qwest.net ([97.122.190.66]:51592 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1gQxgD-0013GF-O5; Sun, 25 Nov 2018 10:54:45 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 10/12] Remove ALL_OBJFILES and ALL_FILETABS Date: Sun, 25 Nov 2018 09:54:37 -0700 Message-Id: <20181125165439.13773-11-tom@tromey.com> In-Reply-To: <20181125165439.13773-1-tom@tromey.com> References: <20181125165439.13773-1-tom@tromey.com> This removes the ALL_OBJFILES and ALL_FILETABS macros, replacing them with ranged for loops. gdb/ChangeLog 2018-11-25 Tom Tromey * 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. --- gdb/ChangeLog | 11 ++++ gdb/mi/mi-cmd-file.c | 17 +++--- gdb/objfiles.h | 18 +------ gdb/source.c | 24 ++++----- gdb/symtab.c | 121 ++++++++++++++++++++++--------------------- 5 files changed, 95 insertions(+), 96 deletions(-) diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c index a74846e21b..9fabdb9d71 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,17 @@ 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); + for (struct objfile *objfile : all_objfiles (current_program_space)) + for (struct compunit_symtab *cu : objfile_compunits (objfile)) + for (struct 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->field_string ("file", symtab_to_filename_for_display (s)); + uiout->field_string ("fullname", symtab_to_fullname (s)); - uiout->end (ui_out_type_tuple); - } + 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 94394e79ae..9d00a55ce5 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 (struct compunit_symtab *ps : objfile_compunits (objfile)) \ - for (struct 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 6111453eb0..c0ea866d92 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -243,8 +243,6 @@ clear_current_source_symtab_and_line (void) void select_source_symtab (struct symtab *s) { - struct objfile *ofp; - if (s) { current_source_symtab = s; @@ -276,18 +274,20 @@ select_source_symtab (struct symtab *s) current_source_line = 1; - ALL_FILETABS (ofp, cu, symtab) - { - const char *name = symtab->filename; - int len = strlen (name); - - if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0 - || strcmp (name, "<>") == 0))) + for (struct objfile *ofp : all_objfiles (current_program_space)) + for (struct compunit_symtab *cu : objfile_compunits (ofp)) + for (struct symtab *symtab : compunit_filetabs (cu)) { - current_source_pspace = current_program_space; - current_source_symtab = symtab; + const char *name = symtab->filename; + int len = strlen (name); + + if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0 + || strcmp (name, "<>") == 0))) + { + current_source_pspace = current_program_space; + current_source_symtab = symtab; + } } - } if (current_source_symtab) return; diff --git a/gdb/symtab.c b/gdb/symtab.c index c16fc307ad..145971f1b9 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -3353,37 +3353,38 @@ find_line_symtab (struct symtab *symtab, int line, (objfile, symtab_to_fullname (symtab)); } - struct objfile *objfile; - ALL_FILETABS (objfile, cu, s) - { - struct linetable *l; - int ind; + for (struct objfile *objfile : all_objfiles (current_program_space)) + for (struct compunit_symtab *cu : objfile_compunits (objfile)) + for (struct symtab *s : compunit_filetabs (cu)) + { + struct linetable *l; + int ind; - if (FILENAME_CMP (symtab->filename, s->filename) != 0) - continue; - if (FILENAME_CMP (symtab_to_fullname (symtab), - 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; - } - } - } + if (FILENAME_CMP (symtab->filename, s->filename) != 0) + continue; + if (FILENAME_CMP (symtab_to_fullname (symtab), + 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) @@ -4174,7 +4175,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 ()) @@ -4189,12 +4189,14 @@ 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 (struct objfile *objfile : all_objfiles (current_program_space)) + for (struct compunit_symtab *cu : objfile_compunits (objfile)) + for (struct 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 " @@ -5563,7 +5565,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; @@ -5574,30 +5575,32 @@ make_source_files_completion_list (const char *text, const char *word) filename_seen_cache filenames_seen; - ALL_FILETABS (objfile, cu, s) - { - 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 (struct objfile *objfile : all_objfiles (current_program_space)) + for (struct compunit_symtab *cu : objfile_compunits (objfile)) + for (struct symtab *s : compunit_filetabs (cu)) { - /* 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); + 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); + } } - } datum.filename_seen_cache = &filenames_seen; datum.text = text;