From patchwork Sun Jan 26 23:41:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Simon Marchi (Code Review)" X-Patchwork-Id: 37562 Received: (qmail 43083 invoked by alias); 26 Jan 2020 23:41:35 -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 42573 invoked by uid 89); 26 Jan 2020 23:41:31 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy= X-HELO: mx1.osci.io Received: from polly.osci.io (HELO mx1.osci.io) (8.43.85.229) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 26 Jan 2020 23:41:28 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id B1D612058E; Sun, 26 Jan 2020 18:41:25 -0500 (EST) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [8.43.85.239]) by mx1.osci.io (Postfix) with ESMTP id 6982420A79; Sun, 26 Jan 2020 18:41:11 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id 4673420AF7; Sun, 26 Jan 2020 18:41:11 -0500 (EST) X-Gerrit-PatchSet: 2 Date: Sun, 26 Jan 2020 18:41:07 -0500 From: "Sourceware to Gerrit sync (Code Review)" To: Tom Tromey , gdb-patches@sourceware.org Auto-Submitted: auto-generated X-Gerrit-MessageType: newpatchset Subject: [pushed] Consolidate partial symtab dependency reading X-Gerrit-Change-Id: I8151e05677794e90223edc1a4cb70f7f69137d46 X-Gerrit-Change-Number: 382 X-Gerrit-ChangeURL: X-Gerrit-Commit: 0494dbecdfa0b0b9065393755a1ac64431997da1 In-Reply-To: References: Reply-To: noreply@gnutoolchain-gerrit.osci.io, tromey@sourceware.org, gdb-patches@sourceware.org MIME-Version: 1.0 Content-Disposition: inline User-Agent: Gerrit/3.0.3-79-g83ff7f88f1 Message-Id: <20200126234111.4673420AF7@gnutoolchain-gerrit.osci.io> The original change was created by Tom Tromey. Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/382 ...................................................................... Consolidate partial symtab dependency reading Most of the symbol readers have code to iterate over a partial symtabs dependencies, expanding each one and optionally printing a message. Now that the "second-stage" psymtab expansion is available as a method, these implementations can all be merged. This patch also changes a couple more warnings into assertions. gdb/ChangeLog 2020-01-26 Tom Tromey * xcoffread.c (xcoff_psymtab_to_symtab_1): Call read_dependencies. Add assert. * psymtab.c (partial_symtab::read_dependencies): New method. * psympriv.h (struct partial_symtab) : New method. * mdebugread.c (psymtab_to_symtab_1): Call read_dependencies. * dwarf2read.c (dwarf2_psymtab::expand_psymtab): Call read_dependencies. * dbxread.c (dbx_psymtab_to_symtab_1): Call read_dependencies. Add assert. Change-Id: I8151e05677794e90223edc1a4cb70f7f69137d46 --- M gdb/ChangeLog M gdb/dbxread.c M gdb/dwarf2read.c M gdb/mdebugread.c M gdb/psympriv.h M gdb/psymtab.c M gdb/xcoffread.c 7 files changed, 48 insertions(+), 90 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c6a0251..69f2689 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 2020-01-26 Tom Tromey + * xcoffread.c (xcoff_psymtab_to_symtab_1): Call + read_dependencies. Add assert. + * psymtab.c (partial_symtab::read_dependencies): New method. + * psympriv.h (struct partial_symtab) : New + method. + * mdebugread.c (psymtab_to_symtab_1): Call read_dependencies. + * dwarf2read.c (dwarf2_psymtab::expand_psymtab): Call + read_dependencies. + * dbxread.c (dbx_psymtab_to_symtab_1): Call read_dependencies. + Add assert. + +2020-01-26 Tom Tromey + * xcoffread.c (xcoff_psymtab_to_symtab_1): Change argument order. Call expand_psymtab. (xcoff_read_symtab): Call expand_psymtab. diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 2711ea8..99f47c0 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -2068,33 +2068,10 @@ static void dbx_psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile) { - int i; - - if (pst->readin) - { - fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " - "Shouldn't happen.\n", - pst->filename); - return; - } + gdb_assert (!pst->readin); /* Read in all partial symtabs on which this one is dependent. */ - for (i = 0; i < pst->number_of_dependencies; i++) - if (!pst->dependencies[i]->readin) - { - /* Inform about additional files that need to be read in. */ - if (info_verbose) - { - fputs_filtered (" ", gdb_stdout); - wrap_here (""); - fputs_filtered ("and ", gdb_stdout); - wrap_here (""); - printf_filtered ("%s...", pst->dependencies[i]->filename); - wrap_here (""); /* Flush output. */ - gdb_flush (gdb_stdout); - } - pst->dependencies[i]->expand_psymtab (objfile); - } + pst->read_dependencies (objfile); if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */ { diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index c3e0866..dafe01d 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9663,29 +9663,11 @@ dwarf2_psymtab::expand_psymtab (struct objfile *objfile) { struct dwarf2_per_cu_data *per_cu; - int i; if (readin) return; - for (i = 0; i < number_of_dependencies; i++) - if (!dependencies[i]->readin - && dependencies[i]->user == NULL) - { - /* Inform about additional files that need to be read in. */ - if (info_verbose) - { - /* FIXME: i18n: Need to make this a single string. */ - fputs_filtered (" ", gdb_stdout); - wrap_here (""); - fputs_filtered ("and ", gdb_stdout); - wrap_here (""); - printf_filtered ("%s...", dependencies[i]->filename); - wrap_here (""); /* Flush output. */ - gdb_flush (gdb_stdout); - } - dependencies[i]->expand_psymtab (objfile); - } + read_dependencies (objfile); per_cu = per_cu_data; diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 1d0a0fc..5d2fbcd 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -3856,24 +3856,7 @@ /* Read in all partial symtabs on which this one is dependent. NOTE that we do have circular dependencies, sigh. We solved that by setting pst->readin before this point. */ - - for (i = 0; i < pst->number_of_dependencies; i++) - if (!pst->dependencies[i]->readin) - { - /* Inform about additional files to be read in. */ - if (info_verbose) - { - fputs_filtered (" ", gdb_stdout); - wrap_here (""); - fputs_filtered ("and ", gdb_stdout); - wrap_here (""); - printf_filtered ("%s...", - pst->dependencies[i]->filename); - wrap_here (""); /* Flush output */ - gdb_flush (gdb_stdout); - } - pst->dependencies[i]->expand_psymtab (objfile); - } + pst->read_dependencies (objfile); /* Do nothing if this is a dummy psymtab. */ diff --git a/gdb/psympriv.h b/gdb/psympriv.h index ae98a69..e4b2330 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -134,6 +134,9 @@ expand_psymtab can be made. */ virtual void expand_psymtab (struct objfile *) = 0; + /* Ensure that all the dependencies are read in. */ + void read_dependencies (struct objfile *); + /* Return the raw low text address of this partial_symtab. */ CORE_ADDR raw_text_low () const { diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 6abc829..c020d15 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1682,6 +1682,32 @@ } } +/* See psympriv.h. */ + +void +partial_symtab::read_dependencies (struct objfile *objfile) +{ + for (int i = 0; i < number_of_dependencies; ++i) + { + if (!dependencies[i]->readin) + { + /* Inform about additional files to be read in. */ + if (info_verbose) + { + fputs_filtered (" ", gdb_stdout); + wrap_here (""); + fputs_filtered ("and ", gdb_stdout); + wrap_here (""); + printf_filtered ("%s...", dependencies[i]->filename); + wrap_here (""); /* Flush output */ + gdb_flush (gdb_stdout); + } + dependencies[i]->expand_psymtab (objfile); + } + } +} + + void psymtab_storage::discard_psymtab (struct partial_symtab *pst) { diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 1c0db67..b7da3f9 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1819,36 +1819,10 @@ static void xcoff_psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile) { - int i; - - if (!pst) - return; - - if (pst->readin) - { - fprintf_unfiltered - (gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n", - pst->filename); - return; - } + gdb_assert (!pst->readin); /* Read in all partial symtabs on which this one is dependent. */ - for (i = 0; i < pst->number_of_dependencies; i++) - if (!pst->dependencies[i]->readin) - { - /* Inform about additional files that need to be read in. */ - if (info_verbose) - { - fputs_filtered (" ", gdb_stdout); - wrap_here (""); - fputs_filtered ("and ", gdb_stdout); - wrap_here (""); - printf_filtered ("%s...", pst->dependencies[i]->filename); - wrap_here (""); /* Flush output */ - gdb_flush (gdb_stdout); - } - pst->dependencies[i]->expand_psymtab (objfile); - } + pst->read_dependencies (objfile); if (((struct symloc *) pst->read_symtab_private)->numsyms != 0) {