From d5cebea18e7a9a927f4dd4915d093feb7df0e029 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 9 Nov 2023 20:44:12 +0000 Subject: Make cached_reg_t own its data struct cached_reg_t owns its data buffer, but currently that is managed manually. Convert it to use a unique_xmalloc_ptr. Approved-By: Tom Tromey Change-Id: I05a107098b717299e76de76aaba00d7fbaeac77b --- gdb/python/py-unwind.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'gdb/python/py-unwind.c') diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c index f1162f2..31b74c6 100644 --- a/gdb/python/py-unwind.c +++ b/gdb/python/py-unwind.c @@ -785,7 +785,7 @@ pyuw_prev_register (frame_info_ptr this_frame, void **cache_ptr, for (; reg_info < reg_info_end; ++reg_info) { if (regnum == reg_info->num) - return frame_unwind_got_bytes (this_frame, regnum, reg_info->data); + return frame_unwind_got_bytes (this_frame, regnum, reg_info->data.get ()); } return frame_unwind_got_optimized (this_frame, regnum); @@ -903,15 +903,14 @@ pyuw_sniffer (const struct frame_unwind *self, frame_info_ptr this_frame, struct value *value = value_object_to_value (reg->value.get ()); size_t data_size = register_size (gdbarch, reg->number); - cached_frame->reg[i].num = reg->number; - /* `value' validation was done before, just assert. */ gdb_assert (value != NULL); gdb_assert (data_size == value->type ()->length ()); - cached_frame->reg[i].data = (gdb_byte *) xmalloc (data_size); - memcpy (cached_frame->reg[i].data, - value->contents ().data (), data_size); + cached_reg_t *cached = new (&cached_frame->reg[i]) cached_reg_t (); + cached->num = reg->number; + cached->data.reset ((gdb_byte *) xmalloc (data_size)); + memcpy (cached->data.get (), value->contents ().data (), data_size); } } @@ -928,7 +927,7 @@ pyuw_dealloc_cache (frame_info *this_frame, void *cache) cached_frame_info *cached_frame = (cached_frame_info *) cache; for (int i = 0; i < cached_frame->reg_count; i++) - xfree (cached_frame->reg[i].data); + cached_frame->reg[i].~cached_reg_t (); xfree (cache); } -- cgit v1.1