From patchwork Fri Dec 13 06:03:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 36829 Received: (qmail 85831 invoked by alias); 13 Dec 2019 06:03:33 -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 85627 invoked by uid 89); 13 Dec 2019 06:03:32 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_SOFTFAIL autolearn=ham version=3.3.1 spammy= X-HELO: barracuda.ebox.ca Received: from barracuda.ebox.ca (HELO barracuda.ebox.ca) (96.127.255.19) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 13 Dec 2019 06:03:30 +0000 Received: from smtp.ebox.ca (smtp.ebox.ca [96.127.255.82]) by barracuda.ebox.ca with ESMTP id NGDIEfqHjA8dyCGs (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 13 Dec 2019 01:03:28 -0500 (EST) Received: from simark.lan (unknown [192.222.164.54]) by smtp.ebox.ca (Postfix) with ESMTP id 1F52D441B21; Fri, 13 Dec 2019 01:03:28 -0500 (EST) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 3/7] jit: c++-ify gdb_symtab Date: Fri, 13 Dec 2019 01:03:19 -0500 Message-Id: <20191213060323.1799590-4-simon.marchi@polymtl.ca> In-Reply-To: <20191213060323.1799590-1-simon.marchi@polymtl.ca> References: <20191213060323.1799590-1-simon.marchi@polymtl.ca> MIME-Version: 1.0 X-IsSubscribed: yes This patch makes the gdb_symtab bit more c++y. It changes the fields to use automatic memory management, in the form of std::string and gdb::unique_xmalloc_ptr, and adds a constructor and a destructor. gdb/ChangeLog: * jit.c (struct gdb_symtab): Add constructor, destructor, initialize fields. : Change type to unique_xmalloc_ptr. : Change type to std::string. (jit_symtab_open_impl): Allocate gdb_symtab with new. (jit_symtab_line_mapping_add_impl): Adjust. (finalize_symtab): Call delete on stab. --- gdb/jit.c | 63 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/gdb/jit.c b/gdb/jit.c index 672a74044af3..eace83e583d3 100644 --- a/gdb/jit.c +++ b/gdb/jit.c @@ -450,18 +450,37 @@ struct gdb_block struct gdb_symtab { + gdb_symtab (const char *file_name) + : file_name (file_name != nullptr ? file_name : "") + {} + + ~gdb_symtab () + { + gdb_block *gdb_block_iter, *gdb_block_iter_tmp; + + for ((gdb_block_iter = this->blocks, + gdb_block_iter_tmp = gdb_block_iter->next); + gdb_block_iter; + gdb_block_iter = gdb_block_iter_tmp) + { + gdb_block_iter_tmp = gdb_block_iter->next; + xfree ((void *) gdb_block_iter->name); + xfree (gdb_block_iter); + } + } + /* The list of blocks in this symtab. These will eventually be converted to real blocks. */ - struct gdb_block *blocks; + struct gdb_block *blocks = nullptr; /* The number of blocks inserted. */ - int nblocks; + int nblocks = 0; /* A mapping between line numbers to PC. */ - struct linetable *linetable; + gdb::unique_xmalloc_ptr linetable; /* The source file for this symtab. */ - const char *file_name; + std::string file_name; }; /* Proxy object for building an object. */ @@ -511,14 +530,11 @@ jit_symtab_open_impl (struct gdb_symbol_callbacks *cb, struct gdb_object *object, const char *file_name) { - struct gdb_symtab *ret; - /* CB stays unused. See comment in jit_object_open_impl. */ - ret = XCNEW (struct gdb_symtab); - ret->file_name = file_name ? xstrdup (file_name) : xstrdup (""); - object->symtabs.push_back (ret); - return ret; + gdb_symtab *symtab = new gdb_symtab (file_name); + object->symtabs.push_back (symtab); + return symtab; } /* Returns true if the block corresponding to old should be placed @@ -603,7 +619,7 @@ jit_symtab_line_mapping_add_impl (struct gdb_symbol_callbacks *cb, alloc_len = sizeof (struct linetable) + (nlines - 1) * sizeof (struct linetable_entry); - stab->linetable = (struct linetable *) xmalloc (alloc_len); + stab->linetable.reset (XNEWVAR (struct linetable, alloc_len)); stab->linetable->nitems = nlines; for (i = 0; i < nlines; i++) { @@ -630,7 +646,7 @@ static void finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) { struct compunit_symtab *cust; - struct gdb_block *gdb_block_iter, *gdb_block_iter_tmp; + struct gdb_block *gdb_block_iter; struct block *block_iter; int actual_nblocks, i; size_t blockvector_size; @@ -639,8 +655,8 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks; - cust = allocate_compunit_symtab (objfile, stab->file_name); - allocate_symtab (cust, stab->file_name); + cust = allocate_compunit_symtab (objfile, stab->file_name.c_str ()); + allocate_symtab (cust, stab->file_name.c_str ()); add_compunit_symtab_to_objfile (cust); /* JIT compilers compile in memory. */ @@ -654,8 +670,8 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) + sizeof (struct linetable)); SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)) = (struct linetable *) obstack_alloc (&objfile->objfile_obstack, size); - memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)), stab->linetable, - size); + memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)), + stab->linetable.get (), size); } blockvector_size = (sizeof (struct blockvector) @@ -756,20 +772,7 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) } } - /* Free memory. */ - gdb_block_iter = stab->blocks; - - for (gdb_block_iter = stab->blocks, gdb_block_iter_tmp = gdb_block_iter->next; - gdb_block_iter; - gdb_block_iter = gdb_block_iter_tmp) - { - gdb_block_iter_tmp = gdb_block_iter->next; - xfree ((void *) gdb_block_iter->name); - xfree (gdb_block_iter); - } - xfree (stab->linetable); - xfree ((char *) stab->file_name); - xfree (stab); + delete stab; } /* Called when closing a gdb_objfile. Converts OBJ to a proper