From patchwork Fri Dec 15 18:12:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 82267 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0DF5738618CD for ; Fri, 15 Dec 2023 18:13:26 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by sourceware.org (Postfix) with ESMTPS id 26BA938582AF for ; Fri, 15 Dec 2023 18:13:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 26BA938582AF Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 26BA938582AF Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702663992; cv=none; b=wIHP9sR8fuhvYV18UvcGZ+TFCSjOLE7n6s6DJX1FlmNJ3TVqaORRXDl3rQwdHBFIOovjJQrz9FH6mD88fbovGKdT5vWIkdTh/Ba4Fgt82tzikJ3E4Dpl1cnavnECJ8plEkx0fCL5dYTd0XXWIOO7U4lionx9+mZ56FOSBZU3tzY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702663992; c=relaxed/simple; bh=cH80WhAkzl2FtQvUeowQ0e2jgEQSCnV8g6Yg5X4YVWs=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=nUtMosQ5cilQsSuESQPSYCZ9Ial9DSxHQCaYcR3lE55J3jNgfJmkFQz9ovqOhGEqmFQZRvPN4qjxqbL4LegIXd9CxyyNlOVXIDLjZibToKgwc61suRKSJThF4HD3ZezL8m5I3q4KbrDwnOF/9GKB8ERwuc/+yQum3bXyXunqLCM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-3364c9ba749so741223f8f.1 for ; Fri, 15 Dec 2023 10:13:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702663989; x=1703268789; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dyTWAYTrcqNK7fmVhYNAbIjH375VSgIBRFpGD1NSIiU=; b=wOFDJ5Pd1UPQ4hk+zrdDG10Gi7tBz10zHZmRW47VpiGCseKTjO2FETpBxCm4qjq70e 2hJzKwfPK96jX57NKiWrDeQyq9JBBHOJmSja5wJvYT9Fzwr8bMBGp5QsDQ0rjoEsUfcs HTGvd3BD1v0DD9hEhvV7tRad+Zek3nQYp3tE00IMhrO1hRQhFAMKYlXxyk14yi+fR9OR +Z52ovYhWemZp1fqwI8ksVgK2mF+vYNtjFyDJkHjuPwlGb0Paaxg3lLlyCHKNF53PyUD 0abtUt9MwYld6c6SG6aNV5ktcbruCufRneN+COm7g/1mn7+wiYDP/fqNsY6y3j28Lfsj cYTQ== X-Gm-Message-State: AOJu0YzF6CUdIJg92PNaIkeQXAggwEBiKavZE9C19v2F0Vioww6V+F2j LE/XkA2teaWTULzB5fWTdhheJ09yznHHxQ== X-Google-Smtp-Source: AGHT+IFGeeMeZqNSBzRZ6Il5cQGGdR7/szy/QRf/CfaTFMEDVpv2GcAhHoBMC8SESBDMDgKX+02B0Q== X-Received: by 2002:a05:600c:3792:b0:40b:5f03:b425 with SMTP id o18-20020a05600c379200b0040b5f03b425mr3253861wmr.327.1702663988648; Fri, 15 Dec 2023 10:13:08 -0800 (PST) Received: from localhost ([2001:8a0:f923:4f00:43f0:3b0b:6626:3025]) by smtp.gmail.com with UTF8SMTPSA id bd19-20020a05600c1f1300b0040839fcb217sm30382390wmb.8.2023.12.15.10.13.08 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 Dec 2023 10:13:08 -0800 (PST) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 1/2] Make cached_reg_t own its data Date: Fri, 15 Dec 2023 18:12:56 +0000 Message-ID: <20231215181257.1196830-2-pedro@palves.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231215181257.1196830-1-pedro@palves.net> References: <20231215181257.1196830-1-pedro@palves.net> MIME-Version: 1.0 X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org struct cached_reg_t own its data buffer, but currently that is managed manually. Convert it to use a unique_xmalloc_ptr. Change-Id: I05a107098b717299e76de76aaba00d7fbaeac77b --- gdb/python/py-unwind.c | 13 ++++++------- gdb/regcache.h | 5 ++++- gdb/remote.c | 24 ++++++------------------ 3 files changed, 16 insertions(+), 26 deletions(-) diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c index f1162f22290..31b74c67310 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); } diff --git a/gdb/regcache.h b/gdb/regcache.h index d90f74bfbb0..85890b66cbc 100644 --- a/gdb/regcache.h +++ b/gdb/regcache.h @@ -176,7 +176,10 @@ using register_read_ftype struct cached_reg_t { int num; - gdb_byte *data; + gdb::unique_xmalloc_ptr data; + + cached_reg_t () = default; + cached_reg_t (cached_reg_t &&rhs) = default; }; /* Buffer of registers. */ diff --git a/gdb/remote.c b/gdb/remote.c index 84daa8567b6..7611396c949 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -1353,8 +1353,6 @@ class extended_remote_target final : public remote_target struct stop_reply : public notif_event { - ~stop_reply (); - /* The identifier of the thread about this event */ ptid_t ptid; @@ -7604,12 +7602,6 @@ remote_notif_stop_can_get_pending_events (remote_target *remote, return 0; } -stop_reply::~stop_reply () -{ - for (cached_reg_t ® : regcache) - xfree (reg.data); -} - static notif_event_up remote_notif_stop_alloc_reply () { @@ -8094,17 +8086,18 @@ Packet: '%s'\n"), hex_string (pnum), p, buf); cached_reg.num = reg->regnum; - cached_reg.data = (gdb_byte *) - xmalloc (register_size (event->arch, reg->regnum)); + cached_reg.data.reset ((gdb_byte *) + xmalloc (register_size (event->arch, + reg->regnum))); p = p1 + 1; - fieldsize = hex2bin (p, cached_reg.data, + fieldsize = hex2bin (p, cached_reg.data.get (), register_size (event->arch, reg->regnum)); p += 2 * fieldsize; if (fieldsize < register_size (event->arch, reg->regnum)) warning (_("Remote reply is too short: %s"), buf); - event->regcache.push_back (cached_reg); + event->regcache.push_back (std::move (cached_reg)); } else { @@ -8436,12 +8429,7 @@ remote_target::process_stop_reply (struct stop_reply *stop_reply, stop_reply->arch); for (cached_reg_t ® : stop_reply->regcache) - { - regcache->raw_supply (reg.num, reg.data); - xfree (reg.data); - } - - stop_reply->regcache.clear (); + regcache->raw_supply (reg.num, reg.data.get ()); } remote_thread_info *remote_thr = get_remote_thread_info (this, ptid);