/* 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
-struct reg;
+#include "common/tdesc.h"
-/* A target description. */
+#include "regdef.h"
+#include <vector>
-struct target_desc
+/* A target description. Inherit from tdesc_feature so that target_desc
+ can be used as tdesc_feature. */
+
+struct target_desc : tdesc_element
{
- /* An array of NUM_REGISTERS elements of register definitions that
+ /* A vector of elements of register definitions that
describe the inferior's register set. */
- struct reg *reg_defs;
-
- /* The number of registers in inferior's register set (and thus in
- the regcache). */
- int num_registers;
+ 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. */
- const char **expedite_regs;
+ const char **expedite_regs = NULL;
/* 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;
+ 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 ()
+ : registers_size (0)
+ {}
+
+ ~target_desc ();
+
+ 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. */
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. */