From patchwork Wed Jan 24 09:28:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 25489 Received: (qmail 74957 invoked by alias); 24 Jan 2018 09:28:43 -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 74417 invoked by uid 89); 24 Jan 2018 09:28:41 -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, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com Received: from mail-he1eur01on0050.outbound.protection.outlook.com (HELO EUR01-HE1-obe.outbound.protection.outlook.com) (104.47.0.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 24 Jan 2018 09:28:38 +0000 Received: from DB3PR08MB0106.eurprd08.prod.outlook.com (10.161.56.20) by DB3PR08MB0108.eurprd08.prod.outlook.com (10.161.56.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Wed, 24 Jan 2018 09:28:34 +0000 Received: from DB3PR08MB0106.eurprd08.prod.outlook.com ([fe80::958e:90c2:6108:af75]) by DB3PR08MB0106.eurprd08.prod.outlook.com ([fe80::958e:90c2:6108:af75%14]) with mapi id 15.20.0428.019; Wed, 24 Jan 2018 09:28:34 +0000 From: Alan Hayward To: "gdb-patches@sourceware.org" CC: nd Subject: [PATCH v2 4/8] Move make_gdb_type functions within file Date: Wed, 24 Jan 2018 09:28:34 +0000 Message-ID: References: <7C97CC6A-92CB-4702-820D-206022F07102@arm.com> In-Reply-To: <7C97CC6A-92CB-4702-820D-206022F07102@arm.com> authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR08MB0108; 7:1S3zAOuyWQdk/d4tYib78c3V8l6xSBIMEuhUx3zmE1ZfbOuJwET4v96vYfcDIyOjTvWg7PJwEaUlk35e2K4+HUPsSRFYhMNGntHZHpgrMO3ThP0tKR1mQ7n78f7GXF8ruETx+UymlDKlrk0vbRjCBdGI0y6hf1JsFUUOmHQdud8THVdt27WVv3bYWPjJXkpHBY3k/xy/uTjqgiNWKBVMZ0l8mKXXKEelGTo427rvNS0HrE4+rlM4t44XIXQ9x2Pf x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: ce5d4bad-54c5-443b-5e02-08d5630cd785 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020); SRVR:DB3PR08MB0108; x-ms-traffictypediagnostic: DB3PR08MB0108: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231023)(2400081)(944501161)(93006095)(93001095)(10201501046)(3002001)(6055026)(6041288)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123560045)(6072148)(201708071742011); SRVR:DB3PR08MB0108; BCL:0; PCL:0; RULEID:; SRVR:DB3PR08MB0108; x-forefront-prvs: 056297E276 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(366004)(376002)(346002)(396003)(39380400002)(377424004)(189003)(199004)(2351001)(3280700002)(4326008)(25786009)(82746002)(3660700001)(83716003)(6506007)(106356001)(97736004)(76176011)(6916009)(305945005)(99286004)(105586002)(6436002)(86362001)(478600001)(5640700003)(72206003)(2950100002)(2900100001)(5250100002)(81166006)(53946003)(2501003)(8936002)(8676002)(2906002)(7736002)(5660300001)(81156014)(26005)(36756003)(4743002)(68736007)(6486002)(14454004)(33656002)(316002)(66066001)(6116002)(102836004)(3846002)(53936002)(6512007); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR08MB0108; H:DB3PR08MB0106.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: GATDaYXBzNdv9Gthi4SLnaiUGRITDpen2IRnFvIVC31fHtStZCVTdyERCDWztotxSZksTXWkVaTty831M0mZCw== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: <937842B986BE4F44BAFE58AFDEB08571@eurprd08.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: ce5d4bad-54c5-443b-5e02-08d5630cd785 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jan 2018 09:28:34.7986 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR08MB0108 X-IsSubscribed: yes This patch moves the function bodies for the various make_gdb_type functions outside of the class declaration. It doesn't not change any functionality and produces the same binary. In the next patch I will move the class declarations to a different file. This patch makes the diff of the next patch easier to read. Alan. 2018-01-24 Alan Hayward gdb/ * target-descriptions.c (tdesc_type_builtin::make_gdb_type): Move location in file. (tdesc_type_vector::make_gdb_type): Likewise. (tdesc_type_with_fields::make_gdb_type_struct): Likewise. (tdesc_type_with_fields::make_gdb_type_union): Likewise. (tdesc_type_with_fields::make_gdb_type_flags): Likewise. (tdesc_type_with_fields::make_gdb_type_enum): Likewise. (tdesc_type_with_fields::make_gdb_type): Likewise. diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 6df29521eb2319919c7e20df14ca5aebc1d25321..8ead19efa24b3cb154c895c484e791b92ff61387 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -78,80 +78,7 @@ struct tdesc_type_builtin : tdesc_type v.visit (this); } - type *make_gdb_type (struct gdbarch *gdbarch) const override - { - switch (this->kind) - { - /* Predefined types. */ - case TDESC_TYPE_BOOL: - return builtin_type (gdbarch)->builtin_bool; - - case TDESC_TYPE_INT8: - return builtin_type (gdbarch)->builtin_int8; - - case TDESC_TYPE_INT16: - return builtin_type (gdbarch)->builtin_int16; - - case TDESC_TYPE_INT32: - return builtin_type (gdbarch)->builtin_int32; - - case TDESC_TYPE_INT64: - return builtin_type (gdbarch)->builtin_int64; - - case TDESC_TYPE_INT128: - return builtin_type (gdbarch)->builtin_int128; - - case TDESC_TYPE_UINT8: - return builtin_type (gdbarch)->builtin_uint8; - - case TDESC_TYPE_UINT16: - return builtin_type (gdbarch)->builtin_uint16; - - case TDESC_TYPE_UINT32: - return builtin_type (gdbarch)->builtin_uint32; - - case TDESC_TYPE_UINT64: - return builtin_type (gdbarch)->builtin_uint64; - - case TDESC_TYPE_UINT128: - return builtin_type (gdbarch)->builtin_uint128; - - case TDESC_TYPE_CODE_PTR: - return builtin_type (gdbarch)->builtin_func_ptr; - - case TDESC_TYPE_DATA_PTR: - return builtin_type (gdbarch)->builtin_data_ptr; - } - - type *gdb_type = tdesc_find_type (gdbarch, this->name.c_str ()); - if (gdb_type != NULL) - return gdb_type; - - switch (this->kind) - { - case TDESC_TYPE_IEEE_SINGLE: - return arch_float_type (gdbarch, -1, "builtin_type_ieee_single", - floatformats_ieee_single); - - case TDESC_TYPE_IEEE_DOUBLE: - return arch_float_type (gdbarch, -1, "builtin_type_ieee_double", - floatformats_ieee_double); - - case TDESC_TYPE_ARM_FPA_EXT: - return arch_float_type (gdbarch, -1, "builtin_type_arm_ext", - floatformats_arm_ext); - - case TDESC_TYPE_I387_EXT: - return arch_float_type (gdbarch, -1, "builtin_type_i387_ext", - floatformats_i387_ext); - } - - internal_error (__FILE__, __LINE__, - "Type \"%s\" has an unknown kind %d", - this->name.c_str (), this->kind); - - return NULL; - } + type *make_gdb_type (struct gdbarch *gdbarch) const override; }; /* tdesc_type for vector types. */ @@ -168,18 +95,7 @@ struct tdesc_type_vector : tdesc_type v.visit (this); } - type *make_gdb_type (struct gdbarch *gdbarch) const override - { - type *vector_gdb_type = tdesc_find_type (gdbarch, this->name.c_str ()); - if (vector_gdb_type != NULL) - return vector_gdb_type; - - type *element_gdb_type = this->element_type->make_gdb_type (gdbarch); - vector_gdb_type = init_vector_type (element_gdb_type, this->count); - TYPE_NAME (vector_gdb_type) = xstrdup (this->name.c_str ()); - - return vector_gdb_type; - } + type *make_gdb_type (struct gdbarch *gdbarch) const override; struct tdesc_type *element_type; int count; @@ -199,151 +115,252 @@ struct tdesc_type_with_fields : tdesc_type v.visit (this); } - type *make_gdb_type_struct (struct gdbarch *gdbarch) const - { - type *struct_gdb_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (struct_gdb_type) = xstrdup (this->name.c_str ()); - TYPE_TAG_NAME (struct_gdb_type) = TYPE_NAME (struct_gdb_type); + type *make_gdb_type_struct (struct gdbarch *gdbarch) const; + type *make_gdb_type_union (struct gdbarch *gdbarch) const; + type *make_gdb_type_flags (struct gdbarch *gdbarch) const; + type *make_gdb_type_enum (struct gdbarch *gdbarch) const; + type *make_gdb_type (struct gdbarch *gdbarch) const override; - for (const tdesc_type_field &f : this->fields) - { - if (f.start != -1 && f.end != -1) - { - /* Bitfield. */ - struct field *fld; - struct type *field_gdb_type; - int bitsize, total_size; - - /* This invariant should be preserved while creating types. */ - gdb_assert (this->size != 0); - if (f.type != NULL) - field_gdb_type = f.type->make_gdb_type (gdbarch); - else if (this->size > 4) - field_gdb_type = builtin_type (gdbarch)->builtin_uint64; - else - field_gdb_type = builtin_type (gdbarch)->builtin_uint32; - - fld = append_composite_type_field_raw - (struct_gdb_type, xstrdup (f.name.c_str ()), field_gdb_type); - - /* For little-endian, BITPOS counts from the LSB of - the structure and marks the LSB of the field. For - big-endian, BITPOS counts from the MSB of the - structure and marks the MSB of the field. Either - 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; - total_size = this->size * TARGET_CHAR_BIT; - if (gdbarch_bits_big_endian (gdbarch)) - SET_FIELD_BITPOS (fld[0], total_size - f.start - bitsize); - else - SET_FIELD_BITPOS (fld[0], f.start); - FIELD_BITSIZE (fld[0]) = bitsize; - } - else - { - gdb_assert (f.start == -1 && f.end == -1); - type *field_gdb_type = f.type->make_gdb_type (gdbarch); - append_composite_type_field (struct_gdb_type, - xstrdup (f.name.c_str ()), - field_gdb_type); - } - } + std::vector fields; + int size; +}; + +type * +tdesc_type_builtin::make_gdb_type (struct gdbarch *gdbarch) const +{ + switch (this->kind) + { + /* Predefined types. */ + case TDESC_TYPE_BOOL: + return builtin_type (gdbarch)->builtin_bool; - if (this->size != 0) - TYPE_LENGTH (struct_gdb_type) = this->size; + case TDESC_TYPE_INT8: + return builtin_type (gdbarch)->builtin_int8; - return struct_gdb_type; - } + case TDESC_TYPE_INT16: + return builtin_type (gdbarch)->builtin_int16; - type *make_gdb_type_union (struct gdbarch *gdbarch) const - { - type *union_gdb_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); - TYPE_NAME (union_gdb_type) = xstrdup (this->name.c_str ()); + case TDESC_TYPE_INT32: + return builtin_type (gdbarch)->builtin_int32; - for (const tdesc_type_field &f : this->fields) - { - type* field_gdb_type = f.type->make_gdb_type (gdbarch); - append_composite_type_field (union_gdb_type, xstrdup (f.name.c_str ()), + case TDESC_TYPE_INT64: + return builtin_type (gdbarch)->builtin_int64; + + case TDESC_TYPE_INT128: + return builtin_type (gdbarch)->builtin_int128; + + case TDESC_TYPE_UINT8: + return builtin_type (gdbarch)->builtin_uint8; + + case TDESC_TYPE_UINT16: + return builtin_type (gdbarch)->builtin_uint16; + + case TDESC_TYPE_UINT32: + return builtin_type (gdbarch)->builtin_uint32; + + case TDESC_TYPE_UINT64: + return builtin_type (gdbarch)->builtin_uint64; + + case TDESC_TYPE_UINT128: + return builtin_type (gdbarch)->builtin_uint128; + + case TDESC_TYPE_CODE_PTR: + return builtin_type (gdbarch)->builtin_func_ptr; + + case TDESC_TYPE_DATA_PTR: + return builtin_type (gdbarch)->builtin_data_ptr; + } + + type *gdb_type = tdesc_find_type (gdbarch, this->name.c_str ()); + if (gdb_type != NULL) + return gdb_type; + + switch (this->kind) + { + case TDESC_TYPE_IEEE_SINGLE: + return arch_float_type (gdbarch, -1, "builtin_type_ieee_single", + floatformats_ieee_single); + + case TDESC_TYPE_IEEE_DOUBLE: + return arch_float_type (gdbarch, -1, "builtin_type_ieee_double", + floatformats_ieee_double); + + case TDESC_TYPE_ARM_FPA_EXT: + return arch_float_type (gdbarch, -1, "builtin_type_arm_ext", + floatformats_arm_ext); + + case TDESC_TYPE_I387_EXT: + return arch_float_type (gdbarch, -1, "builtin_type_i387_ext", + floatformats_i387_ext); + } + + internal_error (__FILE__, __LINE__, + "Type \"%s\" has an unknown kind %d", + this->name.c_str (), this->kind); + + return NULL; +} + +type * +tdesc_type_vector::make_gdb_type (struct gdbarch *gdbarch) const +{ + type *vector_gdb_type = tdesc_find_type (gdbarch, this->name.c_str ()); + if (vector_gdb_type != NULL) + return vector_gdb_type; + + type *element_gdb_type = this->element_type->make_gdb_type (gdbarch); + vector_gdb_type = init_vector_type (element_gdb_type, this->count); + TYPE_NAME (vector_gdb_type) = xstrdup (this->name.c_str ()); + + return vector_gdb_type; +} + +type * +tdesc_type_with_fields::make_gdb_type_struct (struct gdbarch *gdbarch) const +{ + type *struct_gdb_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + TYPE_NAME (struct_gdb_type) = xstrdup (this->name.c_str ()); + TYPE_TAG_NAME (struct_gdb_type) = TYPE_NAME (struct_gdb_type); + + for (const tdesc_type_field &f : this->fields) + { + if (f.start != -1 && f.end != -1) + { + /* Bitfield. */ + struct field *fld; + struct type *field_gdb_type; + int bitsize, total_size; + + /* This invariant should be preserved while creating types. */ + gdb_assert (this->size != 0); + if (f.type != NULL) + field_gdb_type = f.type->make_gdb_type (gdbarch); + else if (this->size > 4) + field_gdb_type = builtin_type (gdbarch)->builtin_uint64; + else + field_gdb_type = builtin_type (gdbarch)->builtin_uint32; + + fld = append_composite_type_field_raw + (struct_gdb_type, xstrdup (f.name.c_str ()), field_gdb_type); + + /* For little-endian, BITPOS counts from the LSB of + the structure and marks the LSB of the field. For + big-endian, BITPOS counts from the MSB of the + structure and marks the MSB of the field. Either + 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; + total_size = this->size * TARGET_CHAR_BIT; + if (gdbarch_bits_big_endian (gdbarch)) + SET_FIELD_BITPOS (fld[0], total_size - f.start - bitsize); + else + SET_FIELD_BITPOS (fld[0], f.start); + FIELD_BITSIZE (fld[0]) = bitsize; + } + else + { + gdb_assert (f.start == -1 && f.end == -1); + type *field_gdb_type = f.type->make_gdb_type (gdbarch); + append_composite_type_field (struct_gdb_type, + xstrdup (f.name.c_str ()), + field_gdb_type); + } + } + + if (this->size != 0) + TYPE_LENGTH (struct_gdb_type) = this->size; + + return struct_gdb_type; +} + +type * +tdesc_type_with_fields::make_gdb_type_union (struct gdbarch *gdbarch) const +{ + type *union_gdb_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); + TYPE_NAME (union_gdb_type) = xstrdup (this->name.c_str ()); + + for (const tdesc_type_field &f : this->fields) + { + type* field_gdb_type = f.type->make_gdb_type (gdbarch); + append_composite_type_field (union_gdb_type, xstrdup (f.name.c_str ()), field_gdb_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 - vector types to show up automatically in "info vector". */ - if (TYPE_VECTOR (field_gdb_type)) - TYPE_VECTOR (union_gdb_type) = 1; - } + /* 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 + vector types to show up automatically in "info vector". */ + if (TYPE_VECTOR (field_gdb_type)) + TYPE_VECTOR (union_gdb_type) = 1; + } - return union_gdb_type; - } + return union_gdb_type; +} - type *make_gdb_type_flags (struct gdbarch *gdbarch) const - { - type *flags_gdb_type = arch_flags_type (gdbarch, this->name.c_str (), +type * +tdesc_type_with_fields::make_gdb_type_flags (struct gdbarch *gdbarch) const +{ + type *flags_gdb_type = arch_flags_type (gdbarch, this->name.c_str (), this->size * TARGET_CHAR_BIT); - for (const tdesc_type_field &f : this->fields) - { + for (const tdesc_type_field &f : this->fields) + { int bitsize = f.end - f.start + 1; gdb_assert (f.type != NULL); type *field_gdb_type = f.type->make_gdb_type (gdbarch); append_flags_type_field (flags_gdb_type, f.start, bitsize, field_gdb_type, f.name.c_str ()); - } + } - return flags_gdb_type; - } + return flags_gdb_type; +} - type *make_gdb_type_enum (struct gdbarch *gdbarch) const - { - type *enum_gdb_type = arch_type (gdbarch, TYPE_CODE_ENUM, +type * +tdesc_type_with_fields::make_gdb_type_enum (struct gdbarch *gdbarch) const +{ + type *enum_gdb_type = arch_type (gdbarch, TYPE_CODE_ENUM, this->size * TARGET_CHAR_BIT, this->name.c_str ()); - TYPE_UNSIGNED (enum_gdb_type) = 1; - for (const tdesc_type_field &f : this->fields) - { + TYPE_UNSIGNED (enum_gdb_type) = 1; + for (const tdesc_type_field &f : this->fields) + { struct field *fld = append_composite_type_field_raw (enum_gdb_type, xstrdup (f.name.c_str ()), NULL); SET_FIELD_BITPOS (fld[0], f.start); - } + } - return enum_gdb_type; - } + return enum_gdb_type; +} - type *make_gdb_type (struct gdbarch *gdbarch) const override - { - type *gdb_type = tdesc_find_type (gdbarch, this->name.c_str ()); - if (gdb_type != NULL) - return gdb_type; +type * +tdesc_type_with_fields::make_gdb_type (struct gdbarch *gdbarch) const +{ + type *gdb_type = tdesc_find_type (gdbarch, this->name.c_str ()); + if (gdb_type != NULL) + return gdb_type; - switch (this->kind) + switch (this->kind) { - case TDESC_TYPE_STRUCT: - return make_gdb_type_struct (gdbarch); - case TDESC_TYPE_UNION: - return make_gdb_type_union (gdbarch); - case TDESC_TYPE_FLAGS: - return make_gdb_type_flags (gdbarch); - case TDESC_TYPE_ENUM: - return make_gdb_type_enum (gdbarch); + case TDESC_TYPE_STRUCT: + return make_gdb_type_struct (gdbarch); + case TDESC_TYPE_UNION: + return make_gdb_type_union (gdbarch); + case TDESC_TYPE_FLAGS: + return make_gdb_type_flags (gdbarch); + case TDESC_TYPE_ENUM: + return make_gdb_type_enum (gdbarch); } - internal_error (__FILE__, __LINE__, - "Type \"%s\" has an unknown kind %d", - this->name.c_str (), this->kind); - - return NULL; - } + internal_error (__FILE__, __LINE__, + "Type \"%s\" has an unknown kind %d", + this->name.c_str (), this->kind); - std::vector fields; - int size; -}; + return NULL; +} /* A target description. */