From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18822 invoked by alias); 31 Oct 2017 01:42:31 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 18763 invoked by uid 89); 31 Oct 2017 01:42:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 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=minimize, difficulty 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:28 +0000 Received: from ESESSHC010.ericsson.se (Unknown_Domain [153.88.183.48]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id D6.70.26775.305D7F95; Tue, 31 Oct 2017 02:42:27 +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:26 +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:24 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 09/10] Make tdesc_type::u::u::fields an std::vector Date: Tue, 31 Oct 2017 01:42:00 -0000 Message-ID: <1509414120-14659-10-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 Content-Type: text/plain 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-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 07845a8c-ce87-4d70-1300-08d52000a324 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(2017052603238);SRVR:DBXPR07MB319; X-Microsoft-Exchange-Diagnostics: 1;DBXPR07MB319;3:M8KaUxt6B67YuZoO+rpSRgDWBRiLTo7Z/xqgbQgIj7u5Z9MrLSOYpbr+xSTOjj/0tLi90gmeTFGU9wDCgiwBlK0KiJUOs3c6yq8PJCvntZjCYcX0Pd2NGUh3Xt24Cwn1bCHW4hwwR7By7U4rM7GNiCXUEdWOIY+ywkLIgoRV2AQWhp7xp+U7DyvslWCcQFASqfJtSuYFFmLG60jbrdbXbnQXpuHCRLC/GgUDkSwLopMn7wyUWJ3oXNCAEp2ERiKI;25:hTfP8C3qsFgg0/IPWJtmIIahcWXQuWLsL9qtpKhNxmnLL3ypmKtjFc87cgJQxe9GV3v1i2TY2SxYnAefYNu0hzqh1HwPF6yxVFainzaRxOnKk+Jzc+bEh9v4WdJuPmbHqmADvOmErWHhaVq5p7zE4C+hxDzIa8VHsQhI6beiBBNFvWHJZ0yUDRdZKk6wt/jwFskU3pnZFqS2/TL5RdLGBnBkuOw/+YPFKc0XKzWsrLsoUIplgLgKmkagPM3mr9dOSffRyw5vBltqTNM682Nxh4aEh0lvbiz6EZHnd5T3nJGBKtoEZnC06ir2axllUllB6KPW+bxiwSRzy2q0VCL54wI2JvzXmMZFeGFqZJmBFLU=;31:M5Kzcsud88kZGOuid576aUiawfsyXPH9QhdMGrE/RdnzCsq10xQij8SUk1f2QGfvxVxdmU/8RNVaF1D56JT5434JnpISCJNNP7YNL24KqLBtVRiLPYcRie0YcGCAgNl9OJmgRSjnf3oKDUnVfqXMnk5RNh9VmLIZ+2oasHCVNsItLthnWhCNbKLK17OXcYzGDrfdJxLRZH4Ea0FHGhfXqRJRh2k6PAJrkOQDbL6onLo= X-MS-TrafficTypeDiagnostic: DBXPR07MB319: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1;DBXPR07MB319;20:zKR2qcubMqzJ5G4zQM9CSo3jQgkk1HYsZLBxJH8IZLGIb118WjjIf2o8cG+dqS2AV3XbERZctobW9nmGczQDC5JST+6i3eB7diPfoLUtf5voQmDN7lUm9RIO36P19piBpF00/X7TQtB8xxGHdbYYiS0utuMCIeOK4iTbZPf8O2oATFM0jOoSd2f90pz3r52s0JCKdsXR2CNjvTRFXJMbO3JtlDW2ZYp/qy6np2qykrpe/jQtfD0wHIi5sM5teBHmh2VL8Hl5r+WKc9FVuiQF6tXp5WGf/3VIB12F51zs7UQFy/kR9me5knOHnypWg+wsPBq8fO4rZtyrkyqaZ7V4KCh1N0GApciW1rsF6BUYKb1NQoGZloal6lm+VPuC8ClU0db6afOi3gUSiCbW0IHDee55ECeUNgN1PpNjTkKw6CMEq6JX82E9sdMin6DIXbqa/wxTKZqY5tAxlwXYzX+mK71R/kST46RuFob4soBRXoP+v1QCeOgDdKJZl+GomvlL;4:0PgZutbbLM1bTPpcM8TzS38/nxIkPGSvMEN4eiUUAfBNILXlliQI374Vp2wRobufkHgfZjc0pTMddzVunLoCjh3X5DhPNbmkxsNuRqSIy8UMYcMK2p0PLL/fR2uluf6kq6SJ5F+9w5/XK66Hbf1sOEevfMHRK4okghHIdtzQ2f5H6uW2KvtbwR2vnKvkaiBFUnl4jrCPy0zEdCx6Or0HeMBl5t3rSSidzR8r9u5HtNkMTkC5ZcMk6GnY95PMuxQCQAtLBV6qopVphkD5t8pbMw== 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:vw1HIUun1ZxtFhDgY67HmdSlo60fq5tbVQwnkd8FYc?= =?us-ascii?Q?XchdSyqBerwdCuAowb+5UCrhLYpCga9Vd2ubsVPXA2hHcprCKVbbxpyEvJ6m?= =?us-ascii?Q?sKPqyUkGHxoxwUdtmoPb6ZxsYSsJpcmGFMqV0gdSxxNLZcATfGjfLCaciTu4?= =?us-ascii?Q?yxZ3pUtBBSRB115xrd+tF+h93FzSkfmWC8xv/Dl5Tjwx7YDOSY83Nbiqjmz+?= =?us-ascii?Q?te5TTy3w/GFvBNwMt98bFZSWiChGe3QtRRYIapeUmV1aQ09bc9KitPUXw3Z9?= =?us-ascii?Q?ulZHeWQmO5yxYrRZq8zo8z8GE07Y1f3yJvsoIkUV/8NSt/ZYAec/yFjQyeBi?= =?us-ascii?Q?iN5fvxJOxcIqYqWVmrvDETYf64ujGUPcZ7O3QLFZJfZ0xYWEtQEhdNXhATxp?= =?us-ascii?Q?dLI0wY98uiBHOPL8l9AUWfyHvUW518iVvVSBzp822Uanm9WhM/+FywlUBLYT?= =?us-ascii?Q?uL3LI3P8sW7n8DghcGnOyufRBNNOm70jmaWLwEZz63OMIOmh/TrnirV5zeKa?= =?us-ascii?Q?h+WB/MwaBn6lzwRPPo1ajp657cQV09k2xz2mFZdehxg+6kV8bROdEUTP0pLR?= =?us-ascii?Q?a03gMbV3rJ+yJRIBkaDfK7g0R41zcJHRoXOJp4rR3i64RQyEIr2AHscUcp2N?= =?us-ascii?Q?17fWNokhHWEOS8sToRQUpCMcdWiDrnk+vnjjm/xMuea7dwg0cuPazB7Eu4/r?= =?us-ascii?Q?ju1drFr4a4AIC8hnbE4lCh191yjoWQXwdnBKhDB+0S82xmS6xdTNTBRTfuEC?= =?us-ascii?Q?P1AF/PUS32jePcaI5QpHfYrG3oCRY9pCEcLH5w6sC7b4693/FuuPvY8Ts0kk?= =?us-ascii?Q?4RoCBYEX2bcSpY29kLBEmTiSz0WE1DInm84KbYFf0iNFZULIjGhw8gVgC7Im?= =?us-ascii?Q?0FvqEIf0XYLwKwIZMTts/yKW4pHcNzDQspH7tnrCjG0vlFIs7UEJvzxAdQ9n?= =?us-ascii?Q?Orqo7+R+Dr+esSRUkiNbK4PjEV4OOn9OoSiySDQuVAfy1n81PUdWLiqT/WWx?= =?us-ascii?Q?Xmi/WSih7ziFx2R+6ACzKJm7Rvu57Vf9PsI05VniWJy4e6+DBCm1XtCklS5b?= =?us-ascii?Q?Hss9EL1z+n4hAEIVofdGfBbVGqZVatLSp752uxC4dITgOS/2S9Smw0BfesH2?= =?us-ascii?Q?uZjKHzFaYApgE+MnH034sH2e8uf1UD?= X-Microsoft-Exchange-Diagnostics: 1;DBXPR07MB319;6:iUkn0JfnSxPbkdO4vSWD9H5LpSkIQ9CUr2Dt9nKnhVYsLUHTAhb/NOUz1kAws690l06UfFM9QoIM0NeEtLn89qJIYZeJm7T/QkOS9JX09gAN26QFSCnxgnjnDNj5Zex/pBG6D53PboT8p9L2ac36owxOmFgIrMFLmCy7Bzd6j0iCs9gZoIe3lvygtA4dKEkxE5kf1yPuxc+tM9wCI6Cy40FBb+RFPlKOd8g8mnFHdExrSGwzvuxImG/EHi+bQHjmOzqkhboIONiTDGEdkTkhGU03jTBfBU2jFFp9p606WuSlgFjtonYm6abA+7qROV+3ogY4PRjU/TJSAvhr54FowuAgErmVX1ITejt4m5+lpAg=;5:cw2yNP7dT5neWUCeYXdNv+xPty0gheVh7rd5TjdGqy5exDzTxpXw+JHa19BT9a+MZDViD0IPWgXA+hpsDChYLeupuofwJ/o9ZBA0o4/POU7Dv5LmLJSavgRtJgQGHa/OYX/41Edo9f5xVytt7vfdADC7YtUG+eVb26ebinIdPZs=;24:ITxwbBKcJww7DTRqD8kOnzxkAI3OBV6IyFNoIHrXhurbi4T5MbuhgdNo9fHGOI0Yu3nlMH/TMAsuFxq1aOk4lnjtY5MtoEeNr6XHbSFY9Rw=;7:wi5jVoWSIjKa7QaDbj5JY6R/AIjTCLL5W+hIv26L9Xc2YIwW2T42UQ2g3pgI4f/3+szK83WFJlQyOT6Um2mFnPMkLpXMNNuYrpspfIBMjP7VLXt88WvY3dDA+RQW07s/GOIifnCwMD0O3ZbSIVzvV5kboo0S8cRQxR0nXHoZKIYpuQfW/QsqdeD43Bai6a/E/2StkPpSGxqPnQqlo74F4j5jZ+GF86wqONsDR/zemQu9P/dhZ8i+sh93X1PusM5z SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2017 01:42:24.6932 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 07845a8c-ce87-4d70-1300-08d52000a324 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 X-SW-Source: 2017-10/txt/msg00917.txt.bz2 From: Simon Marchi This patch makes the tdesc_type::u::u::fields an std::vector of tdesc_type_field. The difficulty here is that the vector is part of a union. Because of this, I made fields a pointer to a vector, and instantiate/destroy the vector if the type is one that uses this member of the union The field tdesc_type_field::name is changed to an std::string at the same time. gdb/ChangeLog: * target-descriptions.c (tdesc_type_field): Remove typedef. (DEF_VEC_O (tdesc_type_field)): Remove. (struct tdesc_type_field): Add constructor. : Change type to std::string. (struct tdesc_type) : Instantiate vector if the type kind uses it. <~tdesc_type>: Destroy vector if the type kind uses it. : Change type to std::vector. (tdesc_gdb_type): Adjust. (tdesc_add_field): Adjust. (tdesc_add_typed_bitfield): Adjust. (tdesc_add_field): Adjust. (tdesc_add_enum_value): Adjust. (class print_c_tdesc) : Adjust. --- gdb/target-descriptions.c | 197 ++++++++++++++++++---------------------------- 1 file changed, 78 insertions(+), 119 deletions(-) diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 77a9c1c..8e07a65 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -152,16 +152,20 @@ typedef std::unique_ptr tdesc_reg_up; /* A named type from a target description. */ -typedef struct tdesc_type_field +struct tdesc_type_field { - char *name; + tdesc_type_field (const std::string &name_, tdesc_type *type_, + int start_, int end_) + : name (name_), type (type_), start (start_), end (end_) + {} + + std::string name; struct tdesc_type *type; /* For non-enum-values, either both are -1 (non-bitfield), or both are not -1 (bitfield). For enum values, start is the value (which could be -1), end is -1. */ int start, end; -} tdesc_type_field; -DEF_VEC_O(tdesc_type_field); +}; enum tdesc_type_kind { @@ -198,6 +202,19 @@ struct tdesc_type : tdesc_element : name (name_), kind (kind_) { memset (&u, 0, sizeof (u)); + + switch (kind) + { + case TDESC_TYPE_STRUCT: + case TDESC_TYPE_UNION: + case TDESC_TYPE_FLAGS: + case TDESC_TYPE_ENUM: + u.u.fields = new std::vector (); + break; + + default: + break; + } } virtual ~tdesc_type () @@ -208,17 +225,7 @@ struct tdesc_type : tdesc_element case TDESC_TYPE_UNION: case TDESC_TYPE_FLAGS: case TDESC_TYPE_ENUM: - { - struct tdesc_type_field *f; - int ix; - - for (ix = 0; - VEC_iterate (tdesc_type_field, u.u.fields, ix, f); - ix++) - xfree (f->name); - - VEC_free (tdesc_type_field, u.u.fields); - } + delete u.u.fields; break; default: @@ -247,7 +254,7 @@ struct tdesc_type : tdesc_element /* Struct, union, flags, or enum type. */ struct { - VEC(tdesc_type_field) *fields; + std::vector *fields; int size; } u; } u; @@ -884,18 +891,14 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type) case TDESC_TYPE_STRUCT: { struct type *type, *field_type; - struct tdesc_type_field *f; - int ix; type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); TYPE_NAME (type) = xstrdup (tdesc_type->name.c_str ()); TYPE_TAG_NAME (type) = TYPE_NAME (type); - for (ix = 0; - VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f); - ix++) + for (const tdesc_type_field &f : *tdesc_type->u.u.fields) { - if (f->start != -1 && f->end != -1) + if (f.start != -1 && f.end != -1) { /* Bitfield. */ struct field *fld; @@ -904,15 +907,15 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type) /* This invariant should be preserved while creating types. */ gdb_assert (tdesc_type->u.u.size != 0); - if (f->type != NULL) - field_type = tdesc_gdb_type (gdbarch, f->type); + if (f.type != NULL) + field_type = tdesc_gdb_type (gdbarch, f.type); else if (tdesc_type->u.u.size > 4) field_type = builtin_type (gdbarch)->builtin_uint64; else field_type = builtin_type (gdbarch)->builtin_uint32; - fld = append_composite_type_field_raw (type, xstrdup (f->name), - field_type); + fld = append_composite_type_field_raw + (type, xstrdup (f.name.c_str ()), field_type); /* For little-endian, BITPOS counts from the LSB of the structure and marks the LSB of the field. For @@ -921,19 +924,19 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type) way, it is the number of bits to the "left" of the field. To calculate this in big-endian, we need the total size of the structure. */ - bitsize = f->end - f->start + 1; + bitsize = f.end - f.start + 1; total_size = tdesc_type->u.u.size * TARGET_CHAR_BIT; if (gdbarch_bits_big_endian (gdbarch)) - SET_FIELD_BITPOS (fld[0], total_size - f->start - bitsize); + SET_FIELD_BITPOS (fld[0], total_size - f.start - bitsize); else - SET_FIELD_BITPOS (fld[0], f->start); + SET_FIELD_BITPOS (fld[0], f.start); FIELD_BITSIZE (fld[0]) = bitsize; } else { - gdb_assert (f->start == -1 && f->end == -1); - field_type = tdesc_gdb_type (gdbarch, f->type); - append_composite_type_field (type, xstrdup (f->name), + gdb_assert (f.start == -1 && f.end == -1); + field_type = tdesc_gdb_type (gdbarch, f.type); + append_composite_type_field (type, xstrdup (f.name.c_str ()), field_type); } } @@ -946,18 +949,15 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type) case TDESC_TYPE_UNION: { struct type *type, *field_type; - struct tdesc_type_field *f; - int ix; type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); TYPE_NAME (type) = xstrdup (tdesc_type->name.c_str ()); - for (ix = 0; - VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f); - ix++) + for (const tdesc_type_field &f : *tdesc_type->u.u.fields) { - field_type = tdesc_gdb_type (gdbarch, f->type); - append_composite_type_field (type, xstrdup (f->name), field_type); + field_type = tdesc_gdb_type (gdbarch, f.type); + append_composite_type_field (type, xstrdup (f.name.c_str ()), + field_type); /* If any of the children of a union are vectors, flag the union as a vector also. This allows e.g. a union of two @@ -970,22 +970,17 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type) case TDESC_TYPE_FLAGS: { - struct tdesc_type_field *f; - int ix; - type = arch_flags_type (gdbarch, tdesc_type->name.c_str (), tdesc_type->u.u.size * TARGET_CHAR_BIT); - for (ix = 0; - VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f); - ix++) + for (const tdesc_type_field &f : *tdesc_type->u.u.fields) { struct type *field_type; - int bitsize = f->end - f->start + 1; + int bitsize = f.end - f.start + 1; - gdb_assert (f->type != NULL); - field_type = tdesc_gdb_type (gdbarch, f->type); - append_flags_type_field (type, f->start, bitsize, - field_type, f->name); + gdb_assert (f.type != NULL); + field_type = tdesc_gdb_type (gdbarch, f.type); + append_flags_type_field (type, f.start, bitsize, + field_type, f.name.c_str ()); } return type; @@ -993,22 +988,18 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type) case TDESC_TYPE_ENUM: { - struct tdesc_type_field *f; - int ix; - type = arch_type (gdbarch, TYPE_CODE_ENUM, tdesc_type->u.u.size * TARGET_CHAR_BIT, tdesc_type->name.c_str ()); TYPE_UNSIGNED (type) = 1; - for (ix = 0; - VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f); - ix++) + for (const tdesc_type_field &f : *tdesc_type->u.u.fields) { struct field *fld - = append_composite_type_field_raw (type, xstrdup (f->name), + = append_composite_type_field_raw (type, + xstrdup (f.name.c_str ()), NULL); - SET_FIELD_BITPOS (fld[0], f->start); + SET_FIELD_BITPOS (fld[0], f.start); } return type; @@ -1548,37 +1539,23 @@ void tdesc_add_field (struct tdesc_type *type, const char *field_name, struct tdesc_type *field_type) { - struct tdesc_type_field f = { 0 }; - gdb_assert (type->kind == TDESC_TYPE_UNION || type->kind == TDESC_TYPE_STRUCT); - f.name = xstrdup (field_name); - f.type = field_type; - /* Initialize these values so we know this is not a bit-field + /* Initialize start and end so we know this is not a bit-field when we print-c-tdesc. */ - f.start = -1; - f.end = -1; - - VEC_safe_push (tdesc_type_field, type->u.u.fields, &f); + type->u.u.fields->emplace_back (field_name, field_type, -1, -1); } void tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name, int start, int end, struct tdesc_type *field_type) { - struct tdesc_type_field f = { 0 }; - gdb_assert (type->kind == TDESC_TYPE_STRUCT || type->kind == TDESC_TYPE_FLAGS); gdb_assert (start >= 0 && end >= start); - f.name = xstrdup (field_name); - f.start = start; - f.end = end; - f.type = field_type; - - VEC_safe_push (tdesc_type_field, type->u.u.fields, &f); + type->u.u.fields->emplace_back (field_name, field_type, start, end); } /* See arch/tdesc.h. */ @@ -1605,33 +1582,23 @@ void tdesc_add_flag (struct tdesc_type *type, int start, const char *flag_name) { - struct tdesc_type_field f = { 0 }; - gdb_assert (type->kind == TDESC_TYPE_FLAGS || type->kind == TDESC_TYPE_STRUCT); - f.name = xstrdup (flag_name); - f.start = start; - f.end = start; - f.type = tdesc_predefined_type (TDESC_TYPE_BOOL); - - VEC_safe_push (tdesc_type_field, type->u.u.fields, &f); + type->u.u.fields->emplace_back (flag_name, + tdesc_predefined_type (TDESC_TYPE_BOOL), + start, start); } void tdesc_add_enum_value (struct tdesc_type *type, int value, const char *name) { - struct tdesc_type_field f = { 0 }; - gdb_assert (type->kind == TDESC_TYPE_ENUM); - f.name = xstrdup (name); - f.start = value; - f.end = -1; - f.type = tdesc_predefined_type (TDESC_TYPE_INT32); - - VEC_safe_push (tdesc_type_field, type->u.u.fields, &f); + type->u.u.fields->emplace_back (name, + tdesc_predefined_type (TDESC_TYPE_INT32), + value, -1); } /* See arch/tdesc.h. */ @@ -1887,8 +1854,6 @@ public: void visit (const tdesc_type *type) override { - struct tdesc_type_field *f; - /* Now we do some "filtering" in order to know which variables to declare. This is needed because otherwise we would declare unused variables `field_type' and `type'. */ @@ -1902,7 +1867,7 @@ public: || type->kind == TDESC_TYPE_STRUCT || type->kind == TDESC_TYPE_FLAGS || type->kind == TDESC_TYPE_ENUM) - && VEC_length (tdesc_type_field, type->u.u.fields) > 0 + && !type->u.u.fields->empty () && !m_printed_type) { printf_unfiltered (" struct tdesc_type *type;\n"); @@ -1937,35 +1902,33 @@ public: (" type = tdesc_create_flags (feature, \"%s\", %d);\n", type->name.c_str (), type->u.u.size); } - for (int ix3 = 0; - VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); - ix3++) + for (const tdesc_type_field &f : *type->u.u.fields) { const char *type_name; - gdb_assert (f->type != NULL); - type_name = f->type->name.c_str (); + gdb_assert (f.type != NULL); + type_name = f.type->name.c_str (); /* To minimize changes to generated files, don't emit type info for fields that have defaulted types. */ - if (f->start != -1) + if (f.start != -1) { - gdb_assert (f->end != -1); - if (f->type->kind == TDESC_TYPE_BOOL) + gdb_assert (f.end != -1); + if (f.type->kind == TDESC_TYPE_BOOL) { - gdb_assert (f->start == f->end); + gdb_assert (f.start == f.end); printf_unfiltered (" tdesc_add_flag (type, %d, \"%s\");\n", - f->start, f->name); + f.start, f.name.c_str ()); } else if ((type->u.u.size == 4 - && f->type->kind == TDESC_TYPE_UINT32) + && f.type->kind == TDESC_TYPE_UINT32) || (type->u.u.size == 8 - && f->type->kind == TDESC_TYPE_UINT64)) + && f.type->kind == TDESC_TYPE_UINT64)) { printf_unfiltered (" tdesc_add_bitfield (type, \"%s\", %d, %d);\n", - f->name, f->start, f->end); + f.name.c_str (), f.start, f.end); } else { @@ -1976,12 +1939,12 @@ public: printf_unfiltered (" tdesc_add_typed_bitfield (type, \"%s\"," " %d, %d, field_type);\n", - f->name, f->start, f->end); + f.name.c_str (), f.start, f.end); } } else /* Not a bitfield. */ { - gdb_assert (f->end == -1); + gdb_assert (f.end == -1); gdb_assert (type->kind == TDESC_TYPE_STRUCT); printf_unfiltered (" field_type = tdesc_named_type (feature," @@ -1989,7 +1952,7 @@ public: type_name); printf_unfiltered (" tdesc_add_field (type, \"%s\", field_type);\n", - f->name); + f.name.c_str ()); } } break; @@ -1997,28 +1960,24 @@ public: printf_unfiltered (" type = tdesc_create_union (feature, \"%s\");\n", type->name.c_str ()); - for (int ix3 = 0; - VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); - ix3++) + for (const tdesc_type_field &f : *type->u.u.fields) { printf_unfiltered (" field_type = tdesc_named_type (feature, \"%s\");\n", - f->type->name.c_str ()); + f.type->name.c_str ()); printf_unfiltered (" tdesc_add_field (type, \"%s\", field_type);\n", - f->name); + f.name.c_str ()); } break; case TDESC_TYPE_ENUM: printf_unfiltered (" type = tdesc_create_enum (feature, \"%s\", %d);\n", type->name.c_str (), type->u.u.size); - for (int ix3 = 0; - VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); - ix3++) + for (const tdesc_type_field &f : *type->u.u.fields) printf_unfiltered (" tdesc_add_enum_value (type, %d, \"%s\");\n", - f->start, f->name); + f.start, f.name.c_str ()); break; default: error (_("C output is not supported type \"%s\"."), type->name.c_str ()); -- 2.7.4