Allocate data in cached_reg_t

2017-01-18  Alan Hayward  <alan.hayward@arm.com>

	* remote.c (struct cached_reg): Change data into a pointer.
	* (stop_reply_dtr): Free data pointers before deleting vector.
	(process_stop_reply): Likewise.
	(remote_parse_stop_reply): Allocate space for data
This commit is contained in:
Alan Hayward 2017-01-18 15:15:50 +00:00
parent 9890e4338d
commit d1dff2266d
2 changed files with 25 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2017-01-18 Alan Hayward <alan.hayward@arm.com>
* remote.c (struct cached_reg): Change data into a pointer.
* (stop_reply_dtr): Free data pointers before deleting vector.
(process_stop_reply): Likewise.
(remote_parse_stop_reply): Allocate space for data
2017-01-18 Alan Hayward <alan.hayward@arm.com>
* amd64-tdep.c (amd64_pseudo_register_read_value): remove

View File

@ -6311,7 +6311,7 @@ remote_console_output (char *msg)
typedef struct cached_reg
{
int num;
gdb_byte data[MAX_REGISTER_SIZE];
gdb_byte *data;
} cached_reg_t;
DEF_VEC_O(cached_reg_t);
@ -6407,6 +6407,13 @@ static void
stop_reply_dtr (struct notif_event *event)
{
struct stop_reply *r = (struct stop_reply *) event;
cached_reg_t *reg;
int ix;
for (ix = 0;
VEC_iterate (cached_reg_t, r->regcache, ix, reg);
ix++)
xfree (reg->data);
VEC_free (cached_reg_t, r->regcache);
}
@ -6979,6 +6986,7 @@ Packet: '%s'\n"),
{
struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
cached_reg_t cached_reg;
struct gdbarch *gdbarch = target_gdbarch ();
if (reg == NULL)
error (_("Remote sent bad register number %s: %s\n\
@ -6986,14 +6994,14 @@ Packet: '%s'\n"),
hex_string (pnum), p, buf);
cached_reg.num = reg->regnum;
cached_reg.data = (gdb_byte *)
xmalloc (register_size (gdbarch, reg->regnum));
p = p1 + 1;
fieldsize = hex2bin (p, cached_reg.data,
register_size (target_gdbarch (),
reg->regnum));
register_size (gdbarch, reg->regnum));
p += 2 * fieldsize;
if (fieldsize < register_size (target_gdbarch (),
reg->regnum))
if (fieldsize < register_size (gdbarch, reg->regnum))
warning (_("Remote reply is too short: %s"), buf);
VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
@ -7214,9 +7222,13 @@ process_stop_reply (struct stop_reply *stop_reply,
int ix;
for (ix = 0;
VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
ix++)
{
regcache_raw_supply (regcache, reg->num, reg->data);
xfree (reg->data);
}
VEC_free (cached_reg_t, stop_reply->regcache);
}