Use std::vector on tdesc->reg_defs (gdbserver/tdesc.h)
This is a followup patch to the build breakage fix on AArch64. While doing the fix, I found it better to convert tdesc->reg_defs (on gdbserver/tdesc.h) from using VEC to using std::vector. This makes the code easier to read and maintain, and also is one more step towards the C++fication. Regtested on BuildBot. 2017-09-16 Sergio Durigan Junior <sergiodj@redhat.com> * regcache.c (get_thread_regcache): Update code to use "std::vector" instead of "VEC" for "target_desc.reg_defs". (regcache_cpy): Likewise. (registers_to_string): Likewise. (registers_from_string): Likewise. (find_regno): Likewise. (supply_regblock): Likewise. (regcache_raw_read_unsigned): Likewise. * tdesc.c (init_target_desc): Likewise. (tdesc_create_reg): Likewise. * tdesc.h: Remove declaration of "tdesc_reg_p". Include <vector>. (struct target_desc) <reg_defs>: Convert to "std::vector". (target_desc): Do not initialize "reg_defs". (~target_desc): Update code to use "std::vector" instead of "VEC" for "target_desc.reg_defs". (operator==): Likewise.
This commit is contained in:
parent
ebee3285b3
commit
c4dfafabc5
4 changed files with 52 additions and 45 deletions
|
@ -1,3 +1,22 @@
|
||||||
|
2017-09-16 Sergio Durigan Junior <sergiodj@redhat.com>
|
||||||
|
|
||||||
|
* regcache.c (get_thread_regcache): Update code to use "std::vector"
|
||||||
|
instead of "VEC" for "target_desc.reg_defs".
|
||||||
|
(regcache_cpy): Likewise.
|
||||||
|
(registers_to_string): Likewise.
|
||||||
|
(registers_from_string): Likewise.
|
||||||
|
(find_regno): Likewise.
|
||||||
|
(supply_regblock): Likewise.
|
||||||
|
(regcache_raw_read_unsigned): Likewise.
|
||||||
|
* tdesc.c (init_target_desc): Likewise.
|
||||||
|
(tdesc_create_reg): Likewise.
|
||||||
|
* tdesc.h: Remove declaration of "tdesc_reg_p". Include <vector>.
|
||||||
|
(struct target_desc) <reg_defs>: Convert to "std::vector".
|
||||||
|
(target_desc): Do not initialize "reg_defs".
|
||||||
|
(~target_desc): Update code to use "std::vector" instead of "VEC"
|
||||||
|
for "target_desc.reg_defs".
|
||||||
|
(operator==): Likewise.
|
||||||
|
|
||||||
2017-09-15 Simon Marchi <simon.marchi@ericsson.com>
|
2017-09-15 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
* inferiors.h (thread_to_gdb_id): Remove.
|
* inferiors.h (thread_to_gdb_id): Remove.
|
||||||
|
|
|
@ -53,9 +53,8 @@ get_thread_regcache (struct thread_info *thread, int fetch)
|
||||||
|
|
||||||
current_thread = thread;
|
current_thread = thread;
|
||||||
/* Invalidate all registers, to prevent stale left-overs. */
|
/* Invalidate all registers, to prevent stale left-overs. */
|
||||||
if (!VEC_empty (tdesc_reg_p, regcache->tdesc->reg_defs))
|
|
||||||
memset (regcache->register_status, REG_UNAVAILABLE,
|
memset (regcache->register_status, REG_UNAVAILABLE,
|
||||||
VEC_length (tdesc_reg_p, regcache->tdesc->reg_defs));
|
regcache->tdesc->reg_defs.size ());
|
||||||
fetch_inferior_registers (regcache, -1);
|
fetch_inferior_registers (regcache, -1);
|
||||||
current_thread = saved_thread;
|
current_thread = saved_thread;
|
||||||
regcache->registers_valid = 1;
|
regcache->registers_valid = 1;
|
||||||
|
@ -146,10 +145,9 @@ init_register_cache (struct regcache *regcache,
|
||||||
= (unsigned char *) xcalloc (1, tdesc->registers_size);
|
= (unsigned char *) xcalloc (1, tdesc->registers_size);
|
||||||
regcache->registers_owned = 1;
|
regcache->registers_owned = 1;
|
||||||
regcache->register_status
|
regcache->register_status
|
||||||
= (unsigned char *) xmalloc (VEC_length (tdesc_reg_p, tdesc->reg_defs));
|
= (unsigned char *) xmalloc (tdesc->reg_defs.size ());
|
||||||
if (!VEC_empty (tdesc_reg_p, tdesc->reg_defs))
|
|
||||||
memset ((void *) regcache->register_status, REG_UNAVAILABLE,
|
memset ((void *) regcache->register_status, REG_UNAVAILABLE,
|
||||||
VEC_length (tdesc_reg_p, tdesc->reg_defs));
|
tdesc->reg_defs.size ());
|
||||||
#else
|
#else
|
||||||
gdb_assert_not_reached ("can't allocate memory from the heap");
|
gdb_assert_not_reached ("can't allocate memory from the heap");
|
||||||
#endif
|
#endif
|
||||||
|
@ -206,7 +204,7 @@ regcache_cpy (struct regcache *dst, struct regcache *src)
|
||||||
#ifndef IN_PROCESS_AGENT
|
#ifndef IN_PROCESS_AGENT
|
||||||
if (dst->register_status != NULL && src->register_status != NULL)
|
if (dst->register_status != NULL && src->register_status != NULL)
|
||||||
memcpy (dst->register_status, src->register_status,
|
memcpy (dst->register_status, src->register_status,
|
||||||
VEC_length (tdesc_reg_p, src->tdesc->reg_defs));
|
src->tdesc->reg_defs.size ());
|
||||||
#endif
|
#endif
|
||||||
dst->registers_valid = src->registers_valid;
|
dst->registers_valid = src->registers_valid;
|
||||||
}
|
}
|
||||||
|
@ -219,11 +217,11 @@ registers_to_string (struct regcache *regcache, char *buf)
|
||||||
{
|
{
|
||||||
unsigned char *registers = regcache->registers;
|
unsigned char *registers = regcache->registers;
|
||||||
const struct target_desc *tdesc = regcache->tdesc;
|
const struct target_desc *tdesc = regcache->tdesc;
|
||||||
int i;
|
|
||||||
reg *reg;
|
|
||||||
|
|
||||||
for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++)
|
for (int i = 0; i < tdesc->reg_defs.size (); ++i)
|
||||||
{
|
{
|
||||||
|
struct reg *reg = tdesc->reg_defs[i];
|
||||||
|
|
||||||
if (regcache->register_status[i] == REG_VALID)
|
if (regcache->register_status[i] == REG_VALID)
|
||||||
{
|
{
|
||||||
bin2hex (registers, buf, register_size (tdesc, i));
|
bin2hex (registers, buf, register_size (tdesc, i));
|
||||||
|
@ -259,12 +257,13 @@ registers_from_string (struct regcache *regcache, char *buf)
|
||||||
int
|
int
|
||||||
find_regno (const struct target_desc *tdesc, const char *name)
|
find_regno (const struct target_desc *tdesc, const char *name)
|
||||||
{
|
{
|
||||||
int i;
|
for (int i = 0; i < tdesc->reg_defs.size (); ++i)
|
||||||
reg *reg;
|
{
|
||||||
|
struct reg *reg = tdesc->reg_defs[i];
|
||||||
|
|
||||||
for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++)
|
|
||||||
if (strcmp (name, reg->name) == 0)
|
if (strcmp (name, reg->name) == 0)
|
||||||
return i;
|
return i;
|
||||||
|
}
|
||||||
internal_error (__FILE__, __LINE__, "Unknown register %s requested",
|
internal_error (__FILE__, __LINE__, "Unknown register %s requested",
|
||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
|
@ -274,7 +273,7 @@ find_regno (const struct target_desc *tdesc, const char *name)
|
||||||
struct reg *
|
struct reg *
|
||||||
find_register_by_number (const struct target_desc *tdesc, int n)
|
find_register_by_number (const struct target_desc *tdesc, int n)
|
||||||
{
|
{
|
||||||
return VEC_index (tdesc_reg_p, tdesc->reg_defs, n);
|
return tdesc->reg_defs[n];
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef IN_PROCESS_AGENT
|
#ifndef IN_PROCESS_AGENT
|
||||||
|
@ -390,7 +389,7 @@ supply_regblock (struct regcache *regcache, const void *buf)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < VEC_length (tdesc_reg_p, tdesc->reg_defs); i++)
|
for (i = 0; i < tdesc->reg_defs.size (); i++)
|
||||||
regcache->register_status[i] = REG_VALID;
|
regcache->register_status[i] = REG_VALID;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -404,7 +403,7 @@ supply_regblock (struct regcache *regcache, const void *buf)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < VEC_length (tdesc_reg_p, tdesc->reg_defs); i++)
|
for (i = 0; i < tdesc->reg_defs.size (); i++)
|
||||||
regcache->register_status[i] = REG_UNAVAILABLE;
|
regcache->register_status[i] = REG_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -437,7 +436,7 @@ regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
|
||||||
|
|
||||||
gdb_assert (regcache != NULL);
|
gdb_assert (regcache != NULL);
|
||||||
gdb_assert (regnum >= 0
|
gdb_assert (regnum >= 0
|
||||||
&& regnum < VEC_length (tdesc_reg_p, regcache->tdesc->reg_defs));
|
&& regnum < regcache->tdesc->reg_defs.size ());
|
||||||
|
|
||||||
size = register_size (regcache->tdesc, regnum);
|
size = register_size (regcache->tdesc, regnum);
|
||||||
|
|
||||||
|
|
|
@ -22,11 +22,9 @@
|
||||||
void
|
void
|
||||||
init_target_desc (struct target_desc *tdesc)
|
init_target_desc (struct target_desc *tdesc)
|
||||||
{
|
{
|
||||||
int offset, i;
|
int offset = 0;
|
||||||
struct reg *reg;
|
|
||||||
|
|
||||||
offset = 0;
|
for (reg *reg : tdesc->reg_defs)
|
||||||
for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++)
|
|
||||||
{
|
{
|
||||||
reg->offset = offset;
|
reg->offset = offset;
|
||||||
offset += reg->size;
|
offset += reg->size;
|
||||||
|
@ -193,23 +191,23 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name,
|
||||||
{
|
{
|
||||||
struct target_desc *tdesc = (struct target_desc *) feature;
|
struct target_desc *tdesc = (struct target_desc *) feature;
|
||||||
|
|
||||||
while (VEC_length (tdesc_reg_p, tdesc->reg_defs) < regnum)
|
while (tdesc->reg_defs.size () < regnum)
|
||||||
{
|
{
|
||||||
struct reg *reg = XCNEW (struct reg);
|
struct reg *reg = XCNEW (struct reg);
|
||||||
|
|
||||||
reg->name = "";
|
reg->name = "";
|
||||||
reg->size = 0;
|
reg->size = 0;
|
||||||
VEC_safe_push (tdesc_reg_p, tdesc->reg_defs, reg);
|
tdesc->reg_defs.push_back (reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
gdb_assert (regnum == 0
|
gdb_assert (regnum == 0
|
||||||
|| regnum == VEC_length (tdesc_reg_p, tdesc->reg_defs));
|
|| regnum == tdesc->reg_defs.size ());
|
||||||
|
|
||||||
struct reg *reg = XCNEW (struct reg);
|
struct reg *reg = XCNEW (struct reg);
|
||||||
|
|
||||||
reg->name = name;
|
reg->name = name;
|
||||||
reg->size = bitsize;
|
reg->size = bitsize;
|
||||||
VEC_safe_push (tdesc_reg_p, tdesc->reg_defs, reg);
|
tdesc->reg_defs.push_back (reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See arch/tdesc.h. */
|
/* See arch/tdesc.h. */
|
||||||
|
|
|
@ -22,9 +22,7 @@
|
||||||
#include "arch/tdesc.h"
|
#include "arch/tdesc.h"
|
||||||
|
|
||||||
#include "regdef.h"
|
#include "regdef.h"
|
||||||
|
#include <vector>
|
||||||
typedef struct reg *tdesc_reg_p;
|
|
||||||
DEF_VEC_P(tdesc_reg_p);
|
|
||||||
|
|
||||||
struct tdesc_feature
|
struct tdesc_feature
|
||||||
{};
|
{};
|
||||||
|
@ -36,7 +34,7 @@ struct target_desc : tdesc_feature
|
||||||
{
|
{
|
||||||
/* A vector of elements of register definitions that
|
/* A vector of elements of register definitions that
|
||||||
describe the inferior's register set. */
|
describe the inferior's register set. */
|
||||||
VEC(tdesc_reg_p) *reg_defs;
|
std::vector<struct reg *> reg_defs;
|
||||||
|
|
||||||
/* The register cache size, in bytes. */
|
/* The register cache size, in bytes. */
|
||||||
int registers_size;
|
int registers_size;
|
||||||
|
@ -66,17 +64,15 @@ struct target_desc : tdesc_feature
|
||||||
|
|
||||||
public:
|
public:
|
||||||
target_desc ()
|
target_desc ()
|
||||||
: reg_defs (NULL), registers_size (0)
|
: registers_size (0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
~target_desc ()
|
~target_desc ()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct reg *reg;
|
|
||||||
|
|
||||||
for (i = 0; VEC_iterate (tdesc_reg_p, reg_defs, i, reg); i++)
|
for (reg *reg : reg_defs)
|
||||||
xfree (reg);
|
xfree (reg);
|
||||||
VEC_free (tdesc_reg_p, reg_defs);
|
|
||||||
|
|
||||||
xfree ((char *) arch);
|
xfree ((char *) arch);
|
||||||
xfree ((char *) osabi);
|
xfree ((char *) osabi);
|
||||||
|
@ -90,18 +86,13 @@ public:
|
||||||
|
|
||||||
bool operator== (const target_desc &other) const
|
bool operator== (const target_desc &other) const
|
||||||
{
|
{
|
||||||
if (VEC_length (tdesc_reg_p, reg_defs)
|
if (reg_defs.size () != other.reg_defs.size ())
|
||||||
!= VEC_length (tdesc_reg_p, other.reg_defs))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
struct reg *reg;
|
for (int i = 0; i < reg_defs.size (); ++i)
|
||||||
|
|
||||||
for (int ix = 0;
|
|
||||||
VEC_iterate (tdesc_reg_p, reg_defs, ix, reg);
|
|
||||||
ix++)
|
|
||||||
{
|
{
|
||||||
struct reg *reg2
|
struct reg *reg = reg_defs[i];
|
||||||
= VEC_index (tdesc_reg_p, other.reg_defs, ix);
|
struct reg *reg2 = other.reg_defs[i];
|
||||||
|
|
||||||
if (reg != reg2 && *reg != *reg2)
|
if (reg != reg2 && *reg != *reg2)
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue