From patchwork Sun Jan 12 20:17:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 37335 Received: (qmail 9262 invoked by alias); 12 Jan 2020 20:17:34 -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 9254 invoked by uid 89); 12 Jan 2020 20:17:34 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.5 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=fairly, sk:variabl, HContent-Transfer-Encoding:8bit 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; Sun, 12 Jan 2020 20:17:32 +0000 Received: from smtp.ebox.ca (smtp.ebox.ca [96.127.255.82]) by barracuda.ebox.ca with ESMTP id yOW4KJkXH2VDYtee (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 12 Jan 2020 15:17:30 -0500 (EST) Received: from simark.lan (unknown [192.222.164.54]) by smtp.ebox.ca (Postfix) with ESMTP id 1E08C441B21; Sun, 12 Jan 2020 15:17:30 -0500 (EST) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH] gdb: use std::vector instead of alloca in core_target::get_core_register_section Date: Sun, 12 Jan 2020 15:17:29 -0500 Message-Id: <20200112201729.489317-1-simon.marchi@polymtl.ca> MIME-Version: 1.0 X-IsSubscribed: yes As I was trying to compile gdb for an m68k host, I got this error: CXX corelow.o In file included from /binutils-gdb/gdb/gdbsupport/common-defs.h:120, from /binutils-gdb/gdb/defs.h:28, from /binutils-gdb/gdb/corelow.c:20: /binutils-gdb/gdb/corelow.c: In member function 'void core_target::get_core_register_section(regcache*, const regset*, const char*, int, int, const char*, bool)': /binutils-gdb/gdb/../include/libiberty.h:727:36: error: 'alloca' bound is unknown [-Werror=alloca-larger-than=] 727 | # define alloca(x) __builtin_alloca(x) | ~~~~~~~~~~~~~~~~^~~ /binutils-gdb/gdb/corelow.c:625:23: note: in expansion of macro 'alloca' 625 | contents = (char *) alloca (size); | ^~~~~~ We are using alloca to hold the contents of a the core register sections. These sections are typically fairly small, but there is no realy guarantee, so I think it would be more reasonable to just use dynamic allocation here. gdb/ChangeLog: * corelow.c (core_target::get_core_register_section): Use std::vector instead of alloca. --- gdb/corelow.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/gdb/corelow.c b/gdb/corelow.c index c53bf1df8fd8..e7efa652d62a 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -594,7 +594,6 @@ core_target::get_core_register_section (struct regcache *regcache, { struct bfd_section *section; bfd_size_type size; - char *contents; bool variable_size_section = (regset != NULL && regset->flags & REGSET_VARIABLE_SIZE); @@ -622,8 +621,8 @@ core_target::get_core_register_section (struct regcache *regcache, section_name.c_str ()); } - 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)) { warning (_("Couldn't read %s registers from `%s' section in core file."), @@ -633,12 +632,12 @@ core_target::get_core_register_section (struct regcache *regcache, if (regset != NULL) { - regset->supply_regset (regset, regcache, -1, contents, size); + regset->supply_regset (regset, regcache, -1, contents.data (), size); return; } gdb_assert (m_core_vec != nullptr); - m_core_vec->core_read_registers (regcache, contents, size, which, + m_core_vec->core_read_registers (regcache, contents.data (), size, which, (CORE_ADDR) bfd_section_vma (section)); }