From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id LGiGL+myfGejxAUAWB0awg (envelope-from ) for ; Mon, 06 Jan 2025 23:51:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1736225513; bh=jjDTRyv72gjWj8o3e7fhieP4wgjD8rZTm9k5v/WFKxg=; h=Date:Subject:To:Cc:References:From:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=CJMYeYH5I+EAuxn8TOu5USii0az3Wk7CD0jS6PaDYp3jzfn6kNi1e8uKjLY6auRxf orN9KJSf9yIdu+BtREsUu88KCYSMWWnD3ifHBeGf2jknd5DE9h8YdNvEvWOIxRfIUD STQfLGpNjCU0ZCTqR3O4dAkpzzUHpQaRLwy2Iccw= Received: by simark.ca (Postfix, from userid 112) id B69F71E0BB; Mon, 6 Jan 2025 23:51:53 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=4.0.0 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=B5WZI5BP; dkim=pass (1024-bit key) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=jzjQEqk0; dkim-atps=neutral Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 4C27E1E091 for ; Mon, 6 Jan 2025 23:51:53 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E173C3858404 for ; Tue, 7 Jan 2025 04:51:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E173C3858404 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=B5WZI5BP; dkim=pass (1024-bit key) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=jzjQEqk0 Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 9BECC3858C56 for ; Tue, 7 Jan 2025 04:51:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9BECC3858C56 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark.ca ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9BECC3858C56 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=158.69.221.121 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736225469; cv=none; b=aUTdbTuUpE20YlvyUi7/q3mOAxOA7ZGqXARKmGTI/9SFdE6rQVjHIK1ZzJ4BjgZSF+oRR2jdTtRZHKPeNGeOQyDXUnT6fdo2hnMa5906rg6QG13Ml0cLp1Xhd33SwyFl7W4lqWgON/FBeY62/U/DF42xwVzdNTMuPycQWe3e9mk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736225469; c=relaxed/simple; bh=jjDTRyv72gjWj8o3e7fhieP4wgjD8rZTm9k5v/WFKxg=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:MIME-Version: Subject:To:From; b=qmR5gPHhmSnTDbkdqlhC4XygKssWR2yKQ1dojJlT9GFrKSDULARKFnZEEOgjCER4XN2sQxhHqGYxXLXYw/vHAHz2cnw5vbyKBjla0eQrgHGKAdKRg2PgnHd44mvg5JSpV1ap/RN74shCN6EQE4VuMiNe5rWTd27w9UoXlDJFY/4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9BECC3858C56 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1736225469; bh=jjDTRyv72gjWj8o3e7fhieP4wgjD8rZTm9k5v/WFKxg=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=B5WZI5BPh5LByObh58kbY/O2vLwMH0aALsh4wJ0TrZdOEoCl3cG2JWrqIXgH+dV4W e/Uq4JuN3o390OmgPgJjVRAYus7ntUde2n8+kfU+V2l7EqfD13zlEHSlqq88I7+AcN JFiY2FalEOdytqmS3qWpYrhEch/AI3BV8EClbqoQ= Received: by simark.ca (Postfix, from userid 112) id 510B41E0C0; Mon, 6 Jan 2025 23:51:09 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1736225466; bh=jjDTRyv72gjWj8o3e7fhieP4wgjD8rZTm9k5v/WFKxg=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=jzjQEqk0blqyv4AhC7nQicWoTqJ66IqzwlRwfm6h3bJBZiMGZqgOsME0KpEbiuUZA jq8EIJ56RrOFbgh/dggmQzvYa/rdrmK1BQTfDdsXezERqTH8RLQ7XKAMIx9xhTX8un +qU6RgmkxR6+DCu7aImDD7zr7wbZlDDI26wmCl/4= Received: from [10.0.0.11] (modemcable238.237-201-24.mc.videotron.ca [24.201.237.238]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 2FEF91E091; Mon, 6 Jan 2025 23:51:05 -0500 (EST) Message-ID: <5d0868f6-90dc-48f9-98b6-da2fb3672038@simark.ca> Date: Mon, 6 Jan 2025 23:51:05 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 04/11] gdbserver: convert init_register_cache and new_register_cache into constructors To: Tankut Baris Aktemur , gdb-patches@sourceware.org Cc: simon.marchi@efficios.com References: <20241230-upstream-gdbserver-regcache-v2-0-020a9514fcf0@intel.com> <20241230-upstream-gdbserver-regcache-v2-4-020a9514fcf0@intel.com> Content-Language: en-US From: Simon Marchi In-Reply-To: <20241230-upstream-gdbserver-regcache-v2-4-020a9514fcf0@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit 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~public-inbox=simark.ca@sourceware.org > @@ -112,55 +112,38 @@ regcache_invalidate (void) > > #endif > > -struct regcache * > -init_register_cache (struct regcache *regcache, > - const struct target_desc *tdesc, > - unsigned char *regbuf) > +regcache::regcache (const target_desc *tdesc, > + unsigned char *regbuf) > { > - if (regbuf == NULL) > - { > -#ifndef IN_PROCESS_AGENT > - /* Make sure to zero-initialize the register cache when it is > - created, in case there are registers the target never > - fetches. This way they'll read as zero instead of > - garbage. */ > - regcache->tdesc = tdesc; > - regcache->registers > - = (unsigned char *) xcalloc (1, tdesc->registers_size); > - regcache->registers_owned = true; > - regcache->register_status > - = (unsigned char *) xmalloc (tdesc->reg_defs.size ()); > - memset ((void *) regcache->register_status, REG_UNAVAILABLE, > - tdesc->reg_defs.size ()); > -#else > - gdb_assert_not_reached ("can't allocate memory from the heap"); > -#endif > - } > - else > - { > - regcache->tdesc = tdesc; > - regcache->registers = regbuf; > - regcache->registers_owned = false; > + gdb_assert (regbuf != nullptr); > + > + this->tdesc = tdesc; > + this->registers = regbuf; > + this->registers_owned = false; > #ifndef IN_PROCESS_AGENT > - regcache->register_status = NULL; > + this->register_status = nullptr; > #endif These could be initialized in an initialization list. > - } > - > - regcache->registers_fetched = false; > - > - return regcache; > + this->registers_fetched = false; > } > > #ifndef IN_PROCESS_AGENT > > -struct regcache * > -new_register_cache (const struct target_desc *tdesc) > +regcache::regcache (const target_desc *tdesc) > { > - struct regcache *regcache = new struct regcache; > - > gdb_assert (tdesc->registers_size != 0); > > - return init_register_cache (regcache, tdesc, NULL); > + /* Make sure to zero-initialize the register cache when it is > + created, in case there are registers the target never > + fetches. This way they'll read as zero instead of > + garbage. */ > + this->tdesc = tdesc; > + this->registers > + = (unsigned char *) xcalloc (1, tdesc->registers_size); > + this->registers_owned = true; > + this->register_status > + = (unsigned char *) xmalloc (tdesc->reg_defs.size ()); Same here. > diff --git a/gdbserver/regcache.h b/gdbserver/regcache.h > index 12345a3439cd7dedc70cd06f13450dde58214124..ea6c26a37a07bf6d336d6bdf327d543fae0b6370 100644 > --- a/gdbserver/regcache.h > +++ b/gdbserver/regcache.h > @@ -45,7 +45,13 @@ struct regcache : public reg_buffer_common > #ifndef IN_PROCESS_AGENT > /* One of REG_UNAVAILABLE or REG_VALID. */ > unsigned char *register_status = nullptr; > + > + /* Constructors. */ > + regcache (const target_desc *tdesc); > #endif > + regcache (const target_desc *tdesc, unsigned char *regbuf); I don't think the "Constructors" is that helpful. On the other hand, I would appreciate a comment saying what the constructor with `regbuf` does differently from the other one (I guess use that buffer to store register data instead of dynamically allocating?). > diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc > index 1b6e9d05273ea7a709f1880473c070c59169ddd5..9a00d1f272f905cadbc87265ed0be3d87f7b54df 100644 > --- a/gdbserver/tracepoint.cc > +++ b/gdbserver/tracepoint.cc > @@ -1288,7 +1288,7 @@ struct tracepoint_hit_ctx > struct fast_tracepoint_ctx : public tracepoint_hit_ctx > { > fast_tracepoint_ctx (unsigned char *_regs) > - : regcache_initted (0), regs (_regs) > + : regcache (), regs (_regs) `regcache ()` becomes unnecessary. Simon