From patchwork Tue Oct 31 01:41:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 23984 Received: (qmail 18477 invoked by alias); 31 Oct 2017 01:42:29 -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 18440 invoked by uid 89); 31 Oct 2017 01:42:29 -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, SPF_PASS autolearn=ham version=3.3.2 spammy=3199, 1518, 3077 X-HELO: sessmg23.ericsson.net Received: from sessmg23.ericsson.net (HELO sessmg23.ericsson.net) (193.180.251.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 31 Oct 2017 01:42:27 +0000 Received: from ESESSHC002.ericsson.se (Unknown_Domain [153.88.183.24]) by sessmg23.ericsson.net (Symantec Mail Security) with SMTP id CC.83.09869.EF4D7F95; Tue, 31 Oct 2017 02:42:22 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.24) with Microsoft SMTP Server (TLS) id 14.3.352.0; Tue, 31 Oct 2017 02:42:22 +0100 Received: from elxacz23q12.localdomain (70.81.137.44) by DBXPR07MB319.eurprd07.prod.outlook.com (2a01:111:e400:941d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.197.4; Tue, 31 Oct 2017 01:42:20 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 05/10] Make tdesc_feature::registers an std::vector Date: Mon, 30 Oct 2017 21:41:55 -0400 Message-ID: <1509414120-14659-6-git-send-email-simon.marchi@ericsson.com> In-Reply-To: <1509414120-14659-1-git-send-email-simon.marchi@ericsson.com> References: <1509414120-14659-1-git-send-email-simon.marchi@ericsson.com> MIME-Version: 1.0 X-ClientProxiedBy: BN6PR1101CA0023.namprd11.prod.outlook.com (2603:10b6:405:4a::33) To DBXPR07MB319.eurprd07.prod.outlook.com (2a01:111:e400:941d::13) X-MS-Office365-Filtering-Correlation-Id: 84d03c1d-b516-409b-de8c-08d52000a0a9 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(2017052603238); SRVR:DBXPR07MB319; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 3:alVA3EVCdWWp78OIVTMVKNQsJ37jtYUwqg9BDVNMJhZgmDcFmKJg73CTLjDjyUB1OfPFQm1JH/BQS1TMlb6J0jI9dCYfV90y9rp891/bx15a2SPEGwaOm+9S+84BgiRWBal2tIy9GhkccRpuxULE9SVcAg+TxsJm80kluAwz0gtbK2TsjNpga9wJ1JgwMRnj96a8slgx2a3G3lFFTj3aynZ7YqKsuCFQxFLQjAbT35gdvY6FJ4EUGVBzMLNsfBda; 25:ADu2dcju3BqdqBPU/VZpHGIicaqxv4ySOOfyyQe9HV2MYLEcsdXmo2YUwQ/I4zTp5bhnpvlN0GjreLFCr8fSyuXIEY0ZIBZ8tUPLwM9rxbYpEud9fa/3wpEStz6xrJvHIv86JLeglCX80szr3KfHkuxZLaZKjTfNLmrCuSfZu4Ci5CBitSRC2qvKRTSuclPyNMTbXyqH4902D5C6EtRZqd0JZLaCA5eCzYt3kXbtbL/rSpE07u31R3QjrhEPUgwG07hizeVaGY4dniEWuZQO/xtAl3iygZ6V8VAmCWHtLDFNGtPpFB9VjU6uUs0OF5ePL/6lN0Yj77NNm90mp9GUIETLycfsmLrLdfqZHBTK4wI=; 31:0xe76vx3EFesPN8fzWNeEMpZLqnOQjK2OejcOuuhuV8I0q5RzNy+PDATdNCamnt9DmKJaOZvUGwmC4SI1u7BrR6k0aoSXOdpTaHWvAxkYz3n09p/JqYbTcBukDGJo4Mel0+FDjqSGMIWnNN7nLGvtBf0iJgbkRrASjfnXOBMecmQz2ZCj9glyWaeguhl5nUosS3ah9XDGD75EBjna5DApPTl4cR+GU4tdk8N2n3/PeM= X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DBXPR07MB319: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 20:OS634icsZ2LGYoNQi6hrrePUX5EsFhUF1r1F8eh8FisLoF+/4FI5lJ0dgKpfA+CHSRBfg+ljv9/mCHBtfF1zdP3chi+AFSDqr08vrU7xFxHlegTvHdPy3pGmsGXAv5R3o7cdkxQAFVLTTyoqBmkB3E3uQA/R1P0P2JIy1zutS+4pP4DxNrqkJ8qZNYSZixUzazGmyYpA7uhmXx7Nf2v8jZQSgGm7qf44pybMfFTG/9hiCrjjJh3z7eS6c8Z+v6Op/tK9waoFu4KbIyxD6dir+exxl3/y50CEhyCbcRYnmkiVt8XYMBN+sJdeZpDyPNRWFdSSnwKmksE7PmGRP3g81PXpP+JiqQ8i1tptsqtg2uFn3P4BxVvaqhliuL2mMBloPB1de0KkRJs3i/DF9cRTvSlHncx+urwTzklJfyD9MCQ1oDAN/Ej56GuElLs+2m1wKB6kBzY+fNfolUkOQbZL6E7it3pOteQWL1J+Yo+sOPPZXxnqbvCnDwhreIO11PqT; 4:DQbEbWNGHQS0UIYGXuCI4rh/8WtITRLHtdElrldr9OwXmsav1+MCiTcx+5C0QC7O8mA/VggxbU5aeQGBu+ue2HxcweksF6Xlp7eIc4e5sdaMYJ7rLSVn2Dw9ij2ct4brLreWTrDfB40fzDcHP0jIIFCLpWi8K90pNq42uVtd2x9XaTmRFdldMKIaKBu/fjGN7fc0eu3veHhYaZyQPR0NXDxfNd4hLvdmwZqvKyZEebE/tY4XOyGuMd1m/qk0hKCAGu0FroIcekF/6VKISRz/TA== X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3231020)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DBXPR07MB319; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DBXPR07MB319; X-Forefront-PRVS: 04772EA191 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(39860400002)(346002)(189002)(199003)(54534003)(6916009)(16526018)(7736002)(2906002)(6666003)(47776003)(68736007)(4326008)(3846002)(478600001)(305945005)(66066001)(106356001)(36756003)(105586002)(53936002)(25786009)(2950100002)(6512007)(50226002)(2361001)(6116002)(2351001)(5003940100001)(16586007)(76176999)(33646002)(107886003)(101416001)(5660300001)(6506006)(6486002)(316002)(50986999)(81156014)(81166006)(8936002)(8676002)(50466002)(97736004)(48376002)(86362001)(189998001); DIR:OUT; SFP:1101; SCL:1; SRVR:DBXPR07MB319; H:elxacz23q12.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DBXPR07MB319; 23:thL7S+kKcketBFqlNSumxgIj/ftsPVxKWBU3vUijDk?= =?us-ascii?Q?d+9r3FnqhlAz0kvJ6yFyhoTdeGoJTtsWyEIoVMggWxt3bce+6mJGuwXG7U+T?= =?us-ascii?Q?iEaDxOHtorzeQ/hDrmuhiFfOYbzl4axG1N5Ca+MIBOFgx3ZGP4m1OWOpbELQ?= =?us-ascii?Q?YUuevtbovsSZ+QSB2kLzYGcs+93ViD0/xdmCietoved0o0J8VBEIm9kYaJ1Q?= =?us-ascii?Q?1OgAVShsUwpORQKsfBVDLMwOl6dT/RdEqRaajkKNFZ5J4ZTRswaljVrJpdle?= =?us-ascii?Q?KPdsL02oFYH8WRc5tKENSV0Gz3LyhM2DDWhz/5fWAt941QHVkqMSllFIGCWl?= =?us-ascii?Q?Ez8hqSeMMHChp22nqnExlqs4NrBL7FTI7kOcJ6OnOUySchu/XrgKzHGuxJo0?= =?us-ascii?Q?n2JNMAuK9keDfkcStTUMaYjs44it/Jq/O3VEK9Xal1BqCcYGpHrdjoCr9xK3?= =?us-ascii?Q?zkM2Hr/CQ5L/8Go49hi2MSx74x1+R0mZlFfIUnUsku5dnA3W/B6vhtkv/9S5?= =?us-ascii?Q?1Vud4sY6X4J9PwVZIqRPtKCgXB6KUXnEfQIK73Y2z7Vpek5J9GUCUptaln9B?= =?us-ascii?Q?Fi/GNvbo9MWhPvKPHSRp1dTg8n6+MrLz2wy7zxmErE8jB/puYrBlCptQ6Yb9?= =?us-ascii?Q?ggpbEvJHGeNmZzFTvDVDS1y2puj5DfIhRuUoyNeJ+xJVs5KQqXUKwYLFOwJD?= =?us-ascii?Q?o0duTRjW9D5YLq4WS1NH1da1vIg/HxjDs80lmjtg7eD+mbbSH5yPA76ymHkV?= =?us-ascii?Q?jvsGHmf0PQziQ2pMvYvqhvXCxOdfowqNSEZ2rzdkLI/+g7MVn4LfHCQibysI?= =?us-ascii?Q?i31fOkHLIz0r5D2AWiqWDdwNfIiv82XygkkY5lh+pI0c6dHpWawDr0wzxk+k?= =?us-ascii?Q?0s1/Y06/lj6jpUk/tJ7lUR53oWSz1SToKlCLDjejqLxUPr4UmYmGz1dCjcnl?= =?us-ascii?Q?RrFAKJd6RrMITqdg4cem/suhnbXj8Tyu+++lmguObyNT7fdnD0ciPTrmUoOO?= =?us-ascii?Q?51D67lsNFPskMscV9NpXPwhUtFAMNNCBlwqQfmaCqHI0hNNvnC2zcv2VCif8?= =?us-ascii?Q?JUZlv14ZRQ279Vh8NU92A0DNzMBJDXRavu2oA6hY4R3oaEtsmgfDDh31XCu/?= =?us-ascii?Q?4In1n+zoCCjqcF4+zMJLl7wJ/LJ4O1a86ZufKOszqodL6XJZ7lJw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 6:5A0XBiysHujmNjYLtTIY8s3KZSPnGAQ/vU1fXFL7cumwZp+XfI9UytfSFf3trojqntIX/pIBbdrmBJTBiVu/5VcWLwEhr+3E0bOc+f7DLoXIUtfYyg/hGryGQp1Ha1rrjZIxbPIcDHtvme1ynX1YhvB6WtsgchpjU+aqewR0z97Xvc4UKVXK+lws2EBpNo4fcDpRrZ+sV2CMkkqCtKQl12lPA9Kj23+UMMaFAowP2+p8uAlZGFl81Kn2b1qr3ROMeI35cCwl5muki9KYmERRihr3kYfuK4Jy9XFOTpUbxXzaY4DId4wlUbwn03csDqU3x2b7lvRNFeXkNUx0BVj9eVVNHu7nyGlp11nHmjN82Zo=; 5:LsNFCZdgKm+xf22SHAT8i6uxbR7s9eZ0Bv2Ogg9w4sD1qz3b9zsSqjE04AM/p3wRccMdhK++5Joy20TBNLKH/4cvyOcmAnJ4sGIktkUSLn6nl5WQf5BBR9HurXc7TNzDEdd86NKlkFdz+HDBV3Qgf7OQ8ctPTvVMUaDxEM1a9l0=; 24:sSblM+t8ASgmEXJYnzbzxlE7SgJEYLx21y/72aRU020T9qIa1LR9DNGe4hwSwwXvM0M4D5KfggND42vOw7j+VfKj3/YQUI9B/xFH/sRtz1A=; 7:+q9VaM3GuZrRZs3bDGhkM0hR4LxauufGTkCgW6lNL1wqfvr+rrJBrSclHKGYYOvXMb9TsyupN8MPp+VRdRNFO2n2IWN4FedP7DuUA85gRYdtRJJu7lnZFWryIWdJ0Rh1tFkI03PCqDMLDHa7A/BCMw+1Y3qFTet24svrC2OcKjkJJO5TSAdr2XtCLlzpxqYvENPs08Re++SHS6v1ZXhRlgtrmzsAjTWxlCoC0WlbwxLl8JMQ6k0UXH36FiTpcMK9 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2017 01:42:20.5525 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 84d03c1d-b516-409b-de8c-08d52000a0a9 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBXPR07MB319 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes This patch makes tdesc_feature::registers an std::vector of unique_ptr to tdesc_reg. This way, we don't have to manually free the tdesc_reg objects and the vector in the tdesc_feature destructor. gdb/ChangeLog: * target-descriptions.c (tdesc_reg_p): Remove typedef. (DEF_VEC_P (tdesc_reg_p)): Remove. (struct tdesc_feature) : Change type to std::vector. <~tdesc_feature>: Don't manually free registers. : Adjust. : Adjust. (tdesc_has_registers): Adjust. (tdesc_find_register_early): Adjust. (tdesc_use_registers): Adjust. (tdesc_create_reg): Adjust. --- gdb/target-descriptions.c | 69 +++++++++++++++-------------------------------- 1 file changed, 22 insertions(+), 47 deletions(-) diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 410575d..4293996 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -73,7 +73,7 @@ struct property /* An individual register from a target description. */ -typedef struct tdesc_reg : tdesc_element +struct tdesc_reg : tdesc_element { tdesc_reg (struct tdesc_feature *feature, const char *name_, int regnum, int save_restore_, const char *group_, @@ -151,8 +151,9 @@ typedef struct tdesc_reg : tdesc_element { return !(*this == other); } -} *tdesc_reg_p; -DEF_VEC_P(tdesc_reg_p); +}; + +typedef std::unique_ptr tdesc_reg_up; /* A named type from a target description. */ @@ -287,14 +288,9 @@ struct tdesc_feature : tdesc_element virtual ~tdesc_feature () { - struct tdesc_reg *reg; struct tdesc_type *type; int ix; - for (ix = 0; VEC_iterate (tdesc_reg_p, registers, ix, reg); ix++) - delete reg; - VEC_free (tdesc_reg_p, registers); - for (ix = 0; VEC_iterate (tdesc_type_p, types, ix, type); ix++) delete type; VEC_free (tdesc_type_p, types); @@ -307,7 +303,7 @@ struct tdesc_feature : tdesc_element std::string name; /* The registers associated with this feature. */ - VEC(tdesc_reg_p) *registers = NULL; + std::vector> registers; /* The types associated with this feature. */ VEC(tdesc_type_p) *types = NULL; @@ -323,14 +319,9 @@ struct tdesc_feature : tdesc_element ix++) type->accept (v); - struct tdesc_reg *reg; - - for (int ix = 0; - VEC_iterate (tdesc_reg_p, registers, ix, reg); - ix++) + for (const tdesc_reg_up ® : registers) reg->accept (v); - v.visit_post (this); } @@ -339,20 +330,15 @@ struct tdesc_feature : tdesc_element if (name != other.name) return false; - if (VEC_length (tdesc_reg_p, registers) - != VEC_length (tdesc_reg_p, other.registers)) + if (registers.size () != other.registers.size ()) return false; - struct tdesc_reg *reg; - - for (int ix = 0; - VEC_iterate (tdesc_reg_p, registers, ix, reg); - ix++) + for (int ix = 0; ix < registers.size (); ix++) { - tdesc_reg *reg2 - = VEC_index (tdesc_reg_p, other.registers, ix); + const tdesc_reg_up ®1 = registers[ix]; + const tdesc_reg_up ®2 = other.registers[ix]; - if (reg != reg2 && *reg != *reg2) + if (reg1 != reg2 && *reg1 != *reg2) return false; } @@ -725,7 +711,7 @@ tdesc_has_registers (const struct target_desc *target_desc) return 0; for (const tdesc_feature_up &feature : target_desc->features) - if (! VEC_empty (tdesc_reg_p, feature->registers)) + if (!feature->registers.empty ()) return 1; return 0; @@ -1104,14 +1090,9 @@ static struct tdesc_reg * tdesc_find_register_early (const struct tdesc_feature *feature, const char *name) { - int ixr; - struct tdesc_reg *reg; - - for (ixr = 0; - VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); - ixr++) + for (const tdesc_reg_up ® : feature->registers) if (strcasecmp (reg->name, name) == 0) - return reg; + return reg.get (); return NULL; } @@ -1436,8 +1417,6 @@ tdesc_use_registers (struct gdbarch *gdbarch, struct tdesc_arch_data *early_data) { int num_regs = gdbarch_num_regs (gdbarch); - int ixr; - struct tdesc_reg *reg; struct tdesc_arch_data *data; struct tdesc_arch_reg *arch_reg, new_arch_reg = { 0 }; htab_t reg_hash; @@ -1457,18 +1436,16 @@ tdesc_use_registers (struct gdbarch *gdbarch, the initial size is arbitrary. */ reg_hash = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL); for (const tdesc_feature_up &feature : target_desc->features) - for (ixr = 0; - VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); - ixr++) + for (const tdesc_reg_up ® : feature->registers) { - void **slot = htab_find_slot (reg_hash, reg, INSERT); + void **slot = htab_find_slot (reg_hash, reg.get (), INSERT); - *slot = reg; + *slot = reg.get (); } /* Remove any registers which were assigned numbers by the architecture. */ - for (ixr = 0; + for (int ixr = 0; VEC_iterate (tdesc_arch_reg, data->arch_regs, ixr, arch_reg); ixr++) if (arch_reg->reg) @@ -1483,12 +1460,10 @@ tdesc_use_registers (struct gdbarch *gdbarch, while (VEC_length (tdesc_arch_reg, data->arch_regs) < num_regs) VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg); for (const tdesc_feature_up &feature : target_desc->features) - for (ixr = 0; - VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); - ixr++) - if (htab_find (reg_hash, reg) != NULL) + for (const tdesc_reg_up ® : feature->registers) + if (htab_find (reg_hash, reg.get ()) != NULL) { - new_arch_reg.reg = reg; + new_arch_reg.reg = reg.get (); VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg); num_regs++; } @@ -1515,7 +1490,7 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name, tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore, group, bitsize, type); - VEC_safe_push (tdesc_reg_p, feature->registers, reg); + feature->registers.emplace_back (reg); } /* See arch/tdesc.h. */