]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Class-fy target_desc
authorYao Qi <yao.qi@linaro.org>
Wed, 26 Jul 2017 09:37:17 +0000 (10:37 +0100)
committerYao Qi <yao.qi@linaro.org>
Wed, 26 Jul 2017 09:37:17 +0000 (10:37 +0100)
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.

gdb/ChangeLog
gdb/target-descriptions.c

index b3f9c7b061efe6cb8146ced6fea939169ad56284..be39af654b78b83a85eb4689f1b2d310b4031251 100644 (file)
@@ -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.
index 0b5b46f5a551465bc57ee2c0f44444816629ca4b..9484f01c9a420e3164f5d471f30f0d2ad4cab269 100644 (file)
@@ -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 *