From patchwork Sun Sep 10 17:12:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Durigan Junior X-Patchwork-Id: 22797 Received: (qmail 107031 invoked by alias); 10 Sep 2017 17:12:58 -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 106831 invoked by uid 89); 10 Sep 2017 17:12:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No 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, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 10 Sep 2017 17:12:55 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7543930EDB0; Sun, 10 Sep 2017 17:12:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 7543930EDB0 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=sergiodj@redhat.com Received: from psique.yyz.redhat.com (unused-10-15-17-193.yyz.redhat.com [10.15.17.193]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6499F5C269; Sun, 10 Sep 2017 17:12:52 +0000 (UTC) From: Sergio Durigan Junior To: GDB Patches Cc: Yao Qi , Sergio Durigan Junior Subject: [PATCH] Use std::vector on tdesc->reg_defs (gdbserver/tdesc.h) Date: Sun, 10 Sep 2017 13:12:49 -0400 Message-Id: <20170910171249.28470-1-sergiodj@redhat.com> X-IsSubscribed: yes This is a followup patch to the build breakage fix on AArch64. While doing the fix, I found it better to convert tdesc->reg_defs (on gdbserver/tdesc.h) from using VEC to using std::vector. This makes the code easier to read and maintain, and also is one more step towards the C++fication. Regtested on BuildBot. yyyy-mm-dd Sergio Durigan Junior * regcache.c (get_thread_regcache): Update code to use "std::vector" instead of "VEC" for "target_desc.reg_defs". (regcache_cpy): Likewise. (registers_to_string): Likewise. (registers_from_string): Likewise. (find_regno): Likewise. (supply_regblock): Likewise. (regcache_raw_read_unsigned): Likewise. * tdesc.c (init_target_desc): Likewise. (tdesc_create_reg): Likewise. * tdesc.h: Remove declaration of "tdesc_reg_p". Include . (struct target_desc) : Convert to "std::vector". (target_desc): Do not initialize "reg_defs". (~target_desc): Update code to use "std::vector" instead of "VEC" for "target_desc.reg_defs". (operator==): Likewise. --- gdb/gdbserver/regcache.c | 33 +++++++++++++++++---------------- gdb/gdbserver/tdesc.c | 14 ++++++-------- gdb/gdbserver/tdesc.h | 26 +++++++++----------------- 3 files changed, 32 insertions(+), 41 deletions(-) diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c index 43e78a5cf7..75480912fb 100644 --- a/gdb/gdbserver/regcache.c +++ b/gdb/gdbserver/regcache.c @@ -54,7 +54,7 @@ get_thread_regcache (struct thread_info *thread, int fetch) current_thread = thread; /* Invalidate all registers, to prevent stale left-overs. */ memset (regcache->register_status, REG_UNAVAILABLE, - VEC_length (tdesc_reg_p, regcache->tdesc->reg_defs)); + regcache->tdesc->reg_defs.size ()); fetch_inferior_registers (regcache, -1); current_thread = saved_thread; regcache->registers_valid = 1; @@ -145,9 +145,9 @@ init_register_cache (struct regcache *regcache, = (unsigned char *) xcalloc (1, tdesc->registers_size); regcache->registers_owned = 1; regcache->register_status - = (unsigned char *) xmalloc (VEC_length (tdesc_reg_p, tdesc->reg_defs)); + = (unsigned char *) xmalloc (tdesc->reg_defs.size ()); memset ((void *) regcache->register_status, REG_UNAVAILABLE, - VEC_length (tdesc_reg_p, tdesc->reg_defs)); + tdesc->reg_defs.size ()); #else gdb_assert_not_reached ("can't allocate memory from the heap"); #endif @@ -204,7 +204,7 @@ regcache_cpy (struct regcache *dst, struct regcache *src) #ifndef IN_PROCESS_AGENT if (dst->register_status != NULL && src->register_status != NULL) memcpy (dst->register_status, src->register_status, - VEC_length (tdesc_reg_p, src->tdesc->reg_defs)); + src->tdesc->reg_defs.size ()); #endif dst->registers_valid = src->registers_valid; } @@ -217,11 +217,11 @@ registers_to_string (struct regcache *regcache, char *buf) { unsigned char *registers = regcache->registers; const struct target_desc *tdesc = regcache->tdesc; - int i; - reg *reg; - for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++) + for (int i = 0; i < tdesc->reg_defs.size (); ++i) { + struct reg *reg = tdesc->reg_defs[i]; + if (regcache->register_status[i] == REG_VALID) { bin2hex (registers, buf, register_size (tdesc, i)); @@ -257,12 +257,13 @@ registers_from_string (struct regcache *regcache, char *buf) int find_regno (const struct target_desc *tdesc, const char *name) { - int i; - reg *reg; + for (int i = 0; i < tdesc->reg_defs.size (); ++i) + { + struct reg *reg = tdesc->reg_defs[i]; - for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++) - if (strcmp (name, reg->name) == 0) - return i; + if (strcmp (name, reg->name) == 0) + return i; + } internal_error (__FILE__, __LINE__, "Unknown register %s requested", name); } @@ -272,7 +273,7 @@ find_regno (const struct target_desc *tdesc, const char *name) struct reg * find_register_by_number (const struct target_desc *tdesc, int n) { - return VEC_index (tdesc_reg_p, tdesc->reg_defs, n); + return tdesc->reg_defs[n]; } #ifndef IN_PROCESS_AGENT @@ -388,7 +389,7 @@ supply_regblock (struct regcache *regcache, const void *buf) { int i; - for (i = 0; i < VEC_length (tdesc_reg_p, tdesc->reg_defs); i++) + for (i = 0; i < tdesc->reg_defs.size (); i++) regcache->register_status[i] = REG_VALID; } #endif @@ -402,7 +403,7 @@ supply_regblock (struct regcache *regcache, const void *buf) { int i; - for (i = 0; i < VEC_length (tdesc_reg_p, tdesc->reg_defs); i++) + for (i = 0; i < tdesc->reg_defs.size (); i++) regcache->register_status[i] = REG_UNAVAILABLE; } #endif @@ -435,7 +436,7 @@ regcache_raw_read_unsigned (struct regcache *regcache, int regnum, gdb_assert (regcache != NULL); gdb_assert (regnum >= 0 - && regnum < VEC_length (tdesc_reg_p, regcache->tdesc->reg_defs)); + && regnum < regcache->tdesc->reg_defs.size ()); size = register_size (regcache->tdesc, regnum); diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c index 53f36d5564..63d6467d56 100644 --- a/gdb/gdbserver/tdesc.c +++ b/gdb/gdbserver/tdesc.c @@ -22,11 +22,9 @@ void init_target_desc (struct target_desc *tdesc) { - int offset, i; - struct reg *reg; + int offset = 0; - offset = 0; - for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++) + for (reg *reg : tdesc->reg_defs) { reg->offset = offset; offset += reg->size; @@ -193,23 +191,23 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name, { struct target_desc *tdesc = (struct target_desc *) feature; - while (VEC_length (tdesc_reg_p, tdesc->reg_defs) < regnum) + while (tdesc->reg_defs.size () < regnum) { struct reg *reg = XCNEW (struct reg); reg->name = ""; reg->size = 0; - VEC_safe_push (tdesc_reg_p, tdesc->reg_defs, reg); + tdesc->reg_defs.push_back (reg); } gdb_assert (regnum == 0 - || regnum == VEC_length (tdesc_reg_p, tdesc->reg_defs)); + || regnum == tdesc->reg_defs.size ()); struct reg *reg = XCNEW (struct reg); reg->name = name; reg->size = bitsize; - VEC_safe_push (tdesc_reg_p, tdesc->reg_defs, reg); + tdesc->reg_defs.push_back (reg); } /* See arch/tdesc.h. */ diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h index 71249e4eda..ec4d6b38dc 100644 --- a/gdb/gdbserver/tdesc.h +++ b/gdb/gdbserver/tdesc.h @@ -22,9 +22,7 @@ #include "arch/tdesc.h" #include "regdef.h" - -typedef struct reg *tdesc_reg_p; -DEF_VEC_P(tdesc_reg_p); +#include struct tdesc_feature {}; @@ -36,7 +34,7 @@ struct target_desc : tdesc_feature { /* A vector of elements of register definitions that describe the inferior's register set. */ - VEC(tdesc_reg_p) *reg_defs; + std::vector reg_defs; /* The register cache size, in bytes. */ int registers_size; @@ -66,17 +64,16 @@ struct target_desc : tdesc_feature public: target_desc () - : reg_defs (NULL), registers_size (0) + : registers_size (0) {} ~target_desc () { int i; - struct reg *reg; - for (i = 0; VEC_iterate (tdesc_reg_p, reg_defs, i, reg); i++) + for (reg *reg : reg_defs) xfree (reg); - VEC_free (tdesc_reg_p, reg_defs); + reg_defs.clear (); xfree ((char *) arch); xfree ((char *) osabi); @@ -90,18 +87,13 @@ public: bool operator== (const target_desc &other) const { - if (VEC_length (tdesc_reg_p, reg_defs) - != VEC_length (tdesc_reg_p, other.reg_defs)) + if (reg_defs.size () != other.reg_defs.size ()) return false; - struct reg *reg; - - for (int ix = 0; - VEC_iterate (tdesc_reg_p, reg_defs, ix, reg); - ix++) + for (int i = 0; i < reg_defs.size (); ++i) { - struct reg *reg2 - = VEC_index (tdesc_reg_p, other.reg_defs, ix); + struct reg *reg = reg_defs[i]; + struct reg *reg2 = other.reg_defs[i]; if (reg != reg2 && *reg != *reg2) return false;