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:
parent
9890e4338d
commit
d1dff2266d
2 changed files with 25 additions and 6 deletions
|
@ -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>
|
2017-01-18 Alan Hayward <alan.hayward@arm.com>
|
||||||
|
|
||||||
* amd64-tdep.c (amd64_pseudo_register_read_value): remove
|
* amd64-tdep.c (amd64_pseudo_register_read_value): remove
|
||||||
|
|
22
gdb/remote.c
22
gdb/remote.c
|
@ -6311,7 +6311,7 @@ remote_console_output (char *msg)
|
||||||
typedef struct cached_reg
|
typedef struct cached_reg
|
||||||
{
|
{
|
||||||
int num;
|
int num;
|
||||||
gdb_byte data[MAX_REGISTER_SIZE];
|
gdb_byte *data;
|
||||||
} cached_reg_t;
|
} cached_reg_t;
|
||||||
|
|
||||||
DEF_VEC_O(cached_reg_t);
|
DEF_VEC_O(cached_reg_t);
|
||||||
|
@ -6407,6 +6407,13 @@ static void
|
||||||
stop_reply_dtr (struct notif_event *event)
|
stop_reply_dtr (struct notif_event *event)
|
||||||
{
|
{
|
||||||
struct stop_reply *r = (struct stop_reply *) 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);
|
VEC_free (cached_reg_t, r->regcache);
|
||||||
}
|
}
|
||||||
|
@ -6979,6 +6986,7 @@ Packet: '%s'\n"),
|
||||||
{
|
{
|
||||||
struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
|
struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
|
||||||
cached_reg_t cached_reg;
|
cached_reg_t cached_reg;
|
||||||
|
struct gdbarch *gdbarch = target_gdbarch ();
|
||||||
|
|
||||||
if (reg == NULL)
|
if (reg == NULL)
|
||||||
error (_("Remote sent bad register number %s: %s\n\
|
error (_("Remote sent bad register number %s: %s\n\
|
||||||
|
@ -6986,14 +6994,14 @@ Packet: '%s'\n"),
|
||||||
hex_string (pnum), p, buf);
|
hex_string (pnum), p, buf);
|
||||||
|
|
||||||
cached_reg.num = reg->regnum;
|
cached_reg.num = reg->regnum;
|
||||||
|
cached_reg.data = (gdb_byte *)
|
||||||
|
xmalloc (register_size (gdbarch, reg->regnum));
|
||||||
|
|
||||||
p = p1 + 1;
|
p = p1 + 1;
|
||||||
fieldsize = hex2bin (p, cached_reg.data,
|
fieldsize = hex2bin (p, cached_reg.data,
|
||||||
register_size (target_gdbarch (),
|
register_size (gdbarch, reg->regnum));
|
||||||
reg->regnum));
|
|
||||||
p += 2 * fieldsize;
|
p += 2 * fieldsize;
|
||||||
if (fieldsize < register_size (target_gdbarch (),
|
if (fieldsize < register_size (gdbarch, reg->regnum))
|
||||||
reg->regnum))
|
|
||||||
warning (_("Remote reply is too short: %s"), buf);
|
warning (_("Remote reply is too short: %s"), buf);
|
||||||
|
|
||||||
VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
|
VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
|
||||||
|
@ -7216,7 +7224,11 @@ process_stop_reply (struct stop_reply *stop_reply,
|
||||||
for (ix = 0;
|
for (ix = 0;
|
||||||
VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
|
VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
|
||||||
ix++)
|
ix++)
|
||||||
|
{
|
||||||
regcache_raw_supply (regcache, reg->num, reg->data);
|
regcache_raw_supply (regcache, reg->num, reg->data);
|
||||||
|
xfree (reg->data);
|
||||||
|
}
|
||||||
|
|
||||||
VEC_free (cached_reg_t, stop_reply->regcache);
|
VEC_free (cached_reg_t, stop_reply->regcache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue