From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 60166 invoked by alias); 25 May 2018 15:04:48 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 60148 invoked by uid 89); 25 May 2018 15:04:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.3 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=sk:make_cl, sk:set_las, stabs, 9746 X-HELO: gateway34.websitewelcome.com Received: from gateway34.websitewelcome.com (HELO gateway34.websitewelcome.com) (192.185.148.200) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 25 May 2018 15:04:45 +0000 Received: from cm10.websitewelcome.com (cm10.websitewelcome.com [100.42.49.4]) by gateway34.websitewelcome.com (Postfix) with ESMTP id 3E38614DFDE for ; Fri, 25 May 2018 10:04:44 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id MEGqfbTfYBcCXMEGqfVI22; Fri, 25 May 2018 10:04:44 -0500 X-Authority-Reason: nr=8 Received: from 174-29-44-154.hlrn.qwest.net ([174.29.44.154]:46722 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1fMEGq-000MMS-1J; Fri, 25 May 2018 10:04:44 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA] Remove cleanups from dbxread.c Date: Fri, 25 May 2018 16:07:00 -0000 Message-Id: <20180525150441.25246-1-tom@tromey.com> X-BWhitelist: no X-Source-L: No X-Exim-ID: 1fMEGq-000MMS-1J X-Source-Sender: 174-29-44-154.hlrn.qwest.net (bapiya.Home) [174.29.44.154]:46722 X-Source-Auth: tom+tromey.com X-Email-Count: 2 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-SW-Source: 2018-05/txt/msg00669.txt.bz2 This removes the remaining cleanups from dbxread.c, via std::vector, scoped_restore, and unique_xmalloc_ptr. Tested by the buildbot, but I'm not sure these code paths are actually exercised there. ChangeLog 2018-05-25 Tom Tromey * dbxread.c (init_bincl_list): Remove. (bincl_list): Now a std::vector. (bincls_allocated, next_bincl): Remove. (free_bincl_list, do_free_bincl_list_cleanup) (make_cleanup_free_bincl_list): Remove. (dbx_read_symtab, elfstab_build_psymtabs): Use scoped_restore, unique_xmalloc_ptr. (add_bincl_to_list, find_corresponding_bincl_psymtab) (read_dbx_symtab): Update. --- gdb/ChangeLog | 12 +++++++ gdb/dbxread.c | 108 ++++++++++++++++------------------------------------------ 2 files changed, 41 insertions(+), 79 deletions(-) diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 95b614cdae..830438c21e 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -243,8 +243,7 @@ struct header_file_location }; /* The actual list and controling variables. */ -static struct header_file_location *bincl_list, *next_bincl; -static int bincls_allocated; +static std::vector *bincl_list; /* Local function prototypes. */ @@ -257,15 +256,11 @@ static void dbx_psymtab_to_symtab_1 (struct objfile *, struct partial_symtab *); static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *); -static void free_bincl_list (struct objfile *); - static struct partial_symtab *find_corresponding_bincl_psymtab (const char *, int); static void add_bincl_to_list (struct partial_symtab *, const char *, int); -static void init_bincl_list (int, struct objfile *); - static const char *dbx_next_symbol_text (struct objfile *); static void fill_symbuf (bfd *); @@ -855,35 +850,18 @@ dbx_next_symbol_text (struct objfile *objfile) return nlist.n_strx + stringtab_global + file_string_table_offset; } -/* Initialize the list of bincls to contain none and have some - allocated. */ - -static void -init_bincl_list (int number, struct objfile *objfile) -{ - bincls_allocated = number; - next_bincl = bincl_list = XNEWVEC (struct header_file_location, - bincls_allocated); -} /* Add a bincl to the list. */ static void add_bincl_to_list (struct partial_symtab *pst, const char *name, int instance) { - if (next_bincl >= bincl_list + bincls_allocated) - { - int offset = next_bincl - bincl_list; + bincl_list->emplace_back (); + struct header_file_location *next_bincl = &bincl_list->back (); - bincls_allocated *= 2; - bincl_list = (struct header_file_location *) - xrealloc ((char *) bincl_list, - bincls_allocated * sizeof (struct header_file_location)); - next_bincl = bincl_list + offset; - } next_bincl->pst = pst; next_bincl->instance = instance; - next_bincl++->name = name; + next_bincl->name = name; } /* Given a name, value pair, find the corresponding @@ -893,38 +871,15 @@ add_bincl_to_list (struct partial_symtab *pst, const char *name, int instance) static struct partial_symtab * find_corresponding_bincl_psymtab (const char *name, int instance) { - struct header_file_location *bincl; - - for (bincl = bincl_list; bincl < next_bincl; bincl++) - if (bincl->instance == instance - && strcmp (name, bincl->name) == 0) - return bincl->pst; + for (struct header_file_location &bincl : *bincl_list) + if (bincl.instance == instance + && strcmp (name, bincl.name) == 0) + return bincl.pst; repeated_header_complaint (name, symnum); return (struct partial_symtab *) 0; } -/* Free the storage allocated for the bincl list. */ - -static void -free_bincl_list (struct objfile *objfile) -{ - xfree (bincl_list); - bincls_allocated = 0; -} - -static void -do_free_bincl_list_cleanup (void *objfile) -{ - free_bincl_list ((struct objfile *) objfile); -} - -static struct cleanup * -make_cleanup_free_bincl_list (struct objfile *objfile) -{ - return make_cleanup (do_free_bincl_list_cleanup, objfile); -} - /* Set namestring based on nlist. If the string table index is invalid, give a fake name, and print a single error message per symbol file read, rather than abort the symbol reading or flood the user with messages. */ @@ -1019,7 +974,6 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) int nsl; int past_first_source_file = 0; CORE_ADDR last_function_start = 0; - struct cleanup *back_to; bfd *abfd; int textlow_not_set; int data_sect_index; @@ -1060,8 +1014,9 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) sizeof (struct partial_symtab *)); /* Init bincl list */ - init_bincl_list (20, objfile); - back_to = make_cleanup_free_bincl_list (objfile); + std::vector bincl_storage; + scoped_restore restore_bincl_global + = make_scoped_restore (&bincl_list, &bincl_storage); set_last_source_file (NULL); @@ -1977,8 +1932,6 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) text_end > pst->texthigh ? text_end : pst->texthigh, dependency_list, dependencies_used, textlow_not_set); } - - do_cleanups (back_to); } /* Allocate and partially fill a partial symtab. It will be @@ -2240,8 +2193,6 @@ dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile) if (LDSYMLEN (self) || self->number_of_dependencies) { - struct cleanup *back_to; - /* Print the message now, before reading the string table, to avoid disconcerting pauses. */ if (info_verbose) @@ -2252,22 +2203,20 @@ dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile) next_symbol_text_func = dbx_next_symbol_text; - back_to = make_cleanup (null_cleanup, NULL); - - if (DBX_STAB_SECTION (objfile)) - { - stabs_data - = symfile_relocate_debug_section (objfile, - DBX_STAB_SECTION (objfile), - NULL); - - if (stabs_data) - make_cleanup (free_current_contents, (void *) &stabs_data); - } - - dbx_psymtab_to_symtab_1 (objfile, self); + { + scoped_restore restore_stabs_data = make_scoped_restore (&stabs_data); + gdb::unique_xmalloc_ptr data_holder; + if (DBX_STAB_SECTION (objfile)) + { + stabs_data + = symfile_relocate_debug_section (objfile, + DBX_STAB_SECTION (objfile), + NULL); + data_holder.reset (stabs_data); + } - do_cleanups (back_to); + dbx_psymtab_to_symtab_1 (objfile, self); + } /* Match with global symbols. This only needs to be done once, after all of the symtabs and dependencies have been read in. */ @@ -3146,7 +3095,6 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect, int val; bfd *sym_bfd = objfile->obfd; char *name = bfd_get_filename (sym_bfd); - struct cleanup *back_to = make_cleanup (null_cleanup, NULL); /* Find the first and last text address. dbx_symfile_read seems to want this. */ @@ -3184,9 +3132,13 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect, symbuf_read = 0; symbuf_left = bfd_section_size (objfile->obfd, stabsect); + + scoped_restore restore_stabs_data = make_scoped_restore (&stabs_data); + gdb::unique_xmalloc_ptr data_holder; + stabs_data = symfile_relocate_debug_section (objfile, stabsect, NULL); if (stabs_data) - make_cleanup (free_current_contents, (void *) &stabs_data); + data_holder.reset (stabs_data); /* In an elf file, we've already installed the minimal symbols that came from the elf (non-stab) symbol table, so always act like an @@ -3195,8 +3147,6 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect, table and normal symbol entries won't be in the ".stab" section; but in case it does, it will install them itself. */ dbx_symfile_read (objfile, 0); - - do_cleanups (back_to); } /* Scan and build partial symbols for a file with special sections for stabs -- 2.13.6