From patchwork Mon Jan 13 20:02:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 37359 Received: (qmail 73875 invoked by alias); 13 Jan 2020 20:03:01 -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 73866 invoked by uid 89); 13 Jan 2020 20:03:01 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.1 spammy=6217 X-HELO: smtp.polymtl.ca Received: from smtp.polymtl.ca (HELO smtp.polymtl.ca) (132.207.4.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 13 Jan 2020 20:02:59 +0000 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 00DK2nv0029669 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 13 Jan 2020 15:02:54 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 00DK2nv0029669 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=polymtl.ca; s=default; t=1578945775; bh=1mpixcgZS8UlJyIAzNSLbZgTD5Rux9NnTCMHmPSZ8vc=; h=Subject:To:References:From:Date:In-Reply-To:From; b=P0ArGUYz73KRXNXXUsBXO1pufvVWPkZncAUYbBeiPhkbAjilcAIaoGR+Xc56uy7/k kwaN4ZY9+4o22A9HKaMHH2op9iwdsJDXawWZsHhqB3jxEv5GtPD9BhESD3O5iOKzAy uBoFFhO+7+6YLvYDU6V6XoO82z+VGLIfw3FzSaMg= Received: from [172.16.0.95] (192-222-181-218.qc.cable.ebox.net [192.222.181.218]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 61B3A1E4C2; Mon, 13 Jan 2020 15:02:49 -0500 (EST) Subject: Re: [PATCH] gdb: use std::vector instead of alloca in core_target::get_core_register_section To: Pedro Alves , gdb-patches@sourceware.org References: <20200112201729.489317-1-simon.marchi@polymtl.ca> From: Simon Marchi Message-ID: Date: Mon, 13 Jan 2020 15:02:48 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: X-IsSubscribed: yes On 2020-01-13 2:40 p.m., Pedro Alves wrote: > On 1/12/20 8:17 PM, Simon Marchi wrote: >> - contents = (char *) alloca (size); >> - if (! bfd_get_section_contents (core_bfd, section, contents, >> + std::vector contents (size); >> + if (! bfd_get_section_contents (core_bfd, section, contents.data (), >> (file_ptr) 0, size)) >> { > > gdb::byte_vector I used std::vector because the original code also used char, and m_core_vec->core_read_registers also accepts a char * (although I could/should have used gdb::char_vector anyway). However, gdb_byte probably makes more sense here. I would push the patch below as a fixup if it looks good to you. Simon From 6758886d9f1f0ddce518ffec5269cc440d2fe4f5 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 13 Jan 2020 14:57:38 -0500 Subject: [PATCH] gdb: use gdb::byte_vector instead of std::vector in core_target::get_core_register_section Since the data held by the `contents` variable is arbitrary binary data, it should have gdb_byte elements, not char elements. Also, using gdb::byte_vector is preferable, since it doesn't unnecessarily zero-initialize the values. Instead of adding a cast in the call to m_core_vec->core_read_registers, I have changed core_read_registers' argument to be a gdb_byte* instead of a char*. gdb/ChangeLog: * gdbcore.h (struct core_fns) : Change core_reg_sect type to gdb_byte *. * arm-nbsd-nat.c (fetch_elfcore_registers): Likewise. * cris-tdep.c (fetch_core_registers): Likewise. * corelow.c (core_target::get_core_register_section): Change type of `contents` to gdb::byte_vector. --- gdb/arm-nbsd-nat.c | 2 +- gdb/corelow.c | 2 +- gdb/cris-tdep.c | 2 +- gdb/gdbcore.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gdb/arm-nbsd-nat.c b/gdb/arm-nbsd-nat.c index 1d058a99ac1a..00f919194b95 100644 --- a/gdb/arm-nbsd-nat.c +++ b/gdb/arm-nbsd-nat.c @@ -397,7 +397,7 @@ arm_nbsd_nat_target::store_registers (struct regcache *regcache, int regno) static void fetch_elfcore_registers (struct regcache *regcache, - char *core_reg_sect, unsigned core_reg_size, + gdb_byte *core_reg_sect, unsigned core_reg_size, int which, CORE_ADDR ignore) { struct reg gregset; diff --git a/gdb/corelow.c b/gdb/corelow.c index 0418ec2506af..5cd058d5993d 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -621,7 +621,7 @@ core_target::get_core_register_section (struct regcache *regcache, section_name.c_str ()); } - std::vector contents (size); + gdb::byte_vector contents (size); if (!bfd_get_section_contents (core_bfd, section, contents.data (), (file_ptr) 0, size)) { diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c index 22b4db917ca0..6885d237f3a3 100644 --- a/gdb/cris-tdep.c +++ b/gdb/cris-tdep.c @@ -3793,7 +3793,7 @@ cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp) static void fetch_core_registers (struct regcache *regcache, - char *core_reg_sect, unsigned core_reg_size, + gdb_byte *core_reg_sect, unsigned core_reg_size, int which, CORE_ADDR reg_addr) { cris_elf_gregset_t gregset; diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h index 5b216e9c1c97..66e81dfe950f 100644 --- a/gdb/gdbcore.h +++ b/gdb/gdbcore.h @@ -213,7 +213,7 @@ struct core_fns address X is at location core_reg_sect+x+reg_addr. */ void (*core_read_registers) (struct regcache *regcache, - char *core_reg_sect, + gdb_byte *core_reg_sect, unsigned core_reg_size, int which, CORE_ADDR reg_addr);