[PowerPC] Consolidate linux vector regset sizes
[deliverable/binutils-gdb.git] / gdb / gdbserver / tdesc.h
index 49c82c6c1697f3e0280418334e2f1353289d77c2..989c12896ef5ac36a816a413a260fb3a06a56c69 100644 (file)
@@ -1,5 +1,5 @@
 /* Target description definitions for remote server for GDB.
-   Copyright (C) 2012-2017 Free Software Foundation, Inc.
+   Copyright (C) 2012-2018 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #ifndef TDESC_H
 #define TDESC_H
 
-#include "arch/tdesc.h"
+#include "common/tdesc.h"
 
 #include "regdef.h"
-
-typedef struct reg *tdesc_reg_p;
-DEF_VEC_P(tdesc_reg_p);
-
-struct tdesc_feature
-{};
+#include <vector>
 
 /* A target description.  Inherit from tdesc_feature so that target_desc
    can be used as tdesc_feature.  */
 
-struct target_desc : tdesc_feature
+struct target_desc : tdesc_element
 {
   /* A vector of elements of register definitions that
      describe the inferior's register set.  */
-  VEC(tdesc_reg_p) *reg_defs;
+  std::vector<struct reg> reg_defs;
 
   /* The register cache size, in bytes.  */
   int registers_size;
 
+  /* XML features in this target description.  */
+  std::vector<tdesc_feature_up> features;
+
 #ifndef IN_PROCESS_AGENT
   /* An array of register names.  These are the "expedite" registers:
      registers whose values are sent along with stop replies.  */
@@ -49,64 +47,34 @@ struct target_desc : tdesc_feature
   /* Defines what to return when looking for the "target.xml" file in
      response to qXfer:features:read.  Its contents can either be
      verbatim XML code (prefixed with a '@') or else the name of the
-     actual XML file to be used in place of "target.xml".  */
-  const char *xmltarget = NULL;
+     actual XML file to be used in place of "target.xml".
+
+     If NULL then its content will be generated by parsing the target
+     description into xml.  */
+  mutable const char *xmltarget = NULL;
+
+  /* The value of <architecture> element in the XML, replying GDB.  */
+  const char *arch = NULL;
+
+  /* The value of <osabi> element in the XML, replying GDB.  */
+  const char *osabi = NULL;
 
 public:
   target_desc ()
-    : reg_defs (NULL), registers_size (0)
+    : registers_size (0)
   {}
 
-  ~target_desc ()
-  {
-    int i;
-    struct reg *reg;
-
-    for (i = 0; VEC_iterate (tdesc_reg_p, reg_defs, i, reg); i++)
-      xfree (reg);
-    VEC_free (tdesc_reg_p, reg_defs);
-  }
+  ~target_desc ();
 
-  bool operator== (const target_desc &other) const
-  {
-    if (VEC_length (tdesc_reg_p, reg_defs)
-       != VEC_length (tdesc_reg_p, other.reg_defs))
-      return false;
-
-    struct reg *reg;
-
-    for (int ix = 0;
-        VEC_iterate (tdesc_reg_p, reg_defs, ix, reg);
-        ix++)
-      {
-       struct reg *reg2
-         = VEC_index (tdesc_reg_p, other.reg_defs, ix);
-
-       if (reg != reg2 && *reg != *reg2)
-         return false;
-      }
-
-    /* Compare expedite_regs.  */
-    int i = 0;
-    for (; expedite_regs[i] != NULL; i++)
-      {
-       if (strcmp (expedite_regs[i], other.expedite_regs[i]) != 0)
-         return false;
-      }
-    if (other.expedite_regs[i] != NULL)
-      return false;
-
-    if (strcmp (xmltarget, other.xmltarget) != 0)
-      return false;
-
-    return true;
-  }
+  bool operator== (const target_desc &other) const;
 
   bool operator!= (const target_desc &other) const
   {
     return !(*this == other);
   }
 #endif
+
+  void accept (tdesc_element_visitor &v) const override;
 };
 
 /* Copy target description SRC to DEST.  */
@@ -114,9 +82,11 @@ public:
 void copy_target_description (struct target_desc *dest,
                              const struct target_desc *src);
 
-/* Initialize TDESC.  */
+/* Initialize TDESC, and then set its expedite_regs field to
+   EXPEDITE_REGS.  */
 
-void init_target_desc (struct target_desc *tdesc);
+void init_target_desc (struct target_desc *tdesc,
+                      const char **expedite_regs);
 
 /* Return the current inferior's target description.  Never returns
    NULL.  */
This page took 0.025156 seconds and 4 git commands to generate.