diff options
author | Yao Qi <yao.qi@linaro.org> | 2017-09-05 09:54:53 +0100 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2017-09-05 09:54:53 +0100 |
commit | f49ff00066929bf7c38f9c89ad640561bbb331f6 (patch) | |
tree | b410bbcba3cb5b90d02547b31e4f9efd0c0a7a8f /gdb/gdbserver/tdesc.h | |
parent | 2b68ef2f11daef3ab3c6941ebf53dfcd0fb79fbf (diff) | |
download | fsf-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.h | 29 |
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 }; |