aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Hayward <alan.hayward@arm.com>2018-03-26 10:39:24 +0100
committerAlan Hayward <alan.hayward@arm.com>2018-03-26 10:54:55 +0100
commit5cd3e386e0ac84b0ba1e0737853f4504ba24f677 (patch)
tree16ec0192a901f38def1cef893c650f8aec1912ab
parentaf9d57d205eb656a01b9688c3efa591ad8f1a2a9 (diff)
downloadgdb-5cd3e386e0ac84b0ba1e0737853f4504ba24f677.zip
gdb-5cd3e386e0ac84b0ba1e0737853f4504ba24f677.tar.gz
gdb-5cd3e386e0ac84b0ba1e0737853f4504ba24f677.tar.bz2
Make gdbserver reg_defs a vector of objects
gdb/ * regformats/regdef.h (reg): Add constructors. gdb/gdbserver/ * regcache.c (find_register_by_number): Return a ref. (find_regno): Use references. (register_size): Likewise. (register_data): Likewise. * tdesc.c (target_desc::~target_desc): Remove free calls. (target_desc::operator==): Use std::vector compare. (init_target_desc): Use reference. (tdesc_create_reg): Use reg constructors. * tdesc.h (struct target_desc): Replace pointer with object.
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/gdbserver/ChangeLog12
-rw-r--r--gdb/gdbserver/regcache.c10
-rw-r--r--gdb/gdbserver/tdesc.c39
-rw-r--r--gdb/gdbserver/tdesc.h2
-rw-r--r--gdb/regformats/regdef.h12
6 files changed, 42 insertions, 37 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 57f4f77..20bf941 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2018-03-26 Alan Hayward <alan.hayward@arm.com>
+
+ * regformats/regdef.h (reg): Add constructors.
+
2018-03-25 Pedro Alves <palves@redhat.com>
* eval.c (evaluate_funcall): Swap OP_VAR_MSYM_VALUE/OP_VAR_VALUE
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index c07d40a..8e6afef 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,15 @@
+2018-03-26 Alan Hayward <alan.hayward@arm.com>
+
+ * regcache.c (find_register_by_number): Return a ref.
+ (find_regno): Use references.
+ (register_size): Likewise.
+ (register_data): Likewise.
+ * tdesc.c (target_desc::~target_desc): Remove free calls.
+ (target_desc::operator==): Use std::vector compare.
+ (init_target_desc): Use reference.
+ (tdesc_create_reg): Use reg constructors.
+ * tdesc.h (struct target_desc): Replace pointer with object.
+
2018-03-23 Alan Hayward <alan.hayward@arm.com>
* regcache.c (find_register_by_number): Make static.
diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c
index d6511fd..cbdf766 100644
--- a/gdb/gdbserver/regcache.c
+++ b/gdb/gdbserver/regcache.c
@@ -196,9 +196,9 @@ regcache_cpy (struct regcache *dst, struct regcache *src)
dst->registers_valid = src->registers_valid;
}
-/* Return a pointer to the description of register N. */
+/* Return a reference to the description of register N. */
-static const struct reg *
+static const struct reg &
find_register_by_number (const struct target_desc *tdesc, int n)
{
return tdesc->reg_defs[n];
@@ -251,7 +251,7 @@ find_regno (const struct target_desc *tdesc, const char *name)
{
for (int i = 0; i < tdesc->reg_defs.size (); ++i)
{
- if (strcmp (name, find_register_by_number (tdesc, i)->name) == 0)
+ if (strcmp (name, find_register_by_number (tdesc, i).name) == 0)
return i;
}
internal_error (__FILE__, __LINE__, "Unknown register %s requested",
@@ -288,7 +288,7 @@ register_cache_size (const struct target_desc *tdesc)
int
register_size (const struct target_desc *tdesc, int n)
{
- return find_register_by_number (tdesc, n)->size / 8;
+ return find_register_by_number (tdesc, n).size / 8;
}
/* See common/common-regcache.h. */
@@ -303,7 +303,7 @@ static unsigned char *
register_data (struct regcache *regcache, int n, int fetch)
{
return (regcache->registers
- + find_register_by_number (regcache->tdesc, n)->offset / 8);
+ + find_register_by_number (regcache->tdesc, n).offset / 8);
}
/* Supply register N, whose contents are stored in BUF, to REGCACHE.
diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c
index e50a848..cec7a66 100644
--- a/gdb/gdbserver/tdesc.c
+++ b/gdb/gdbserver/tdesc.c
@@ -25,9 +25,6 @@ target_desc::~target_desc ()
{
int i;
- for (reg *reg : reg_defs)
- xfree (reg);
-
xfree ((char *) arch);
xfree ((char *) osabi);
@@ -40,18 +37,9 @@ target_desc::~target_desc ()
bool target_desc::operator== (const target_desc &other) const
{
- if (reg_defs.size () != other.reg_defs.size ())
+ if (reg_defs != other.reg_defs)
return false;
- for (int i = 0; i < reg_defs.size (); ++i)
- {
- struct reg *reg = reg_defs[i];
- struct reg *reg2 = other.reg_defs[i];
-
- if (reg != reg2 && *reg != *reg2)
- return false;
- }
-
/* Compare expedite_regs. */
int i = 0;
for (; expedite_regs[i] != NULL; i++)
@@ -72,10 +60,10 @@ init_target_desc (struct target_desc *tdesc)
{
int offset = 0;
- for (reg *reg : tdesc->reg_defs)
+ for (reg &reg : tdesc->reg_defs)
{
- reg->offset = offset;
- offset += reg->size;
+ reg.offset = offset;
+ offset += reg.size;
}
tdesc->registers_size = offset / 8;
@@ -241,23 +229,12 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name,
{
struct target_desc *tdesc = (struct target_desc *) feature;
- while (tdesc->reg_defs.size () < regnum)
- {
- struct reg *reg = XCNEW (struct reg);
-
- reg->name = "";
- reg->size = 0;
- tdesc->reg_defs.push_back (reg);
- }
-
- gdb_assert (regnum == 0
- || regnum == tdesc->reg_defs.size ());
+ gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ());
- struct reg *reg = XCNEW (struct reg);
+ if (regnum != 0)
+ tdesc->reg_defs.resize (regnum);
- reg->name = name;
- reg->size = bitsize;
- tdesc->reg_defs.push_back (reg);
+ tdesc->reg_defs.emplace_back (name, bitsize);
}
/* See common/tdesc.h. */
diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h
index 4513ea7..a625443 100644
--- a/gdb/gdbserver/tdesc.h
+++ b/gdb/gdbserver/tdesc.h
@@ -34,7 +34,7 @@ struct target_desc : tdesc_feature
{
/* A vector of elements of register definitions that
describe the inferior's register set. */
- std::vector<struct reg *> reg_defs;
+ std::vector<struct reg> reg_defs;
/* The register cache size, in bytes. */
int registers_size;
diff --git a/gdb/regformats/regdef.h b/gdb/regformats/regdef.h
index 262d03c..4775e86 100644
--- a/gdb/regformats/regdef.h
+++ b/gdb/regformats/regdef.h
@@ -21,6 +21,18 @@
struct reg
{
+ reg ()
+ : name (""),
+ offset (0),
+ size (0)
+ {}
+
+ reg (const char *_name, int _size)
+ : name (_name),
+ offset (0),
+ size (_size)
+ {}
+
/* The name of this register - NULL for pad entries. */
const char *name;