From patchwork Tue Oct 31 01:41:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 23988 Received: (qmail 19383 invoked by alias); 31 Oct 2017 01:42:36 -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 19308 invoked by uid 89); 31 Oct 2017 01:42:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.5 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: 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:34 +0000 Received: from ESESSHC010.ericsson.se (Unknown_Domain [153.88.183.48]) by sessmg23.ericsson.net (Symantec Mail Security) with SMTP id DD.83.09869.005D7F95; Tue, 31 Oct 2017 02:42:25 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.48) with Microsoft SMTP Server (TLS) id 14.3.352.0; Tue, 31 Oct 2017 02:42:24 +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:22 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 07/10] Make tdesc_feature::types an std::vector Date: Mon, 30 Oct 2017 21:41:57 -0400 Message-ID: <1509414120-14659-8-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: f5b3a65a-df2a-4e62-bc28-08d52000a20a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(2017052603238); SRVR:DBXPR07MB319; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 3:t/lY9Q+u3iF4aMplqqwNFzFwk4Wbn9JOwQbaRxsgHSkptSEbs3k4uMKOaIr0ErYbYVRzHL9bg2edsrCjlPXgDD0acgPVEOG3+ROWUzjAx6Il6kDwjKqgiXaIbE3hrjT4qEQn7TMOkwZHPbD0emUYssZ5DsbeuPasjJOYiBAR1nh+fKSExhCktmqlTuSUUomEc4yd8slg7HftiYJBVOytpP/M+lOgO6M7lxrgTD88ii5DJehnHPMH7aysXgBc2JAy; 25:C2qKP/vZ/4R9zApGINWrLbQqr1ahYsK0CL2dmsdf6RddYFfUE+Ok/JmxX3Sc+3B7dFWOZZ8I77ShkFu1d4s17QJ4CwTmz+/idZ8jLmrAbsDTp1IwguVbaC+dm1/uUrh3IaLNnKMjp14OLVsmKWakpZIwUxRUVGCzrMzyLSgEyIzwu/N/1K4dvXdcDyGDkfEf2hzCEpBC0oGKKoseYXCf/xFi3VtcorJk1YhQlEyxgbvezOw1rKxNlwQf7X/xtyr55Q2Ju9Ic2JiyM15UfvMtR1P1QVnjd8cwlRM8gJuqvTx730O7akDgfpSZbYaBNqgJ9PHXTjK+LsSqNtBPtOb67SggmuAk7cz1q6sss7VeVX4=; 31:V/WI/hLrvR9VsNbb7AWrSrE4rnOeQFbHhPN3cjdRBFWW3objkMmp0m6VVkRrVXNYt4ZjKn4gYwwvXcdrLIeDq89XGi2QE/0EeGNxzFrEHi9kYvWIRkN2yKbvS5Ra+vXDlbTWLhNThrx7fzGbWWjcVA2oDw19Zc5+ImEqooBxebVfJ6P+zG9bp/yiv/3PnR/rWB2sRF7hRlv4L9byp3mQjK4hsYF9+mRGrRay7xAu/6Y= 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:YPa6gQFebP5oobjiLHcxLB7enpS9L7cOhPTPmUZm5eAl8zvbAAWU/8PFe8czpmyVLkscRfHbQvAbYkCLeQNBE2fULD/blXingstCUIBn/eKC0QEUDWH606zIDIil99jgI3jRqkZK4rwTPaioRVZbD9AHs8DrgB2KxoyviTC3HZcUpzxqt28wKgu+2zMgxGzPi1sLGsOZXSmeXxJ0oqJ27vV8iik3xIeTTQSHJA0f3wuO4HuAzdt1VxgyoQ1vFOwD9q8GFFqhb+jbh7lBhidwaFYOeWdnWyKgICqXINH3ixbkNg1x4X3PBn7IQXkCsMoiLInOHq9/VPIZnCONrVvl5hJaJe9rgnZ3IN1Bq/OzyebFS9La05EtBDCKr5Tu9hjsI6jum4Dp0BcP1aXhzi5XhGCQlb0ZlQJykrQShugMRNWErv+Dd6vyYjApt2gGaCdZC6lmtWqW0IbVjAZ88kEcHk0HOvYlWmP/wbOM55KeBfkEhgxC25vuKVOCXlp6s2zX; 4:BzaBukb2jFM6N5oPNlo24GONis+2an5QFSZmIfZs7TfNRzelMrZMemvrC5u0y17LLvGp7wgcCR+oGfF0neom8U6CZH11Rm9Bc/dl/I+UDzYfOrnZBztVtewc6bBNdQsMrq4kkClXbegVBQtPjAtlRFUJZbGynPdKx0U8MHcQ54nVRLWpUyBCYSF2NFwXmvzOoR1PVM0BPWg+x0TChNJ9P803aS7fmhlSr8gGEKGgzCKoxS2Z0P+zlROx1o86KWnaysfefcku6FQps8ywmbd551pRznKoci0MqB8sP8aCm66/5hpV5QASbSvFG9CBxszqMxmehEfUj9/adHNh11WMtA== 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:iFA6JDFpMwuPNKptYor5tiezI1ZppHh83WNV7ck+Q6?= =?us-ascii?Q?f2rvQVoMAEOiixgHqltgC0kAhAuMcyppDt9DOsrS6x7/L9Us5QL9Djfkrp42?= =?us-ascii?Q?HSDxVfzd/7uTBoNt/gsexr5S1uQLOAub7EaT5BkTwxIz/ikQcBQIWoIoAHNk?= =?us-ascii?Q?e/go2plG+5RGRqE9Os8Q3WEA3QExFls9pv4dAJc19fDYVgUCpr3jXQmuum5o?= =?us-ascii?Q?BNhwG4DPjEGyRkJG8opuQodtFUp+0r68R0KgA4aQ+19wGWwsEbAkW296Be9w?= =?us-ascii?Q?5KPnekT35nuAAhsGCl8NSy/ZJnJt1TgRhuodCi+2dQn2zDTPd/bhDYEi8OdP?= =?us-ascii?Q?YqjAJ3eqs5s3bRUZ5jPVVATVJLOYEkcORlLzO0sB4GSS8rS6rpr+6n6lzUky?= =?us-ascii?Q?DPJf+aVqaZy5l0heqPdFiliGu5mH5cVhg3BNjFuKhaLqyXcui3RgYY5CRtOA?= =?us-ascii?Q?wFPWE6WOLUXgck2bHqrIxCNvAV0EKjSQtFtGX2p8Vvj7mvP+6LiG2KTYKX/b?= =?us-ascii?Q?n65MNHMUTQsMiuK8hEt2j5bl9MUNwZ+m7iMhRvnAByF1jxNrptsXI94dQ3M1?= =?us-ascii?Q?oKg+nnSsQzi4top7ypk68Vywh916E4183McXsXg+TGp8Uj6LihjXZPPK4ofP?= =?us-ascii?Q?gcVoAktAzOWRwB7Kf0XTHtcHAFEtN+goXxOm0BJhzv4YC2evIzhfnz4NCjbl?= =?us-ascii?Q?lKM3I3Gd79EEagosxsJyP276XO5rQ5bYK8F3ZInCOlHGIAQi4vwriDYqDvml?= =?us-ascii?Q?xfXmzpzT0LGls/thtSYUV71SO6vDDbeIiBGxS3nqIEuWkcW3qI9drst5X/h3?= =?us-ascii?Q?RIoiYp/mSH91SAWPHv/0iCGKVmtF8pOO2WlUaHJBmWDDX8fwWnF8NfoDvFVT?= =?us-ascii?Q?WH7poXthNtidIx4pRF4rMJXzB44wRKR2okUJ/co4EPGIoIgx4IuiSZwwFPUQ?= =?us-ascii?Q?h+5/zCmqmZ0W9EamfUKmxIdKYcRWU9bUz52ONihtTrzhul87Oxg76GBwKwRT?= =?us-ascii?Q?UO6RDNuSDPDvJljEPBs9ZGRuFb/qW+EEbRhqxpLX4QWXVhuir5lXaDARP4ez?= =?us-ascii?Q?HmwbJVYyy9dTzumjuECRjqVYdGwQpHYBjQZSFTxNjEj+4QcjDJBVJFMDaCKy?= =?us-ascii?Q?qY4auNt1PsbclpnIfl+wzLdXlc/hsQ?= X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 6:btbDh42ntJSpQEbiSmLptCQGfN4FW51NrQ8r7IGeyKW4jOLrgFC5jigwiaRbiTgIksddU4gJ9I7FIDh1dEHpjgWUPYXb1ee52fDGg5bmLgh9dmYhrZrgamF9ZAoFwHUIidKtph3FBR3gzzr1y6FT6MSndRE1tPJTKQsIveZ+8cCK9y3ZAgWkwK7CGU5+xukSxP7hMl9nGDuEW+oLybYN7TraYncsmGV3AkGPzRAQaFH0h7/meqNEz8SYGfSj7xKeV8lLqBwFoQfFIhPULBuBr57uYGT8f6JArf147eM+ybCeDfqdEO+helOOv+owoIq2ncYcaqa1FWOep9vHEvLzYQINKiEhmnWmrmV423tirbA=; 5:2Nbsrro+MrY4X/4AloBUBILnMEwJktzJDP/CH7HRB6pZhmol3Ux3qti2PTuWxbkQ1d9N7E9iDnOC9kUMDXko0wUvok/ss0/SrxPU1QcjXZRWwnvhmhgnipw2/bDGzRQwQPAqNJGKLBC8Sh5gpOEqLovWsC8xxU7z1kAeMk8FqjI=; 24:ai0HRtu+cY4l6yiPRtoYJnRmq4YRfvDKPjcg+FFeM9uJZNVS+3tpUcbz/HTDqhSKAgJfZI+EAMNCxxq+q+WlA6DHt1kJtbwgg5Bat66I+kY=; 7:9veNWGMB9e1UFFNHDGD2QfJHUo75nuJj1PLiwZFURjW6DsUMAsydHZPWTDPzesml+kCE/0w7oXR+xB7oQXYuo6j7Td/gykL4q/lh9wDvy850/eVE9mDVNAVzwD0Vn7FS8wJ9Y1x4ng1aTCXgf2bz1/gFBGRL/yWPLqk1Zykd28jbS/RPDohQ+Gl+cqZJiEZcKlhPbljJa/T3FBMdHtiEYsaO6SjgMA7Oxfi/AYbmE9jm5HDUY4+c6LxSOyeEpglt SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2017 01:42:22.8650 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f5b3a65a-df2a-4e62-bc28-08d52000a20a 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 tdesc_feature::types an std::vector of unique_ptr of tdesc_type. This way, we don't need to manually free the objects and the vector in ~tdesc_feature. gdb/ChangeLog: * target-descriptions.c (tdesc_type_p): Remove typedef. (DEF_VEC_P (tdesc_type_p)): Remove. (struct tdesc_feature) : Change type to std::vector. <~tdesc_feature>: Replace with default implementation. : Adjust. (tdesc_named_type): Adjust. (tdesc_create_vector): Adjust. (tdesc_create_struct): Adjust. (tdesc_create_union): Adjust. (tdesc_create_flags): Adjust. (tdesc_create_enum): Adjust. --- gdb/target-descriptions.c | 60 ++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 40 deletions(-) diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 647d42d..13d6884 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -192,7 +192,7 @@ enum tdesc_type_kind TDESC_TYPE_ENUM }; -typedef struct tdesc_type : tdesc_element +struct tdesc_type : tdesc_element { tdesc_type (const char *name_, enum tdesc_type_kind kind_) : name (xstrdup (name_)), kind (kind_) @@ -269,8 +269,9 @@ typedef struct tdesc_type : tdesc_element { return !(*this == other); } -} *tdesc_type_p; -DEF_VEC_P(tdesc_type_p); +}; + +typedef std::unique_ptr tdesc_type_up; /* A feature from a target description. Each feature is a collection of other elements, e.g. registers and types. */ @@ -281,15 +282,7 @@ struct tdesc_feature : tdesc_element : name (name_) {} - virtual ~tdesc_feature () - { - struct tdesc_type *type; - int ix; - - for (ix = 0; VEC_iterate (tdesc_type_p, types, ix, type); ix++) - delete type; - VEC_free (tdesc_type_p, types); - } + virtual ~tdesc_feature () = default; DISABLE_COPY_AND_ASSIGN (tdesc_feature); @@ -301,17 +294,13 @@ struct tdesc_feature : tdesc_element std::vector> registers; /* The types associated with this feature. */ - VEC(tdesc_type_p) *types = NULL; + std::vector types; void accept (tdesc_element_visitor &v) const override { v.visit_pre (this); - struct tdesc_type *type; - - for (int ix = 0; - VEC_iterate (tdesc_type_p, types, ix, type); - ix++) + for (const tdesc_type_up &type : types) type->accept (v); for (const tdesc_reg_up ® : registers) @@ -337,20 +326,15 @@ struct tdesc_feature : tdesc_element return false; } - if (VEC_length (tdesc_type_p, types) - != VEC_length (tdesc_type_p, other.types)) + if (types.size () != other.types.size ()) return false; - tdesc_type *type; - - for (int ix = 0; - VEC_iterate (tdesc_type_p, types, ix, type); - ix++) + for (int ix = 0; ix < types.size (); ix++) { - tdesc_type *type2 - = VEC_index (tdesc_type_p, other.types, ix); + const tdesc_type_up &type1 = types[ix]; + const tdesc_type_up &type2 = other.types[ix]; - if (type != type2 && *type != *type2) + if (type1 != type2 && *type1 != *type2) return false; } @@ -361,7 +345,6 @@ struct tdesc_feature : tdesc_element { return !(*this == other); } - }; typedef std::unique_ptr tdesc_feature_up; @@ -776,16 +759,13 @@ tdesc_predefined_type (enum tdesc_type_kind kind) struct tdesc_type * tdesc_named_type (const struct tdesc_feature *feature, const char *id) { - int ix; - struct tdesc_type *type; - /* First try target-defined types. */ - for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++) + for (const tdesc_type_up &type : feature->types) if (strcmp (type->name, id) == 0) - return type; + return type.get (); /* Next try the predefined types. */ - for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) + for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) if (strcmp (tdesc_predefined_types[ix].name, id) == 0) return &tdesc_predefined_types[ix]; @@ -1499,7 +1479,7 @@ tdesc_create_vector (struct tdesc_feature *feature, const char *name, type->u.v.type = field_type; type->u.v.count = count; - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } @@ -1510,7 +1490,7 @@ tdesc_create_struct (struct tdesc_feature *feature, const char *name) { struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_STRUCT); - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } @@ -1531,7 +1511,7 @@ tdesc_create_union (struct tdesc_feature *feature, const char *name) { struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_UNION); - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } @@ -1547,7 +1527,7 @@ tdesc_create_flags (struct tdesc_feature *feature, const char *name, type->u.u.size = size; - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; } @@ -1561,7 +1541,7 @@ tdesc_create_enum (struct tdesc_feature *feature, const char *name, type->u.u.size = size; - VEC_safe_push (tdesc_type_p, feature->types, type); + feature->types.emplace_back (type); return type; }