/* Target description definitions for remote server for GDB.
- Copyright (C) 2012-2015 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
+struct tdesc_feature
+{};
+
+/* A target description. Inherit from tdesc_feature so that target_desc
+ can be used as tdesc_feature. */
+
+struct target_desc : tdesc_feature
{
- /* 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;
+#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".
+
+ It can be NULL, then, its content is got from the following three
+ fields features, arch, and osabi in tdesc_get_features_xml. */
+ const char *xmltarget = NULL;
+
+ /* XML features in this target description. */
+ VEC (char_ptr) *features = 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
};
/* Copy target description SRC to DEST. */
const struct target_desc *current_target_desc (void);
+#ifndef IN_PROCESS_AGENT
+const char *tdesc_get_features_xml (struct target_desc *tdesc);
+#endif
+
#endif /* TDESC_H */