From ad59259604f008e20490f9c82cf287d5a601a66c Mon Sep 17 00:00:00 2001 From: Thiago Jung Bauermann Date: Thu, 22 Aug 2024 19:42:45 -0300 Subject: GDB: trad-frame: Store length of value_bytes in trad_frame_saved_reg The goal is to ensure that it is available in frame_unwind_got_bytes () to make sure that the provided buf isn't larger than the size of the register being provisioned. In the process, regcache's cached_reg_t::data also needed to be converted to a gdb::byte_vector, so that the register contents' size can be tracked. Approved-By: Simon Marchi --- gdb/remote.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'gdb/remote.c') diff --git a/gdb/remote.c b/gdb/remote.c index 8cb9050..79d91d6 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -8224,16 +8224,15 @@ Packet: '%s'\n"), Packet: '%s'\n"), hex_string (pnum), p, buf); + int reg_size = register_size (event->arch, reg->regnum); cached_reg.num = reg->regnum; - cached_reg.data.reset ((gdb_byte *) - xmalloc (register_size (event->arch, - reg->regnum))); + cached_reg.data.resize (reg_size); p = p1 + 1; - fieldsize = hex2bin (p, cached_reg.data.get (), - register_size (event->arch, reg->regnum)); + fieldsize = hex2bin (p, cached_reg.data.data (), + cached_reg.data.size ()); p += 2 * fieldsize; - if (fieldsize < register_size (event->arch, reg->regnum)) + if (fieldsize < reg_size) warning (_("Remote reply is too short: %s"), buf); event->regcache.push_back (std::move (cached_reg)); @@ -8572,7 +8571,7 @@ remote_target::process_stop_reply (stop_reply_up stop_reply, for (cached_reg_t ® : stop_reply->regcache) { - regcache->raw_supply (reg.num, reg.data.get ()); + regcache->raw_supply (reg.num, reg.data); rs->last_seen_expedited_registers.insert (reg.num); } } -- cgit v1.1