From patchwork Wed Feb 27 20:18:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 31662 Received: (qmail 117065 invoked by alias); 27 Feb 2019 20:19:15 -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 116139 invoked by uid 89); 27 Feb 2019 20:19:09 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=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=fullname, preprocessor X-HELO: gateway32.websitewelcome.com Received: from gateway32.websitewelcome.com (HELO gateway32.websitewelcome.com) (192.185.144.98) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 27 Feb 2019 20:19:01 +0000 Received: from cm11.websitewelcome.com (cm11.websitewelcome.com [100.42.49.5]) by gateway32.websitewelcome.com (Postfix) with ESMTP id 99555B85D9 for ; Wed, 27 Feb 2019 14:19:00 -0600 (CST) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id z5fQg8rf5dnCez5fQg58fG; Wed, 27 Feb 2019 14:19:00 -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=fVdqkpxB0ZW7cD3WmdmZ1LY7MWvUVFqHEZlEbse6joE=; b=WBnDqexwvpfVRiln84UEUB1jhT a0eCN1aoJKtvdUo2mJvEowdpPR6mLQRUqvMo08C223FB6wFMkmCsabzB5UQhbJMBsvPYS86eaGg4U PQG9g0m5jCeIRIo5tWUeP3jKV; Received: from 75-166-85-218.hlrn.qwest.net ([75.166.85.218]:36364 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1gz5fQ-004Fi1-CG; Wed, 27 Feb 2019 14:19:00 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v2 22/22] Introduce and use bcache_up Date: Wed, 27 Feb 2019 13:18:49 -0700 Message-Id: <20190227201849.32210-23-tom@tromey.com> In-Reply-To: <20190227201849.32210-1-tom@tromey.com> References: <20190227201849.32210-1-tom@tromey.com> This introduces a new bcache_up typedef, which is a unique_ptr specialization for managing a bcache. Then, this changes various spots to use this object, rather than manually calling bcache_xfree. This lets us remove a try/catch that only existed to call bcache_xfree. gdb/ChangeLog 2019-02-27 Tom Tromey * symmisc.c (print_symbol_bcache_statistics) (print_objfile_statistics): Update. * symfile.c (allocate_symtab): Update. * psymtab.c (allocate_psymtab): Update. * objfiles.h (struct objfile_per_bfd_storage) : Change type to bcache_up. * objfiles.c (get_objfile_bfd_data): Update. (free_objfile_per_bfd_storage): Don't call bcache_xfree. * gdbtypes.c (types_deeply_equal): Use bcache_up. * elfread.c (elf_symtab_read): Update. * buildsym.c (buildsym_compunit::get_macro_table): Update. * bcache.h (struct bcache_deleter): New. (bcache_up): New typedef. --- gdb/ChangeLog | 16 ++++++++++++++++ gdb/bcache.h | 12 ++++++++++++ gdb/buildsym.c | 2 +- gdb/elfread.c | 2 +- gdb/gdbtypes.c | 26 ++------------------------ gdb/objfiles.c | 6 ++---- gdb/objfiles.h | 6 +++--- gdb/psymtab.c | 2 +- gdb/symfile.c | 2 +- gdb/symmisc.c | 8 ++++---- 10 files changed, 43 insertions(+), 39 deletions(-) diff --git a/gdb/bcache.h b/gdb/bcache.h index aa0147926c6..9c1f71b6018 100644 --- a/gdb/bcache.h +++ b/gdb/bcache.h @@ -156,6 +156,18 @@ extern const void *bcache_full (const void *addr, int length, /* Free all the storage used by BCACHE. */ extern void bcache_xfree (struct bcache *bcache); +/* A deleter that calls bcache_xfree. */ +struct bcache_deleter +{ + void operator() (struct bcache *bcache) + { + bcache_xfree (bcache); + } +}; + +/* A unique pointer specialization for bcache. */ +typedef std::unique_ptr bcache_up; + /* Create a new bcache object. */ extern struct bcache *bcache_xmalloc ( unsigned long (*hash_function)(const void *, int length), diff --git a/gdb/buildsym.c b/gdb/buildsym.c index bd0f25e061e..2b70d43e3a0 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -122,7 +122,7 @@ buildsym_compunit::get_macro_table () { if (m_pending_macros == nullptr) m_pending_macros = new_macro_table (&m_objfile->per_bfd->storage_obstack, - m_objfile->per_bfd->macro_cache, + m_objfile->per_bfd->macro_cache.get (), m_compunit_symtab); return m_pending_macros; } diff --git a/gdb/elfread.c b/gdb/elfread.c index 8fc6692b112..2f274692348 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -335,7 +335,7 @@ elf_symtab_read (minimal_symbol_reader &reader, { filesymname = (const char *) bcache (sym->name, strlen (sym->name) + 1, - objfile->per_bfd->filename_cache); + objfile->per_bfd->filename_cache.get ()); } else if (sym->flags & BSF_SECTION_SYM) continue; diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 08c292457d2..defefeabb21 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -3748,9 +3748,6 @@ check_types_worklist (std::vector *worklist, bool types_deeply_equal (struct type *type1, struct type *type2) { - struct gdb_exception except = exception_none; - bool result = false; - struct bcache *cache; std::vector worklist; gdb_assert (type1 != NULL && type2 != NULL); @@ -3759,30 +3756,11 @@ types_deeply_equal (struct type *type1, struct type *type2) if (type1 == type2) return true; - cache = bcache_xmalloc (NULL, NULL); + bcache_up cache (bcache_xmalloc (NULL, NULL)); worklist.emplace_back (type1, type2); - /* check_types_worklist calls several nested helper functions, some - of which can raise a GDB exception, so we just check and rethrow - here. If there is a GDB exception, a comparison is not capable - (or trusted), so exit. */ - try - { - result = check_types_worklist (&worklist, cache); - } - catch (const struct gdb_exception &ex) - { - except = ex; - } - - bcache_xfree (cache); - - /* Rethrow if there was a problem. */ - if (except.reason < 0) - throw_exception (except); - - return result; + return check_types_worklist (&worklist, cache.get ()); } /* Allocated status of type TYPE. Return zero if type TYPE is allocated. diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 34b271e86de..47bb5a83538 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -157,8 +157,8 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd) if (abfd != NULL) storage->gdbarch = gdbarch_from_bfd (abfd); - storage->filename_cache = bcache_xmalloc (NULL, NULL); - storage->macro_cache = bcache_xmalloc (NULL, NULL); + storage->filename_cache.reset (bcache_xmalloc (NULL, NULL)); + storage->macro_cache.reset (bcache_xmalloc (NULL, NULL)); storage->language_of_main = language_unknown; } @@ -170,8 +170,6 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd) static void free_objfile_per_bfd_storage (struct objfile_per_bfd_storage *storage) { - bcache_xfree (storage->filename_cache); - bcache_xfree (storage->macro_cache); if (storage->demangled_names_hash) htab_delete (storage->demangled_names_hash); storage->~objfile_per_bfd_storage (); diff --git a/gdb/objfiles.h b/gdb/objfiles.h index a10781f598e..272fd6a6204 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -31,8 +31,8 @@ #include #include "common/next-iterator.h" #include "common/safe-iterator.h" +#include "bcache.h" -struct bcache; struct htab; struct objfile_data; struct partial_symbol; @@ -240,11 +240,11 @@ struct objfile_per_bfd_storage /* Byte cache for file names. */ - struct bcache *filename_cache = NULL; + bcache_up filename_cache; /* Byte cache for macros. */ - struct bcache *macro_cache = NULL; + bcache_up macro_cache; /* The gdbarch associated with the BFD. Note that this gdbarch is determined solely from BFD information, without looking at target diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 17db29759c4..d6a5db47188 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1742,7 +1742,7 @@ allocate_psymtab (const char *filename, struct objfile *objfile) psymtab->filename = (const char *) bcache (filename, strlen (filename) + 1, - objfile->per_bfd->filename_cache); + objfile->per_bfd->filename_cache.get ()); psymtab->compunit_symtab = NULL; if (symtab_create_debug) diff --git a/gdb/symfile.c b/gdb/symfile.c index 61483824f63..7ea060c437c 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -2796,7 +2796,7 @@ allocate_symtab (struct compunit_symtab *cust, const char *filename) symtab->filename = (const char *) bcache (filename, strlen (filename) + 1, - objfile->per_bfd->filename_cache); + objfile->per_bfd->filename_cache.get ()); symtab->fullname = NULL; symtab->language = deduce_language_from_filename (filename); diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 9025217a106..5967d19d16b 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -72,9 +72,9 @@ print_symbol_bcache_statistics (void) print_bcache_statistics (psymbol_bcache_get_bcache (objfile->partial_symtabs->psymbol_cache), "partial symbol cache"); - print_bcache_statistics (objfile->per_bfd->macro_cache, + print_bcache_statistics (objfile->per_bfd->macro_cache.get (), "preprocessor macro cache"); - print_bcache_statistics (objfile->per_bfd->filename_cache, + print_bcache_statistics (objfile->per_bfd->filename_cache.get (), "file name cache"); } } @@ -139,9 +139,9 @@ print_objfile_statistics (void) bcache_memory_used (psymbol_bcache_get_bcache (objfile->partial_symtabs->psymbol_cache))); printf_filtered (_(" Total memory used for macro cache: %d\n"), - bcache_memory_used (objfile->per_bfd->macro_cache)); + bcache_memory_used (objfile->per_bfd->macro_cache.get ())); printf_filtered (_(" Total memory used for file name cache: %d\n"), - bcache_memory_used (objfile->per_bfd->filename_cache)); + bcache_memory_used (objfile->per_bfd->filename_cache.get ())); } }