This is the mail archive of the
gdb-cvs@sourceware.org
mailing list for the GDB project.
[binutils-gdb] Class-fy target_desc
- From: Yao Qi <qiyao at sourceware dot org>
- To: gdb-cvs at sourceware dot org
- Date: 26 Jul 2017 09:46:45 -0000
- Subject: [binutils-gdb] Class-fy target_desc
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b468ff4cbf14744d512e464b4be9681d3e0302ad
commit b468ff4cbf14744d512e464b4be9681d3e0302ad
Author: Yao Qi <yao.qi@linaro.org>
Date: Wed Jul 26 10:37:17 2017 +0100
Class-fy target_desc
This patch adds ctor and dtor in target_desc.
gdb:
2017-07-26 Yao Qi <yao.qi@linaro.org>
* 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:
---
gdb/ChangeLog | 7 ++++++
gdb/target-descriptions.c | 64 +++++++++++++++++++++++++++--------------------
2 files changed, 44 insertions(+), 27 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b3f9c7b..be39af6 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2017-07-26 Yao Qi <yao.qi@linaro.org>
+
+ * 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 <jhb@FreeBSD.org>
* configure.nat: Add "-lkvm" for NetBSD/sparc64 and fix typo.
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index 0b5b46f..9484f01 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 *