aboutsummaryrefslogtreecommitdiff
path: root/gdb/ax-general.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2023-06-17 12:52:11 -0600
committerTom Tromey <tom@tromey.com>2023-06-20 11:21:51 -0600
commita2bbca9fa5e4e488ccbb8dddfa1d78ed03bad083 (patch)
treec12c8156574115bef418da92a387529ef0edf206 /gdb/ax-general.c
parent6f96f4854f1dcfa15c1ba87f76d868513bb14276 (diff)
downloadgdb-a2bbca9fa5e4e488ccbb8dddfa1d78ed03bad083.zip
gdb-a2bbca9fa5e4e488ccbb8dddfa1d78ed03bad083.tar.gz
gdb-a2bbca9fa5e4e488ccbb8dddfa1d78ed03bad083.tar.bz2
Use std::vector<bool> for agent_expr::reg_mask
agent_expr::reg_mask implements its own packed boolean vector. This patch replaces it with a std::vector<bool>, simplifying the code. Reviewed-by: John Baldwin <jhb@FreeBSD.org>
Diffstat (limited to 'gdb/ax-general.c')
-rw-r--r--gdb/ax-general.c33
1 files changed, 9 insertions, 24 deletions
diff --git a/gdb/ax-general.c b/gdb/ax-general.c
index d5f4c51..e2a3c31 100644
--- a/gdb/ax-general.c
+++ b/gdb/ax-general.c
@@ -41,17 +41,12 @@ agent_expr::agent_expr (struct gdbarch *gdbarch, CORE_ADDR scope)
this->gdbarch = gdbarch;
this->scope = scope;
- /* Bit vector for registers used. */
- this->reg_mask_len = 1;
- this->reg_mask = XCNEWVEC (unsigned char, this->reg_mask_len);
-
this->tracing = 0;
this->trace_string = 0;
}
agent_expr::~agent_expr ()
{
- xfree (this->reg_mask);
}
/* Append the low N bytes of VAL as an N-byte integer to the
@@ -330,8 +325,12 @@ ax_print (struct ui_file *f, struct agent_expr *x)
gdb_printf (f, _("Scope: %s\n"), paddress (x->gdbarch, x->scope));
gdb_printf (f, _("Reg mask:"));
- for (i = 0; i < x->reg_mask_len; ++i)
- gdb_printf (f, _(" %02x"), x->reg_mask[i]);
+ for (i = 0; i < x->reg_mask.size (); ++i)
+ {
+ if ((i % 8) == 0)
+ gdb_printf (f, " ");
+ gdb_printf (f, _("%d"), (int) x->reg_mask[i]);
+ }
gdb_printf (f, _("\n"));
/* Check the size of the name array against the number of entries in
@@ -401,28 +400,14 @@ ax_reg_mask (struct agent_expr *ax, int reg)
}
else
{
- int byte;
-
/* Get the remote register number. */
reg = gdbarch_remote_register_number (ax->gdbarch, reg);
- byte = reg / 8;
/* Grow the bit mask if necessary. */
- if (byte >= ax->reg_mask_len)
- {
- /* It's not appropriate to double here. This isn't a
- string buffer. */
- int new_len = byte + 1;
- unsigned char *new_reg_mask
- = XRESIZEVEC (unsigned char, ax->reg_mask, new_len);
-
- memset (new_reg_mask + ax->reg_mask_len, 0,
- (new_len - ax->reg_mask_len) * sizeof (ax->reg_mask[0]));
- ax->reg_mask_len = new_len;
- ax->reg_mask = new_reg_mask;
- }
+ if (reg >= ax->reg_mask.size ())
+ ax->reg_mask.resize (reg);
- ax->reg_mask[byte] |= 1 << (reg % 8);
+ ax->reg_mask[reg] = true;
}
}