From patchwork Tue Oct 31 01:42:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 23989 Received: (qmail 19708 invoked by alias); 31 Oct 2017 01:42:39 -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 19653 invoked by uid 89); 31 Oct 2017 01:42:38 -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:37 +0000 Received: from ESESSHC007.ericsson.se (Unknown_Domain [153.88.183.39]) by sessmg23.ericsson.net (Symantec Mail Security) with SMTP id CE.83.09869.405D7F95; Tue, 31 Oct 2017 02:42:28 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.39) with Microsoft SMTP Server (TLS) id 14.3.352.0; Tue, 31 Oct 2017 02:42:27 +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:25 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 10/10] Make tdesc_arch_data::arch_regs an std::vector Date: Mon, 30 Oct 2017 21:42:00 -0400 Message-ID: <1509414120-14659-11-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: 595564f0-7cc3-418a-aa31-08d52000a3bc X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(2017052603238); SRVR:DBXPR07MB319; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 3:I+2Ii7FEFN0+Q7kd9/BWZ8JJdg/Ww1kwuw7omw9NW3Ko+Y1H1oeP7kZhJcLK/4Se1u17+tBNfUX+hq2mMK0o55YQBwKQjUxir8QJ0L0i1Xf77BP7XUgSBJWTihzjBkCEJHIMWmo6DINZvoEP+F8WuDx5Ofoif+cNvjByUioePD9MD0hgeGp21/Ji1TiWCawrcOL7oa9wWR753AhOs/N9WL8OfAKYWDdMRn4G6k92JEjrYWbF2tzGvvdQ6nix3Xup; 25:qxTof9jVtQH6+u0b0ZAIuMFbgQ1WVLggz/ISV/ioJfdOXRQZY/ctxC2snTpMtTBcCROvOa06vmYvzIRm/zLFlbfiT2XLX3/Q6XG/s1YKeC8ufgQ2p1LN4PVXUpaYy/0aY/qX802M/FHvBSOm+7hxRh7H9f3kWKbzt3LI9tcLAHkriuhWdIUhamcrOOMTVKBM1chSDmCev+yPH70dhKZvMMLKQ7lh6CYzoXFOAor0N/Zch7VLjG2VzmgZIyPuGOjWbvLqmAZT9CNXQUiy3edfFsZ6qCSAGDH7zzH95S9X1WH3IERzDPS6ovR8c/1IsbqKHejo+J9y9Py4inYrB6XZcmMEKPmM1sQOVl91yXKB6bw=; 31:hQDksMr2rjMSHmEZopvEYYxg7JQqpP1NCq06wB7RuyjI/cgZESmBlSdQhfOxC25LmODUe22fw2X97DiBUCf+JjsMXbgh4ZQGE3CHoJ+LKQsY/2vjvljQF+6mqS1PJOc5e9K9ScB76Ow5FGMyE7M09lndbfX9F10EixE4ptawzJa5Xlt9F6+JpO30cP+BN+6sSSllKo4yPkqt6fWdoNUlD/YRcB0PkFbzIhXqHe7lKVc= 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:H36flI2msU+qfll5FbD4wyNZv4a0TikdHdyZVm4fMsK/Ks/4C1yms77oxLIoUWy75Nbu3HS7N4eqDOrtSx2oe8HELnGZsqsl/3dnwryhSeBdh7e4u00EqJPGfzVqWCan1G3octdVGUr9iIz+UequX8wd8Wi0mB9zgesN21+KFzH5vIhO90sY+Uvmcdu1RXeSucXNR7P9XJu7znXdnv+nBVyt+xs2qR9TsHIuUVN/KJOGs8Tm0xLzNpXpRBsSw/85YtVoeAiHo5Y18p92XwlN6F/Ffw4L485i05KDir8C8eykyVxBVxG0F+wnu63lXDh8wnySylxBj4dfHEvXExTcySyDO3VfZGDhT/Ue9pbIiBVh95jrUoKD04QrSqRlREdVCur8iiwqwpvmOUZJnVurdh5ENfot3GYQiwT+Sran/ty1X/t7rh0EyEha/Uo+ONDqA9rBsOLVj7UZbf45tvpMtRdgzGJdwwz/DovZtp6Bgp73i2RR9t5yIEhMcT39gDJr; 4:M02EnpGWuLIvHAb0KukXNXqUA5olvX1V9kwtiJ1p08gOj8bBmg2WkHT5O7Qazhz6IOAx1UGZFSDYxXQr9EAfSOPUPLzipuUggiUT7NjVDuf0IIZqQi78HSLUm6yPsLzUrOKS6qltTLChb4WI8eQE4XX1iDGyNRnLCFn7dI97YYPtujKimOhONFGWAqMyA6Grqu8g1qNXh4Xkjzf/x0mmleuS20Y8oWcwlcrSwtgGrhQD8ae3CBZR3Uf9ikUNisilJeklupH4lQxgDdFpN16J1A== 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)(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:zxBb/lblQBmdDWXw6P0P7uGyNMdpIDgMabKs8Ain7n?= =?us-ascii?Q?YeXFUs412pHJh/CryzhAMoLaBM12GqcoUHnPNYALApXYL1MTwxvE3x4He6fH?= =?us-ascii?Q?qk0T7WozrGmj7Eo52Or5W8ujwm9gmsK6OibDIULmCcAiaAj+IdqIvRFcoAhw?= =?us-ascii?Q?95o+4l93NjQqhupIwZRe49FYQKipZHUE3ltCReTjpnBSrR3ComiY38J5QbcV?= =?us-ascii?Q?J7Fsqbroj7CyMBnGNR3EAFiIj0gHtAuUBFAroKJZSTK3rjHN0wXGaNyECSSK?= =?us-ascii?Q?g6qCnIwPOOiM1z13r4lG/ePJy2LUvLAkzDAMbRw/MT46LroWQ44qHV3Nf7E0?= =?us-ascii?Q?hExnZsftfNFAuigo+jKXGSp5bJ4aySxzwPVI14kjIfTjluIUR83f3Ww1N3mA?= =?us-ascii?Q?TWNyU6kW6gTXmO+wY9e8GPv+9UArpQF85ck4spnQbuMxgNE/Up1NyyCqAGHV?= =?us-ascii?Q?gkkGoke1GAc5qbCgtOUESzt8fAF61NxbEsEKPHg2R225Dno/IPZJqoV/I+6F?= =?us-ascii?Q?6chRKbYmf58TbeV5wLL6XoyN9D7fAqICPmp+rNGTu9tA+i3kYqfwqO463FAo?= =?us-ascii?Q?OYFx76j5oeGHjnEqqInWEJyvD9A2ynffIXcbw0gjTWSJ5EHCIfqZmLrtr6zk?= =?us-ascii?Q?U5ODazhdXAj3ZSQPqRmO9iMjgnu8eEhEjdGd6ID76D+R3e7YIvKKo45dXK1l?= =?us-ascii?Q?u40RCWGd9Umn8a+owB9ah4aRtpzKktY9rXxWMcYXwUwA/p2MtGGfFt9LByfG?= =?us-ascii?Q?elD1FW12jz0CcnwuH4QLUwffajbRcFoWjyAOH1nR1MHG4zQcQ/D7N/jmWNPj?= =?us-ascii?Q?LL9LOIUxTwdnpjZwpsbcP37OxZbSXelBMIc5pfBsyQR7+ObB14XRCr9EDyXS?= =?us-ascii?Q?HPER6+rJHR0VJgVlU3resqQ5TkmaC8g+Rkergf4p3Z6erUstk9RcTXqUkJIb?= =?us-ascii?Q?Mx31fmA9xX6q9EgOl8fhec5lsTFJUWqew25HJ67Z9YjGMzGj8FEEQMiawSyi?= =?us-ascii?Q?+1RWosfmYccxrBVyAQwHpLk0uIhxSXX0EnEdhFv4qd1qq6LKdWt5l8F2mQqL?= =?us-ascii?Q?z8ByUxuPwsZldTTuR4tAFfkSXLRoIzdVj1ljl9S+l19mjpmHRNWzx081fCrZ?= =?us-ascii?Q?qS+v9wkuY2moNY2VcSnCV7ziVrZX33?= X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 6:H4WB3KPtFplwflDFwtXgFtE8xKajOhVKbrSYO/npY3dgoj+gd5PSAB3b8pDIQKGgiOqNNV+CGe5gteiazvf2Ug5ycWOSML5vkpDMo666CBfw+y2tam6l1q4kl+ZLcBEWkfh6zc6jPS71ORc9FDC/F6l4SHqOyb0s+HpMjckQ0gQje9elVSDe5R4C8y4gc36rPHxLeorhLSW3MY2RtoEjzoyd8T+B+NTPesw2s6MkYq4Cb/rJ/PN+/mlrDSkQiDcyuWtux3dp9+QKKyz363iDYfpEMbjl96EF9DiN5Z3DEFE65GUH/AwY9AoiYJwuC1XKV6jF7MVKyNAo9i21RISF7sjndgCOq14/JDjD1hAS9CM=; 5:LWtmnlfB6qmNyd9Sj8PXTVy56RynEKfEBWKzoeiV1RGMY1afypkupvu4Vs3St5/alMeRF2FphuMcVakZFqk0EAquE/eC5Fgw0oxQEQcTpkHYa2UHN1sXtODljAlOCpoj7JJu8EPT64dXPyEjrqOwdo+7XDMFQPRPDcmdI3stYCA=; 24:sd7zt3J1m9hkrN7gh1hDjYHkwGutjz3DRu2j8+bmcvd6/Gw6UxwKBB5PgMT4N1xLccQO2agEQQgeG+ZDFWbB4xtHnEb6Mr9Ii7+0N4leMSI=; 7:Eyhnll5xH2dbP99yxbrtSpN7j2Tsp7wS0EIHq0KY1j6h29ITW1FN2O6LC/tF2Xd8CBGEshljanxwg1sPCMy7MnkiBRnR1uTazPulC7uEyuceVoOkOccee1ckC99THgjkQQ8cFh2xl2EaZUdubO5cnzz7tf6i+WAQ65Huff9Wpwfm3/+nIshjZCQwKQ2Eg2ipiRl62qtB/tSnfgA9t1/tivma77gHFnTvGin3GCzrID5sceAgMFjtqFDh6uk7FKjW SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2017 01:42:25.7088 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 595564f0-7cc3-418a-aa31-08d52000a3bc 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 Make tdesc_arch_data::arch_regs be an std::vector of tdesc_arch_reg objects. On particularity is that the tdesc_arch_data linked to a gdbarch is allocated on the gdbarch's obstack. To be safe, I did not change it and called placement-new on the area returned by OBSTACK_ZALLOC. gdb/ChangeLog: * target-descriptions.c (tdesc_arch_reg): Remove typedef. (struct tdesc_arch_reg): Add constructor. (DEF_VEC_O (tdesc_arch_reg)): Remove. (struct tdesc_arch_data): Initialize fields. : Change type to std::vector. (target_find_description): Adjust. (tdesc_find_type): Adjust. (tdesc_data_init): Call tdesc_arch_data constructor. (tdesc_data_alloc): Allocate tdesc_arch_data with new. (tdesc_data_cleanup): Free data with delete. (tdesc_numbered_register): Adjust. (tdesc_find_arch_register): Adjust. (tdesc_use_registers): Adjust. --- gdb/target-descriptions.c | 80 ++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 8e07a65..139f8af 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -424,12 +424,15 @@ struct target_desc : tdesc_element target description may be shared by multiple architectures, but this data is private to one gdbarch. */ -typedef struct tdesc_arch_reg +struct tdesc_arch_reg { + tdesc_arch_reg (tdesc_reg *reg_, struct type *type_) + : reg (reg_), type (type_) + {} + struct tdesc_reg *reg; struct type *type; -} tdesc_arch_reg; -DEF_VEC_O(tdesc_arch_reg); +}; struct tdesc_arch_data { @@ -439,13 +442,13 @@ struct tdesc_arch_data Registers which are NULL in this array, or off the end, are treated as zero-sized and nameless (i.e. placeholders in the numbering). */ - VEC(tdesc_arch_reg) *arch_regs; + std::vector arch_regs; /* Functions which report the register name, type, and reggroups for pseudo-registers. */ - gdbarch_register_name_ftype *pseudo_register_name; - gdbarch_register_type_ftype *pseudo_register_type; - gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p; + gdbarch_register_name_ftype *pseudo_register_name = NULL; + gdbarch_register_type_ftype *pseudo_register_type = NULL; + gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p = NULL; }; /* Info about an inferior's target description. There's one of these @@ -586,7 +589,7 @@ target_find_description (void) data = ((struct tdesc_arch_data *) gdbarch_data (target_gdbarch (), tdesc_data)); if (tdesc_has_registers (current_target_desc) - && data->arch_regs == NULL) + && data->arch_regs.empty ()) warning (_("Target-supplied registers are not supported " "by the current architecture")); } @@ -781,20 +784,16 @@ tdesc_named_type (const struct tdesc_feature *feature, const char *id) struct type * tdesc_find_type (struct gdbarch *gdbarch, const char *id) { - struct tdesc_arch_reg *reg; - struct tdesc_arch_data *data; - int i, num_regs; + tdesc_arch_data *data + = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data); - data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data); - num_regs = VEC_length (tdesc_arch_reg, data->arch_regs); - for (i = 0; i < num_regs; i++) + for (const tdesc_arch_reg ® : data->arch_regs) { - reg = VEC_index (tdesc_arch_reg, data->arch_regs, i); - if (reg->reg - && reg->reg->tdesc_type - && reg->type - && reg->reg->tdesc_type->name == id) - return reg->type; + if (reg.reg + && reg.reg->tdesc_type + && reg.type + && reg.reg->tdesc_type->name == id) + return reg.type; } return NULL; @@ -1022,6 +1021,8 @@ tdesc_data_init (struct obstack *obstack) struct tdesc_arch_data *data; data = OBSTACK_ZALLOC (obstack, struct tdesc_arch_data); + new (data) tdesc_arch_data (); + return data; } @@ -1031,7 +1032,7 @@ tdesc_data_init (struct obstack *obstack) struct tdesc_arch_data * tdesc_data_alloc (void) { - return XCNEW (struct tdesc_arch_data); + return new tdesc_arch_data (); } /* Free something allocated by tdesc_data_alloc, if it is not going @@ -1043,8 +1044,7 @@ tdesc_data_cleanup (void *data_untyped) { struct tdesc_arch_data *data = (struct tdesc_arch_data *) data_untyped; - VEC_free (tdesc_arch_reg, data->arch_regs); - xfree (data); + delete data; } /* Search FEATURE for a register named NAME. */ @@ -1067,18 +1067,17 @@ tdesc_numbered_register (const struct tdesc_feature *feature, struct tdesc_arch_data *data, int regno, const char *name) { - struct tdesc_arch_reg arch_reg = { 0 }; struct tdesc_reg *reg = tdesc_find_register_early (feature, name); if (reg == NULL) return 0; /* Make sure the vector includes a REGNO'th element. */ - while (regno >= VEC_length (tdesc_arch_reg, data->arch_regs)) - VEC_safe_push (tdesc_arch_reg, data->arch_regs, &arch_reg); + while (regno >= data->arch_regs.size ()) + data->arch_regs.emplace_back (nullptr, nullptr); + + data->arch_regs[regno] = tdesc_arch_reg (reg, NULL); - arch_reg.reg = reg; - VEC_replace (tdesc_arch_reg, data->arch_regs, regno, &arch_reg); return 1; } @@ -1135,8 +1134,8 @@ tdesc_find_arch_register (struct gdbarch *gdbarch, int regno) struct tdesc_arch_data *data; data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data); - if (regno < VEC_length (tdesc_arch_reg, data->arch_regs)) - return VEC_index (tdesc_arch_reg, data->arch_regs, regno); + if (regno < data->arch_regs.size ()) + return &data->arch_regs[regno]; else return NULL; } @@ -1381,7 +1380,6 @@ tdesc_use_registers (struct gdbarch *gdbarch, { int num_regs = gdbarch_num_regs (gdbarch); struct tdesc_arch_data *data; - struct tdesc_arch_reg *arch_reg, new_arch_reg = { 0 }; htab_t reg_hash; /* We can't use the description for registers if it doesn't describe @@ -1392,7 +1390,7 @@ tdesc_use_registers (struct gdbarch *gdbarch, data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data); data->arch_regs = early_data->arch_regs; - xfree (early_data); + delete early_data; /* Build up a set of all registers, so that we can assign register numbers where needed. The hash table expands as necessary, so @@ -1408,26 +1406,24 @@ tdesc_use_registers (struct gdbarch *gdbarch, /* Remove any registers which were assigned numbers by the architecture. */ - for (int ixr = 0; - VEC_iterate (tdesc_arch_reg, data->arch_regs, ixr, arch_reg); - ixr++) - if (arch_reg->reg) - htab_remove_elt (reg_hash, arch_reg->reg); + for (const tdesc_arch_reg &arch_reg : data->arch_regs) + if (arch_reg.reg != NULL) + htab_remove_elt (reg_hash, arch_reg.reg); /* Assign numbers to the remaining registers and add them to the list of registers. The new numbers are always above gdbarch_num_regs. Iterate over the features, not the hash table, so that the order matches that in the target description. */ - 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); + gdb_assert (data->arch_regs.size () <= num_regs); + while (data->arch_regs.size () < num_regs) + data->arch_regs.emplace_back (nullptr, nullptr); + for (const tdesc_feature_up &feature : target_desc->features) for (const tdesc_reg_up ® : feature->registers) if (htab_find (reg_hash, reg.get ()) != NULL) { - new_arch_reg.reg = reg.get (); - VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg); + data->arch_regs.emplace_back (reg.get (), nullptr); num_regs++; }