diff options
author | Alan Hayward <alan.hayward@arm.com> | 2018-04-18 11:28:51 +0100 |
---|---|---|
committer | Alan Hayward <alan.hayward@arm.com> | 2018-04-18 14:00:30 +0100 |
commit | ea3e7d717982e3c467edc7886b1d6cc2807195af (patch) | |
tree | a50ee7f7b3986c136909b29040ff67bb493fb37f /gdb/gdbserver | |
parent | a7504f87d41694d441fabb3308631df4d2750c24 (diff) | |
download | binutils-ea3e7d717982e3c467edc7886b1d6cc2807195af.zip binutils-ea3e7d717982e3c467edc7886b1d6cc2807195af.tar.gz binutils-ea3e7d717982e3c467edc7886b1d6cc2807195af.tar.bz2 |
Commonise tdesc_reg and makes use of it in gdbserver tdesc
gdb/
* Makefile.in: Add arch/tdesc.c
* common/tdesc.c: New file.
* common/tdesc.h (tdesc_element_visitor): Move to here.
(tdesc_element): Likewise.
(tdesc_reg): Likewise.
(tdesc_reg_up): Likewise.
* regformats/regdef.h (reg): Add offset to constructors.
* target-descriptions.c (tdesc_element_visitor): Move from here.
(tdesc_element): Likewise.
(tdesc_reg): Likewise.
(tdesc_reg_up): Likewise.
gdbserver/
* Makefile.in: Add common/tdesc.c
* tdesc.c (init_target_desc): init all reg_defs from register vector.
(tdesc_create_reg): Create tdesc_reg.
* tdesc.h (tdesc_feature): Add register vector.
Diffstat (limited to 'gdb/gdbserver')
-rw-r--r-- | gdb/gdbserver/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/gdbserver/Makefile.in | 3 | ||||
-rw-r--r-- | gdb/gdbserver/tdesc.c | 23 | ||||
-rw-r--r-- | gdb/gdbserver/tdesc.h | 5 |
4 files changed, 30 insertions, 9 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 8e0f13a..29355bb 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,11 @@ +2018-04-18 Alan Hayward <alan.hayward@arm.com> + + * Makefile.in: Add common/tdesc.c + * tdesc.c (init_target_desc): init all reg_defs from register + vector. + (tdesc_create_reg): Create tdesc_reg. + * tdesc.h (tdesc_feature): Add register vector. + 2018-03-30 Simon Marchi <simon.marchi@polymtl.ca> * tdesc.h (struct target_desc) <features>: Change type to diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 75fbf7e..4a54235 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -215,6 +215,7 @@ SFILES = \ $(srcdir)/common/print-utils.c \ $(srcdir)/common/ptid.c \ $(srcdir)/common/rsp-low.c \ + $(srcdir)/common/tdesc.c \ $(srcdir)/common/vec.c \ $(srcdir)/common/xml-utils.c \ $(srcdir)/nat/linux-btrace.c \ @@ -258,6 +259,7 @@ OBS = \ common/rsp-low.o \ common/signals.o \ common/signals-state-save-restore.o \ + common/tdesc.o \ common/vec.o \ common/xml-utils.o \ debug.o \ @@ -403,6 +405,7 @@ IPA_OBJS = \ common/format-ipa.o \ common/print-utils-ipa.o \ common/rsp-low-ipa.o \ + common/tdesc-ipa.o \ common/vec-ipa.o \ regcache-ipa.o \ remote-utils-ipa.o \ diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c index 9f00ecf..afe0187 100644 --- a/gdb/gdbserver/tdesc.c +++ b/gdb/gdbserver/tdesc.c @@ -54,10 +54,19 @@ init_target_desc (struct target_desc *tdesc) { int offset = 0; - for (reg ® : tdesc->reg_defs) + /* Go through all the features and populate reg_defs. */ + for (const tdesc_reg_up &treg : tdesc->registers) { - reg.offset = offset; - offset += reg.size; + int regnum = treg->target_regnum; + + /* Register number will increase (possibly with gaps) or be zero. */ + gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ()); + + if (regnum != 0) + tdesc->reg_defs.resize (regnum, reg (offset)); + + tdesc->reg_defs.emplace_back (treg->name.c_str (), offset, treg->bitsize); + offset += treg->bitsize; } tdesc->registers_size = offset / 8; @@ -222,12 +231,10 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name, { struct target_desc *tdesc = (struct target_desc *) feature; - gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ()); - - if (regnum != 0) - tdesc->reg_defs.resize (regnum); + tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore, + group, bitsize, type); - tdesc->reg_defs.emplace_back (name, bitsize); + tdesc->registers.emplace_back (reg); } /* See common/tdesc.h. */ diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h index 85139d9..8eb88ee 100644 --- a/gdb/gdbserver/tdesc.h +++ b/gdb/gdbserver/tdesc.h @@ -25,7 +25,10 @@ #include <vector> struct tdesc_feature -{}; +{ + /* The registers associated with this feature. */ + std::vector<tdesc_reg_up> registers; +}; /* A target description. Inherit from tdesc_feature so that target_desc can be used as tdesc_feature. */ |