From patchwork Sun Jan 26 23:41:08 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: 37553 Received: (qmail 40207 invoked by alias); 26 Jan 2020 23:41:16 -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 40108 invoked by uid 89); 26 Jan 2020 23:41:15 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.8 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=ordinary 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:13 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id 7931E20A7E; Sun, 26 Jan 2020 18:41:11 -0500 (EST) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [8.43.85.239]) by mx1.osci.io (Postfix) with ESMTP id 718F1204C4; Sun, 26 Jan 2020 18:41:08 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id 4A1BC218A2; Sun, 26 Jan 2020 18:41:08 -0500 (EST) X-Gerrit-PatchSet: 2 Date: Sun, 26 Jan 2020 18:41:08 -0500 From: "Sourceware to Gerrit sync (Code Review)" To: Tom Tromey , gdb-patches@sourceware.org Auto-Submitted: auto-generated X-Gerrit-MessageType: merged Subject: [pushed] Use new and delete for psymtabs X-Gerrit-Change-Id: I4e78ac538fc0ea52b57489c1afb8f935a30941ef X-Gerrit-Change-Number: 374 X-Gerrit-ChangeURL: X-Gerrit-Commit: 6f17252b76dbe8bedd32b6df6ce52af707bfb04b 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: <20200126234108.4A1BC218A2@gnutoolchain-gerrit.osci.io> Sourceware to Gerrit sync has submitted this change. Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/374 ...................................................................... Use new and delete for psymtabs This changes psymtabs to be allocated with new and destroyed with delete. As a consequence, the psymtab free-list is also removed. The motivation for this is to let symbol readers subclass partial_symtab. gdb/ChangeLog 2020-01-26 Tom Tromey * mdebugread.c (parse_partial_symbols): Use discard_psymtab. * psymtab.h (class psymtab_storage) : Remove. * psymtab.c (psymtab_storage): Delete psymtabs. (psymtab_storage::allocate_psymtab): Use new. (psymtab_storage::discard_psymtab): Use delete. * psympriv.h (struct partial_symtab): Add constructor and initializers. Change-Id: I4e78ac538fc0ea52b57489c1afb8f935a30941ef --- M gdb/ChangeLog M gdb/mdebugread.c M gdb/psympriv.h M gdb/psymtab.c M gdb/psymtab.h 5 files changed, 46 insertions(+), 40 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9525ca7..7be36c1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,15 @@ 2020-01-26 Tom Tromey + * mdebugread.c (parse_partial_symbols): Use discard_psymtab. + * psymtab.h (class psymtab_storage) : Remove. + * psymtab.c (psymtab_storage): Delete psymtabs. + (psymtab_storage::allocate_psymtab): Use new. + (psymtab_storage::discard_psymtab): Use delete. + * psympriv.h (struct partial_symtab): Add constructor and + initializers. + +2020-01-26 Tom Tromey + * machoread.c: Do not include psympriv.h. 2020-01-25 Philippe Waroquiers diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index b1994f1..393a433 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -3747,7 +3747,7 @@ && pst->number_of_dependencies == 0 && pst->n_global_syms == 0 && pst->n_static_syms == 0) - objfile->partial_symtabs->psymtabs = NULL; + objfile->partial_symtabs->discard_psymtab (pst); } /* If the current psymbol has an enumerated type, we need to add diff --git a/gdb/psympriv.h b/gdb/psympriv.h index be03465..dc89db2 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -104,6 +104,13 @@ struct partial_symtab { + partial_symtab () + : searched_flag (PST_NOT_SEARCHED), + text_low_valid (0), + text_high_valid (0) + { + } + /* Return the raw low text address of this partial_symtab. */ CORE_ADDR raw_text_low () const { @@ -145,21 +152,21 @@ /* Chain of all existing partial symtabs. */ - struct partial_symtab *next; + struct partial_symtab *next = nullptr; /* Name of the source file which this partial_symtab defines, or if the psymtab is anonymous then a descriptive name for debugging purposes, or "". It must not be NULL. */ - const char *filename; + const char *filename = nullptr; /* Full path of the source file. NULL if not known. */ - char *fullname; + char *fullname = nullptr; /* Directory in which it was compiled, or NULL if we don't know. */ - const char *dirname; + const char *dirname = nullptr; /* Range of text addresses covered by this file; texthigh is the beginning of the next section. Do not use if PSYMTABS_ADDRMAP_SUPPORTED @@ -168,8 +175,8 @@ text_low_valid and text_high_valid fields; these are located later in this structure for better packing. */ - CORE_ADDR m_text_low; - CORE_ADDR m_text_high; + CORE_ADDR m_text_low = 0; + CORE_ADDR m_text_high = 0; /* If NULL, this is an ordinary partial symbol table. @@ -198,7 +205,7 @@ The choice of which one should be canonical is left to the debuginfo reader; it can be arbitrary. */ - struct partial_symtab *user; + struct partial_symtab *user = nullptr; /* Array of pointers to all of the partial_symtab's which this one depends on. Since this array can only be set to previous or @@ -209,17 +216,17 @@ in foo.h may use type numbers defined in foo.c. For other debugging formats there may be no need to use dependencies. */ - struct partial_symtab **dependencies; + struct partial_symtab **dependencies = nullptr; - int number_of_dependencies; + int number_of_dependencies = 0; /* Global symbol list. This list will be sorted after readin to improve access. Binary search will be the usual method of finding a symbol within it. globals_offset is an integer offset within global_psymbols[]. */ - int globals_offset; - int n_global_syms; + int globals_offset = 0; + int n_global_syms = 0; /* Static symbol list. This list will *not* be sorted after readin; to find a symbol in it, exhaustive search must be used. This is @@ -229,24 +236,24 @@ how long errors take). This is an offset and size within static_psymbols[]. */ - int statics_offset; - int n_static_syms; + int statics_offset = 0; + int n_static_syms = 0; /* Non-zero if the symtab corresponding to this psymtab has been readin. This is located here so that this structure packs better on 64-bit systems. */ - unsigned char readin; + unsigned char readin = 0; /* True iff objfile->psymtabs_addrmap is properly populated for this partial_symtab. For discontiguous overlapping psymtabs is the only usable info in PSYMTABS_ADDRMAP. */ - unsigned char psymtabs_addrmap_supported; + unsigned char psymtabs_addrmap_supported = 0; /* True if the name of this partial symtab is not a source file name. */ - unsigned char anonymous; + unsigned char anonymous = 0; /* A flag that is temporarily used when searching psymtabs. */ @@ -260,19 +267,19 @@ /* Pointer to compunit eventually allocated for this source file, 0 if !readin or if we haven't looked for the symtab after it was readin. */ - struct compunit_symtab *compunit_symtab; + struct compunit_symtab *compunit_symtab = nullptr; /* Pointer to function which will read in the symtab corresponding to this psymtab. */ - void (*read_symtab) (struct partial_symtab *, struct objfile *); + void (*read_symtab) (struct partial_symtab *, struct objfile *) = nullptr; /* Information that lets read_symtab() locate the part of the symbol table that this psymtab corresponds to. This information is private to the format-dependent symbol reading routines. For further detail examine the various symbol reading modules. */ - void *read_symtab_private; + void *read_symtab_private = nullptr; }; /* Specify whether a partial psymbol should be allocated on the global diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 18580f5..5f42867 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -64,6 +64,13 @@ psymtab_storage::~psymtab_storage () { + partial_symtab *iter = psymtabs; + while (iter != nullptr) + { + partial_symtab *next = iter->next; + delete iter; + iter = next; + } } /* See psymtab.h. */ @@ -71,17 +78,7 @@ struct partial_symtab * psymtab_storage::allocate_psymtab () { - struct partial_symtab *psymtab; - - if (free_psymtabs != nullptr) - { - psymtab = free_psymtabs; - free_psymtabs = psymtab->next; - } - else - psymtab = XOBNEW (obstack (), struct partial_symtab); - - memset (psymtab, 0, sizeof (struct partial_symtab)); + struct partial_symtab *psymtab = new struct partial_symtab; psymtab->next = psymtabs; psymtabs = psymtab; @@ -1705,11 +1702,7 @@ while ((*prev_pst) != pst) prev_pst = &((*prev_pst)->next); (*prev_pst) = pst->next; - - /* Next, put it on a free list for recycling. */ - - pst->next = free_psymtabs; - free_psymtabs = pst; + delete pst; } diff --git a/gdb/psymtab.h b/gdb/psymtab.h index eaeac49..c0f0a97 100644 --- a/gdb/psymtab.h +++ b/gdb/psymtab.h @@ -130,10 +130,6 @@ private: - /* List of freed partial symtabs, available for re-use. */ - - struct partial_symtab *free_psymtabs = nullptr; - /* The obstack where allocations are made. This is lazily allocated so that we don't waste memory when there are no psymtabs. */