aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver/tdesc.h
diff options
context:
space:
mode:
authorYao Qi <yao.qi@linaro.org>2017-09-05 09:54:53 +0100
committerYao Qi <yao.qi@linaro.org>2017-09-05 09:54:53 +0100
commitf49ff00066929bf7c38f9c89ad640561bbb331f6 (patch)
treeb410bbcba3cb5b90d02547b31e4f9efd0c0a7a8f /gdb/gdbserver/tdesc.h
parent2b68ef2f11daef3ab3c6941ebf53dfcd0fb79fbf (diff)
downloadfsf-binutils-gdb-f49ff00066929bf7c38f9c89ad640561bbb331f6.zip
fsf-binutils-gdb-f49ff00066929bf7c38f9c89ad640561bbb331f6.tar.gz
fsf-binutils-gdb-f49ff00066929bf7c38f9c89ad640561bbb331f6.tar.bz2
[GDBserver] Centralize tdesc for i386-linux
tdesc_i386_XXX_linux is used in many places in linux-x86-low.c and this patch adds a new function i386_linux_read_description to return the right tdesc according to xcr0. i386_linux_read_description is quite similar to the counterpart in GDB, and the following patch will share the duplicated code, so this patch adds arch/tdesc.h includes the declarations of various tdesc apis which are used by the shared code. The generated c feature files can include arch/tdesc.h only. gdb/gdbserver: 2017-09-05 Yao Qi <yao.qi@linaro.org> * configure.srv (srv_tgtobj): Append linux-x86-tdesc.o. (ipa_obj): Likewise. * linux-i386-ipa.c: Include common/x86-xstate.h (get_ipa_tdesc): Call i386_linux_read_description. (initialize_low_tracepoint): Don't call init_registers_XXX functions, call initialize_low_tdesc instead. * linux-x86-low.c (x86_linux_read_description): Call i386_linux_read_description. (initialize_low_arch): Don't call init_registers_i386_XXX functions, call initialize_low_tdesc. * linux-x86-tdesc.c: New file. * linux-x86-tdesc.h (x86_linux_tdesc): New X86_TDESC_LAST. (i386_get_ipa_tdesc_idx): Declare. (i386_get_ipa_tdesc): Declare. (initialize_low_tdesc): Declare. gdb: 2017-09-05 Yao Qi <yao.qi@linaro.org> * arch/tdesc.h: New file. * regformats/regdat.sh: Generate code using tdesc_create_reg. * target-descriptions.c: Update comments. * target-descriptions.h: Include "arch/tdesc.h". Remove the declarations. * features/i386/32bit-avx.c: Re-generated. * features/i386/32bit-avx512.c: Re-generated. * features/i386/32bit-core.c: Re-generated. * features/i386/32bit-linux.c: Re-generated. * features/i386/32bit-mpx.c: Re-generated. * features/i386/32bit-pkeys.c: Re-generated. * features/i386/32bit-sse.c: Re-generated.
Diffstat (limited to 'gdb/gdbserver/tdesc.h')
-rw-r--r--gdb/gdbserver/tdesc.h29
1 files changed, 25 insertions, 4 deletions
diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h
index 424a2fd..50d0364 100644
--- a/gdb/gdbserver/tdesc.h
+++ b/gdb/gdbserver/tdesc.h
@@ -19,14 +19,20 @@
#ifndef TDESC_H
#define TDESC_H
+#include "arch/tdesc.h"
+
struct reg;
typedef struct reg *tdesc_reg_p;
DEF_VEC_P(tdesc_reg_p);
-/* A target description. */
+struct tdesc_feature
+{};
+
+/* A target description. Inherit from tdesc_feature so that target_desc
+ can be used as tdesc_feature. */
-struct target_desc
+struct target_desc : tdesc_feature
{
/* A vector of elements of register definitions that
describe the inferior's register set. */
@@ -38,13 +44,28 @@ struct target_desc
#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;
+ const char *xmltarget = NULL;
+
+public:
+ target_desc ()
+ : reg_defs (NULL), 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);
+ }
#endif
};