From: Yao Qi Date: Wed, 26 Jul 2017 09:37:17 +0000 (+0100) Subject: Class-fy target_desc X-Git-Tag: hjl/gpoff-backup~142 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b468ff4cbf14744d512e464b4be9681d3e0302ad;p=thirdparty%2Fbinutils-gdb.git Class-fy target_desc This patch adds ctor and dtor in target_desc. gdb: 2017-07-26 Yao Qi * target-descriptions.c (target_desc): Add ctor and dtor. Do in-class initialization. (tdesc_create_feature): Call new instead of XCNEW. (free_target_description): Ue delete. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b3f9c7b061e..be39af654b7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2017-07-26 Yao Qi + + * target-descriptions.c (target_desc): Add ctor and dtor. Do + in-class initialization. + (tdesc_create_feature): Call new instead of XCNEW. + (free_target_description): Ue delete. + 2017-07-25 John Baldwin * configure.nat: Add "-lkvm" for NetBSD/sparc64 and fix typo. diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 0b5b46f5a55..9484f01c9a4 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -267,21 +267,51 @@ DEF_VEC_P(arch_p); struct target_desc { + target_desc () + {} + + ~target_desc () + { + struct tdesc_feature *feature; + struct property *prop; + int ix; + + for (ix = 0; + VEC_iterate (tdesc_feature_p, features, ix, feature); + ix++) + delete feature; + VEC_free (tdesc_feature_p, features); + + for (ix = 0; + VEC_iterate (property_s, properties, ix, prop); + ix++) + { + xfree (prop->key); + xfree (prop->value); + } + + VEC_free (property_s, properties); + VEC_free (arch_p, compatible); + } + + target_desc (const target_desc &) = delete; + void operator= (const target_desc &) = delete; + /* The architecture reported by the target, if any. */ - const struct bfd_arch_info *arch; + const struct bfd_arch_info *arch = NULL; /* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN otherwise. */ - enum gdb_osabi osabi; + enum gdb_osabi osabi = GDB_OSABI_UNKNOWN; /* The list of compatible architectures reported by the target. */ - VEC(arch_p) *compatible; + VEC(arch_p) *compatible = NULL; /* Any architecture-specific properties specified by the target. */ - VEC(property_s) *properties; + VEC(property_s) *properties = NULL; /* The features associated with this target. */ - VEC(tdesc_feature_p) *features; + VEC(tdesc_feature_p) *features = NULL; }; /* Per-architecture data associated with a target description. The @@ -1551,35 +1581,15 @@ tdesc_create_feature (struct target_desc *tdesc, const char *name) struct target_desc * allocate_target_description (void) { - return XCNEW (struct target_desc); + return new target_desc (); } static void free_target_description (void *arg) { struct target_desc *target_desc = (struct target_desc *) arg; - struct tdesc_feature *feature; - struct property *prop; - int ix; - - for (ix = 0; - VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature); - ix++) - delete feature; - VEC_free (tdesc_feature_p, target_desc->features); - - for (ix = 0; - VEC_iterate (property_s, target_desc->properties, ix, prop); - ix++) - { - xfree (prop->key); - xfree (prop->value); - } - VEC_free (property_s, target_desc->properties); - - VEC_free (arch_p, target_desc->compatible); - xfree (target_desc); + delete target_desc; } struct cleanup *