From patchwork Tue Oct 31 01:41:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 23982 Received: (qmail 18205 invoked by alias); 31 Oct 2017 01:42:27 -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 18114 invoked by uid 89); 31 Oct 2017 01:42:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.0 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= X-HELO: sessmg22.ericsson.net Received: from sessmg22.ericsson.net (HELO sessmg22.ericsson.net) (193.180.251.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 31 Oct 2017 01:42:24 +0000 Received: from ESESSHC014.ericsson.se (Unknown_Domain [153.88.183.60]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id C5.70.26775.DF4D7F95; Tue, 31 Oct 2017 02:42:21 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.60) with Microsoft SMTP Server (TLS) id 14.3.352.0; Tue, 31 Oct 2017 02:42:20 +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:18 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 03/10] Make target_desc::features an std::vector Date: Mon, 30 Oct 2017 21:41:53 -0400 Message-ID: <1509414120-14659-4-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: 69a31ecd-226b-4bab-7387-08d520009f9c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(2017052603238); SRVR:DBXPR07MB319; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 3:U0qyKNjx+5Zeil8bQexlkvW6NZv7MttA0DsyATmKqEPQXfWZ2oS54KZ+Igy3ZT62F1EAXGa4LJeyaH24JXjaIyk45wQu120bw8suyKKHtR1yoz9I331nlVZgXAY4lpqWRnLQkizIAq28LZ29yuNXdAB6VFyrsdkCN8vqnuVxF4saa0SAGZKI3Qfe25kCagY4O6mSJkCa5SWTJFJQ4fAXYKl7JxE7Gn+3MBtQA0Nvr3B+d2rg05nVpCf7nwTIUY/3; 25:r2BE8Ku6Z6CPzHDfOK/X+/Ktp0gH39afJuKUyXMWSU5RRNR+wNfitL0JzCP0sGMcoStcI8f2PC6GWZSZMYFop1G0dOWPxzclnAmasr1tg+/Lhf0fLW5L7EZ49ajgvKmcQknzz58GcrbqHILHFPgoYiu4toJJ//0Sss+3ubRF6uEvrA/haPl243x5R0LqX55wYiDVrY+kzgJpUu7os8rS6bnLz+34wXb6+qmlcLC2GB2gOXJ2vpGio+nFJpQ8/UQZd/rQq8a7LFDu38ZE94nnCoH81qzPHVGCmUOeHJpPr0EtHS7c/F4xE/qUFKtmzZwcubF0Jtg8tph7wZE2Z/l81C6FOf2ow2P4OYcZxPtGqiI=; 31:H8toviKZ7mPWhBzlKLm7eCffd/s5a6aBacA68neBEBuQple77JCaDDcT7AkM3NJNB0b5ZPP0n07kk36HEA6fhQIsXBPC7p0UNqY7HzFdCCgh2HiWtM/lxPwF0cgxfFEMOJuk5G33Zsca7H/+oj46qnU4G7ZuOShl/0Ih2JbFAk+MjW7XLuLfXa3kE61+LVErjOt+LMsyBu0iE5AXjH1daJlkqPWg3ZDsX2NLBhXPUww= 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:UvPl1yh1mZb+ze4TCI7NZ+hruUfSBXrWwCe5cw5hXXCJUKamqxUmfgfN0X3rW5ZJRaUj5Jrjgz+bWWIsCNDhtAQQ9Ekyj2/R83Uos3cnpGI2AlkP+mYnu6xX7ysvJJLg3QtuiilhQbqw6mE/yMsOXD2TI/zc+rdtbkS35e6xYAx+0hdcwfTOIZxPYMr2Vs7NtdwQCu8U9M6P59V4DHxn+dceyjZR7AhmF5WpIWguLUk20MswQG3hTzmzOnTzNzBRjpCkR9QBTKAIMF84CFCL56EUyjHnkAtF/PgABKm83AGHZTgEY2l5WsNl1X742NU9mAp4S0XSrtTy1D+Z/1L800jam1XmFf8huJCdfVqAwGisE51/ssWp4ePp7vtu1CxZuJWtGTYN6Tmc9wlQ64OIHF/AGciPMbK6wedNhQ4sPMKF5H69WaBjX1xDCQ7H37tJvJzdkvxTZMwRl2DfBhp0x2BHtdkJjm9zbKOOQvGQLn2XcAVUrwSqOGDcZdabXMQ3; 4:Z1S47Q8rbYVtEOBcKS4Nzp5bOW+4RZlj7n8QpxciSdHni5qIK1z/O1U+ROm4G27zFwV4Ttuw9Hv8n1OpFVmio90Y+dk/7/fmpt6LuonSOgLdaqtYBOt/A73Adq4PKCuD858AwZSBlyicCqxtd0HQhMBt6pi+hNJJlwn8vaSQBjah14UYJ6gTOe+gP1R0VS1TbDUam9tCzwswk2gfXzAEGe2fO1F8ePqX8xtodkLSM/jzgLWULgW+Yrhl8nwXDGSXp/Tn9Mgh55VTfd1XtHRWlxAoe0lSSdX4gKRPm8WMjMViyAaM3P6Pea6ZT2LUUkeMKNBjbW2xtg3FCX2Rigs6VA== X-Exchange-Antispam-Report-Test: UriScan:(131327999870524)(788757137089); 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)(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:liFde0Iuoe4nb97U3W5ePCVSmaLK5g+hAdSKCZeenl?= =?us-ascii?Q?DmTwd/DCt25SVX8jXzSHAn7fdk3zICUpRySHun9PqbikNCrt7EnPJK9Wr97O?= =?us-ascii?Q?Li7nAn21SZmB2kJdJk1KykzBjms3IU2oGcBAJU87/WU8niDkT2Xb65IiKwB/?= =?us-ascii?Q?wflL6BhtJ4iSonsO+omqljL/grn1O4iTtLWld0JkbKolMMWfURd5DyThNMeD?= =?us-ascii?Q?dbDdD2/T09TAc7ASi1etaXg/bqHpXG9AkmQ0b4aDkEpQAWawtQ4v9RIF6tXR?= =?us-ascii?Q?Ed75ClD54c3Nim+iyqmJEBu5X6mo9qB/WACYDnp8EwXmhmQ7BM6Ye9BX3c7D?= =?us-ascii?Q?vnS8v8IJZpF3dInKXgpltRrSRQnSot+/vQrXCNIvt8tUFOn2BNSgd8Oksquu?= =?us-ascii?Q?qUXqKCfiL5OpfOS1mEjxWz0cyQ4KKhDx68zkiSfHRLZ0LNOxLo3Jrzuyzs5p?= =?us-ascii?Q?nR2/pCDxFItVPsuo6l8n4S4tiAqG6KAhXpxTjTCwa5zOT9RFiDblBRfdxEGu?= =?us-ascii?Q?GQbDtIAZw5bqd6bISrG70ki7r/WRVsMoagvGWGygHjqmCHl/4qt0r5tz0Qci?= =?us-ascii?Q?i3ZnuVN4BO+b6ygyAVTmI/1/OdZc7ip0cWF8XjiUGkLQSLkUgsoP/SpIyCFc?= =?us-ascii?Q?+lIcKV4Kh6m71vwS4XpmQgJKH7NKI4VB+rrkruDwURiy5eH1LI+XWRqDqp0E?= =?us-ascii?Q?SOHl6d6mLVXOTrX8WbBfhO5nXdqCBTCmEahIKylQ40rsNo6Xkr+2Hn7D3vx6?= =?us-ascii?Q?/RlgX4slrs4egLS5R3Nnf6rn284kXTPIVbyg4uyeFolR+pEDTYjl0OtnaMiF?= =?us-ascii?Q?41Eg1vYWgkKthUPdM3L2lGtMzoZTDT1gPFiA0jyHiaCrRPAyRyDkuZZ5Bewf?= =?us-ascii?Q?t1/fY/1/BoVVmXhWwVLUyIH9qNG5lm5Pp4xCyDPqgyzvTbSR9wz5KbXo+Qur?= =?us-ascii?Q?SP4SO5rtf9ViKuwXqow9Y0tgHAfNLSMs2lJALUr1ovwhSqL8ZNPU3FcdL3wN?= =?us-ascii?Q?pKFMFk0pXnW3UCW//KmqlOCausw7WOLAkFGqvtkKYP4sCiLKTAWoc1z5391D?= =?us-ascii?Q?/0XrOiCGOqmI/FZu1VfKTYkVhcZ7b+fIaFZW2M4l0O3HONMWByVo5bjqpQPI?= =?us-ascii?Q?xlUJEiPe5eBLGJxEkmiCl152hXgflM?= X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 6:6YnxaZ/K1LVNcixHUCLLhMaasrty8SLxpbKBDdYkYrrs9rjHwvGWfWKVuFwpOS7smUds7HEczdcHyY5Mu8KO325XyUv3/I5OjtfwM/T9dq7dpgYnL79t3VUKiiP3Zw1O7DorgN7TaUrbLXlPsjrt22gGkY77JKV3L7hw91pRft0EebwDplbFeUzHmPQqOXg0WTaLi1Ae0Zk2KrqeM27kJnBwi3cwshLx6jEsBzOiwmcgrnZMW44LdhFRR1y3+ab0tCigxEAlXntIlS42AF9xKNwNqDebU/AEDl1hq2ze8akOu3JgAwMenm5ZmIk++wp4m0hbqpCg5ZwnLaUlBflpYdysUUiaMjq7OvBU6zxtVWE=; 5:I5LvUemJLrVRTbojAa176mKzfW9NA0U4CYY0HdmLlGDZCuH+vlr7+xkMSMfl1z4KiMoK85LAhus8iX/c1e9a1NPIGBq6mvW9Ted46DrjvqwomSnPb6OZscobyalQnxQYio8fAP443Ws9xCmd3HKYR0uJ02i5VS9Opj3ZGpvvJbg=; 24:bsfyMl0YJ0oMWEIFcOoydXq4MN5icvJ3HRX8Ny8eegClkb9HLBLswSNe/AjQ308DBIqGWaSv7JvJNKOty2axN/ao4A7UlOE81Nr3bHYrt6w=; 7:7xuw3LvqEUakSWMmfzPVXCUVd1EzZntXYVa4zt77ZVguI9qJHyt3P3xt0EtL+t8hKNVbPL4viKZD6u6qQarUbg0nmcfro9whCsg5uT864VrnyNsVpUY8su5fN239+2mClkLtDr2w1L75lRyaKCfjjb+6n2ZJANxHoQFgaIqBmC/S6ypfQOa3tiR8w8SvFqzWAia7dyVujM2BTJZCMg2jHVZ7gd5hR5I+2Gm89Lzyxm5ffzFlZaKoi9YOoTuXNCtU SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2017 01:42:18.7712 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 69a31ecd-226b-4bab-7387-08d520009f9c 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 From: Simon Marchi This patch makes target_desc to be a vector of unique_ptr to tdesc_feature objects. This way, we don't have to manually free the features and the vector in the target_desc destructor. gdb/ChangeLog: * target-descriptions.c (tdesc_feature_p): Remove typedef. (DEF_VEC_P (tdesc_feature_p)): Remove. (struct target_desc) : Change type to std::vector. <~target_desc>: Replace with default implementation. : Adjust. : Adjust. (tdesc_has_registers): Adjust. (tdesc_find_feature): Adjust. (tdesc_use_registers): Adjust. (tdesc_create_feature): Adjust. --- gdb/target-descriptions.c | 72 +++++++++++++---------------------------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 309480c..eea5115 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -279,7 +279,7 @@ DEF_VEC_P(tdesc_type_p); /* A feature from a target description. Each feature is a collection of other elements, e.g. registers and types. */ -typedef struct tdesc_feature : tdesc_element +struct tdesc_feature : tdesc_element { tdesc_feature (const char *name_) : name (xstrdup (name_)) @@ -383,8 +383,9 @@ typedef struct tdesc_feature : tdesc_element return !(*this == other); } -} *tdesc_feature_p; -DEF_VEC_P(tdesc_feature_p); +}; + +typedef std::unique_ptr tdesc_feature_up; /* A target description. */ @@ -393,17 +394,7 @@ struct target_desc : tdesc_element target_desc () {} - virtual ~target_desc () - { - struct tdesc_feature *feature; - int ix; - - for (ix = 0; - VEC_iterate (tdesc_feature_p, features, ix, feature); - ix++) - delete feature; - VEC_free (tdesc_feature_p, features); - } + virtual ~target_desc () = default; target_desc (const target_desc &) = delete; void operator= (const target_desc &) = delete; @@ -422,17 +413,13 @@ struct target_desc : tdesc_element std::vector properties; /* The features associated with this target. */ - VEC(tdesc_feature_p) *features = NULL; + std::vector> features; void accept (tdesc_element_visitor &v) const override { v.visit_pre (this); - struct tdesc_feature *feature; - - for (int ix = 0; - VEC_iterate (tdesc_feature_p, features, ix, feature); - ix++) + for (const tdesc_feature_up &feature : features) feature->accept (v); v.visit_post (this); @@ -446,20 +433,15 @@ struct target_desc : tdesc_element if (osabi != other.osabi) return false; - if (VEC_length (tdesc_feature_p, features) - != VEC_length (tdesc_feature_p, other.features)) + if (features.size () != other.features.size ()) return false; - struct tdesc_feature *feature; - - for (int ix = 0; - VEC_iterate (tdesc_feature_p, features, ix, feature); - ix++) + for (int ix = 0; ix < features.size (); ix++) { - struct tdesc_feature *feature2 - = VEC_index (tdesc_feature_p, other.features, ix); + const tdesc_feature_up &feature1 = features[ix]; + const tdesc_feature_up &feature2 = other.features[ix]; - if (feature != feature2 && *feature != *feature2) + if (feature1 != feature2 && *feature1 != *feature2) return false; } @@ -741,15 +723,10 @@ tdesc_osabi (const struct target_desc *target_desc) int tdesc_has_registers (const struct target_desc *target_desc) { - int ix; - struct tdesc_feature *feature; - if (target_desc == NULL) return 0; - for (ix = 0; - VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature); - ix++) + for (const tdesc_feature_up &feature : target_desc->features) if (! VEC_empty (tdesc_reg_p, feature->registers)) return 1; @@ -763,14 +740,9 @@ const struct tdesc_feature * tdesc_find_feature (const struct target_desc *target_desc, const char *name) { - int ix; - struct tdesc_feature *feature; - - for (ix = 0; - VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature); - ix++) + for (const tdesc_feature_up &feature : target_desc->features) if (strcmp (feature->name, name) == 0) - return feature; + return feature.get (); return NULL; } @@ -1466,8 +1438,7 @@ tdesc_use_registers (struct gdbarch *gdbarch, struct tdesc_arch_data *early_data) { int num_regs = gdbarch_num_regs (gdbarch); - int ixf, ixr; - struct tdesc_feature *feature; + int ixr; struct tdesc_reg *reg; struct tdesc_arch_data *data; struct tdesc_arch_reg *arch_reg, new_arch_reg = { 0 }; @@ -1487,9 +1458,7 @@ tdesc_use_registers (struct gdbarch *gdbarch, numbers where needed. The hash table expands as necessary, so the initial size is arbitrary. */ reg_hash = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL); - for (ixf = 0; - VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature); - ixf++) + for (const tdesc_feature_up &feature : target_desc->features) for (ixr = 0; VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); ixr++) @@ -1515,9 +1484,7 @@ tdesc_use_registers (struct gdbarch *gdbarch, gdb_assert (VEC_length (tdesc_arch_reg, data->arch_regs) <= num_regs); while (VEC_length (tdesc_arch_reg, data->arch_regs) < num_regs) VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg); - for (ixf = 0; - VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature); - ixf++) + for (const tdesc_feature_up &feature : target_desc->features) for (ixr = 0; VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); ixr++) @@ -1730,7 +1697,8 @@ tdesc_create_feature (struct target_desc *tdesc, const char *name, { struct tdesc_feature *new_feature = new tdesc_feature (name); - VEC_safe_push (tdesc_feature_p, tdesc->features, new_feature); + tdesc->features.emplace_back (new_feature); + return new_feature; }