From patchwork Wed Dec 31 23:18:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 127283 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 19C6F4BA2E26 for ; Wed, 31 Dec 2025 23:19:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 19C6F4BA2E26 Authentication-Results: sourceware.org; dkim=fail reason="signature verification failed" (768-bit key, unprotected) header.d=tromey.com header.i=@tromey.com header.a=rsa-sha256 header.s=default header.b=fIe++oe6 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from omta36.uswest2.a.cloudfilter.net (omta36.uswest2.a.cloudfilter.net [35.89.44.35]) by sourceware.org (Postfix) with ESMTPS id C61D94BA2E06 for ; Wed, 31 Dec 2025 23:18:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C61D94BA2E06 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C61D94BA2E06 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=35.89.44.35 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1767223097; cv=none; b=nHyfEMj7mczp1IrBUqbVeNJ3AKeApKGhgceuLc1YTlNJu8MMjWSYdR3ikEHxfBqfYnmqbzxZYQbmd5C4yZLYAwylVXKlqb8rzgt0g13WMLDtjFxFh/QnetSzCZBwkbnxvIqjPtcChnZ4BiaQkiJyvTpNDYWNq+34G89YBOG//UA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1767223097; c=relaxed/simple; bh=6TuYwTGGSvEhYIEjOBn34aRRdXokYG/262Tj7Z75OCI=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=aSSTffv29tgHHnVnoqYZERR0+OoxyLs+ICUIZr8QTgWdY50GgFSRRPPS/AZgwzM+JyCPe9PQ9rggFvUfzk0mCkpN1tUzITvpUD/Ak7XaCnxwn39R4KuTLJcRuC73qVEV8A3KaGBUfFyutJgSmzb2q34UuvJ2bV2Sc7f/FTT3GpQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C61D94BA2E06 Received: from eig-obgw-5003b.ext.cloudfilter.net ([10.0.29.155]) by cmsmtp with ESMTPS id apFdvyNypVCBNb5SJvXRbI; Wed, 31 Dec 2025 23:18:15 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id b5SIvzBwW2l0kb5SJvIq8n; Wed, 31 Dec 2025 23:18:15 +0000 X-Authority-Analysis: v=2.4 cv=UfRRSLSN c=1 sm=1 tr=0 ts=6955af37 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=ItBw4LHWJt0A:10 a=xHxR7RNfUtSUXmp_jf8A:9 a=QEXdDO2ut3YA:10 a=DCx65vhANUyCzuf5D8fC:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=GEHmcWypvRQFVWE7oD2X8HuQc5oPzskzbs6lSDLqkKc=; b=fIe++oe6CqWueQLmsLgeDLrQw5 SC+TNyBsEKwP5wwDh/O37xkz99MFrDi+OVvXGf1VVrnUt3Cg/edZD0/XUB1v1fw9pp0DMwl49FPew o1B1kAgGNldpju+DdwOWpxKzf; Received: from 75-166-246-134.hlrn.qwest.net ([75.166.246.134]:51708 helo=[192.168.122.1]) by box5379.bluehost.com with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vb5SI-00000000CDk-2Zn8; Wed, 31 Dec 2025 16:18:14 -0700 From: Tom Tromey Date: Wed, 31 Dec 2025 16:18:11 -0700 Subject: [PATCH 1/3] Simplify name computation in do_set_command MIME-Version: 1.0 Message-Id: <20251231-param-set-observ-v1-1-c6a63695f54d@tromey.com> References: <20251231-param-set-observ-v1-0-c6a63695f54d@tromey.com> In-Reply-To: <20251231-param-set-observ-v1-0-c6a63695f54d@tromey.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 75.166.246.134 X-Source-L: No X-Exim-ID: 1vb5SI-00000000CDk-2Zn8 X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 75-166-246-134.hlrn.qwest.net ([192.168.122.1]) [75.166.246.134]:51708 X-Source-Auth: tom+tromey.com X-Email-Count: 2 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfCkWn/kTH56yerxAuFKbrNS/D3HoWLnli2zSYsSEYwGbEweB+EQrClN4t5rUy4An8PNYqEA5KN7sevZDdzUcBeNrftyMM5qilpQLY7QqU/B8/Fb04i3V bVln0AHzbLRNSx1MMz9HhQgSk77CBsSW3YdygU3Aj9SmIjIhPBuCBuXbYsxvpvV0SMLyW0H5jeXa2eMGuTLbhevSc6KK9laWGi8= X-Spam-Status: No, score=-3015.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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 While working on this series, I noticed that the code in do_set_command that computes the parameter's full name uses both xmalloc and XNEWVEC. This patch simplifies this, replacing it with a single std::string. --- gdb/cli/cli-setshow.c | 67 ++++++++++++--------------------------------------- 1 file changed, 15 insertions(+), 52 deletions(-) diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index a97cd1b392b254d53a741c804bed12da600303c7..f2199a145135c5f2b8b26c27dbcc38e36f0c28ac 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -460,61 +460,25 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) if (notify_command_param_changed_p (option_changed, c)) { - char *name, *cp; - struct cmd_list_element **cmds; - struct cmd_list_element *p; - int i; - int length = 0; - /* Compute the whole multi-word command options. If user types command 'set foo bar baz on', c->name is 'baz', and GDB can't pass "bar" to command option change notification, because it is confusing. We can trace back through field 'prefix' to compute the whole options, and pass "foo bar baz" to notification. */ - for (i = 0, p = c; p != NULL; i++) - { - length += strlen (p->name); - length++; - - p = p->prefix; - } - cp = name = (char *) xmalloc (length); - cmds = XNEWVEC (struct cmd_list_element *, i); - - /* Track back through filed 'prefix' and cache them in CMDS. */ - for (i = 0, p = c; p != NULL; i++) + std::string name; + cmd_list_element *p; + for (p = c; p->prefix != nullptr; p = p->prefix) { - cmds[i] = p; - p = p->prefix; + if (p != c) + name.insert (0, " "); + name.insert (0, p->name); } /* Don't trigger any observer notification if subcommands is not setlist. */ - i--; - if (cmds[i]->subcommands != &setlist) - { - xfree (cmds); - xfree (name); - - return; - } - /* Traverse them in the reversed order, and copy their names into - NAME. */ - for (i--; i >= 0; i--) - { - memcpy (cp, cmds[i]->name, strlen (cmds[i]->name)); - cp += strlen (cmds[i]->name); - - if (i != 0) - { - cp[0] = ' '; - cp++; - } - } - cp[0] = 0; - - xfree (cmds); + if (p->subcommands != &setlist) + return; switch (c->var->type ()) { @@ -523,25 +487,25 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) case var_filename: case var_optional_filename: interps_notify_param_changed - (name, c->var->get ().c_str ()); + (name.c_str (), c->var->get ().c_str ()); break; case var_enum: interps_notify_param_changed - (name, c->var->get ()); + (name.c_str (), c->var->get ()); break; case var_color: { const ui_file_style::color &color = c->var->get (); interps_notify_param_changed - (name, color.to_string ().c_str ()); + (name.c_str (), color.to_string ().c_str ()); } break; case var_boolean: { const char *opt = c->var->get () ? "on" : "off"; - interps_notify_param_changed (name, opt); + interps_notify_param_changed (name.c_str (), opt); } break; case var_auto_boolean: @@ -549,7 +513,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) const char *s = auto_boolean_enums[c->var->get ()]; - interps_notify_param_changed (name, s); + interps_notify_param_changed (name.c_str (), s); } break; case var_uinteger: @@ -557,7 +521,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) char s[64]; xsnprintf (s, sizeof s, "%u", c->var->get ()); - interps_notify_param_changed (name, s); + interps_notify_param_changed (name.c_str (), s); } break; case var_integer: @@ -566,11 +530,10 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) char s[64]; xsnprintf (s, sizeof s, "%d", c->var->get ()); - interps_notify_param_changed (name, s); + interps_notify_param_changed (name.c_str (), s); } break; } - xfree (name); } } From patchwork Wed Dec 31 23:18:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 127282 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 756EE4BA2E07 for ; Wed, 31 Dec 2025 23:19:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 756EE4BA2E07 Authentication-Results: sourceware.org; dkim=fail reason="signature verification failed" (768-bit key, unprotected) header.d=tromey.com header.i=@tromey.com header.a=rsa-sha256 header.s=default header.b=H6cFHoqW X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from omta34.uswest2.a.cloudfilter.net (omta34.uswest2.a.cloudfilter.net [35.89.44.33]) by sourceware.org (Postfix) with ESMTPS id C581A4BA2E05 for ; Wed, 31 Dec 2025 23:18:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C581A4BA2E05 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C581A4BA2E05 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=35.89.44.33 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1767223097; cv=none; b=eNmX14l7tUeyuKLb+IlcdCzccIolBcds+oN/CcYTEVkSYy66nZ+uAZ9TPEPkAR8vJhHQx8lJkePkCucBagyiFvyoBLRshoKSjhJm3cTPdCrBTI3BaNDnjfMiDK4Xu58kzt8n2yihumF8xoSdHs32eMPiAA6OC6EOezsE5umbXuY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1767223097; c=relaxed/simple; bh=Kf9RQsdndyXkaN0O213Fi2hDxJrgzrP/8GnMbyj3Yww=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=u5ZA7r8M8gGmsh3MZ4SRYMiBkAq6u9ak+lOW9wwFJaz7PUqGzMlSVAo/zjWA89kx9CepyoOvNxnWJIOr4VTShSbVtdkZs9EzArD31yy4s/d7t243B7wndVL4dWjDY/RqIxr6ZKCnVLZeTynDKzoJL/BBPN64WfvRxK+nqnGxO14= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C581A4BA2E05 Received: from eig-obgw-6004b.ext.cloudfilter.net ([10.0.30.210]) by cmsmtp with ESMTPS id b1ntvBoj0Kjfob5SJvIHm0; Wed, 31 Dec 2025 23:18:15 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id b5SJvj56AK8vzb5SJvXhCJ; Wed, 31 Dec 2025 23:18:15 +0000 X-Authority-Analysis: v=2.4 cv=cJDgskeN c=1 sm=1 tr=0 ts=6955af37 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=ItBw4LHWJt0A:10 a=oe1fjOMsWTmSjPzS2BcA:9 a=QEXdDO2ut3YA:10 a=DCx65vhANUyCzuf5D8fC:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=2QBYL97NRKiznnF/eMilDJGEblGY6C5xtT4y2N92tcU=; b=H6cFHoqWh1qm5ig2JgUqOZwXue hgOdvjAk9aFMqNeXS+dcsiBOuTzAw8lSLQTjLcQl8ep3Aa6e31sstaFMD/bKnOk8qT65ZIWWSYBgU xtm1jc5y3TIJn6aUTcTDxnM6U; Received: from 75-166-246-134.hlrn.qwest.net ([75.166.246.134]:51708 helo=[192.168.122.1]) by box5379.bluehost.com with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vb5SI-00000000CDk-3Zp8; Wed, 31 Dec 2025 16:18:14 -0700 From: Tom Tromey Date: Wed, 31 Dec 2025 16:18:12 -0700 Subject: [PATCH 2/3] Add parameter_changed observer MIME-Version: 1.0 Message-Id: <20251231-param-set-observ-v1-2-c6a63695f54d@tromey.com> References: <20251231-param-set-observ-v1-0-c6a63695f54d@tromey.com> In-Reply-To: <20251231-param-set-observ-v1-0-c6a63695f54d@tromey.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 75.166.246.134 X-Source-L: No X-Exim-ID: 1vb5SI-00000000CDk-3Zp8 X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 75-166-246-134.hlrn.qwest.net ([192.168.122.1]) [75.166.246.134]:51708 X-Source-Auth: tom+tromey.com X-Email-Count: 3 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfCXs2joO+VTTZIZC77OtKsQlu7zJnbwmI1x3GNsYb0NF2zOtcnfUH6zj5QQmrEVkXbocnwuNSVIpnuVRbKxDrOfP7bmR+MH22Vv0sseB2PnT+Mm3JG4V 9s0uk4nSsTuHrMGH94Oxi6L/EWFh7CWA7Qv8Qp9WNgL3RaB0BdiPZ/SJjEl+n5YrE/Te64qKfssukMJzZqbHm9XZfI2cTjLWbhE= X-Spam-Status: No, score=-3014.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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 This adds a parameter_changed observer and has it fire in do_set_command. The interpreter code is updated to use this mechanism. --- gdb/cli/cli-setshow.c | 14 +++++++------- gdb/interps.c | 4 ++++ gdb/observable.c | 1 + gdb/observable.h | 7 +++++++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index f2199a145135c5f2b8b26c27dbcc38e36f0c28ac..b26c504fd14f45b9f9c16032b68d47b1cfbf5809 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -486,18 +486,18 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) case var_string_noescape: case var_filename: case var_optional_filename: - interps_notify_param_changed + gdb::observers::parameter_changed.notify (name.c_str (), c->var->get ().c_str ()); break; case var_enum: - interps_notify_param_changed + gdb::observers::parameter_changed.notify (name.c_str (), c->var->get ()); break; case var_color: { const ui_file_style::color &color = c->var->get (); - interps_notify_param_changed + gdb::observers::parameter_changed.notify (name.c_str (), color.to_string ().c_str ()); } break; @@ -505,7 +505,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) { const char *opt = c->var->get () ? "on" : "off"; - interps_notify_param_changed (name.c_str (), opt); + gdb::observers::parameter_changed.notify (name.c_str (), opt); } break; case var_auto_boolean: @@ -513,7 +513,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) const char *s = auto_boolean_enums[c->var->get ()]; - interps_notify_param_changed (name.c_str (), s); + gdb::observers::parameter_changed.notify (name.c_str (), s); } break; case var_uinteger: @@ -521,7 +521,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) char s[64]; xsnprintf (s, sizeof s, "%u", c->var->get ()); - interps_notify_param_changed (name.c_str (), s); + gdb::observers::parameter_changed.notify (name.c_str (), s); } break; case var_integer: @@ -530,7 +530,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) char s[64]; xsnprintf (s, sizeof s, "%d", c->var->get ()); - interps_notify_param_changed (name.c_str (), s); + gdb::observers::parameter_changed.notify (name.c_str (), s); } break; } diff --git a/gdb/interps.c b/gdb/interps.c index b4f564a046a05ad39e20aa3270c60ff2d92f79b4..6c5427842651b795f38f5bed6856739acbbbbba0 100644 --- a/gdb/interps.c +++ b/gdb/interps.c @@ -39,6 +39,7 @@ #include "main.h" #include "gdbsupport/buildargv.h" #include "gdbsupport/scope-exit.h" +#include "observable.h" /* The magic initialization routine for this module. */ @@ -589,4 +590,7 @@ A command can have arguments, separated by spaces.\n\ These spaces must be escaped using \\ or the command\n\ and its arguments must be enclosed in double quotes."), &cmdlist); set_cmd_completer (c, interpreter_completer); + + gdb::observers::parameter_changed.attach (interps_notify_param_changed, + "interpreters"); } diff --git a/gdb/observable.c b/gdb/observable.c index 8439f11c15deebb26aea4c9d9f7cc1d6a929f73f..fd5ddbbfe5424415195f99df3b97c0d34592adb1 100644 --- a/gdb/observable.c +++ b/gdb/observable.c @@ -77,6 +77,7 @@ DEFINE_OBSERVABLE (new_program_space); DEFINE_OBSERVABLE (free_program_space); DEFINE_OBSERVABLE (tui_enabled); DEFINE_OBSERVABLE (core_file_changed); +DEFINE_OBSERVABLE (parameter_changed); } /* namespace observers */ } /* namespace gdb */ diff --git a/gdb/observable.h b/gdb/observable.h index 5f064cf1fc8c2d58c37eb2253fe252f5279d4995..1775c18156b643e8e182f73bd5517aa37b41624e 100644 --- a/gdb/observable.h +++ b/gdb/observable.h @@ -266,6 +266,13 @@ extern observable tui_enabled; shared libraries have been loaded, registers and threads read in, etc. */ extern observable core_file_changed; +/* The parameter ("set" command) with the given name has changed. The + new value is given in string form. NAME is the full name of the + parameter, with prefix elements as well. This is only called for + ordinary parameters -- not maintenance/obscure parameters. */ +extern observable + parameter_changed; + } /* namespace observers */ } /* namespace gdb */ From patchwork Wed Dec 31 23:18:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 127284 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id A3C5F4BA2E26 for ; Wed, 31 Dec 2025 23:19:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A3C5F4BA2E26 Authentication-Results: sourceware.org; dkim=fail reason="signature verification failed" (768-bit key, unprotected) header.d=tromey.com header.i=@tromey.com header.a=rsa-sha256 header.s=default header.b=PgjIAnU6 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from omta36.uswest2.a.cloudfilter.net (omta36.uswest2.a.cloudfilter.net [35.89.44.35]) by sourceware.org (Postfix) with ESMTPS id E426B4BA2E07 for ; Wed, 31 Dec 2025 23:18:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E426B4BA2E07 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E426B4BA2E07 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=35.89.44.35 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1767223097; cv=none; b=LlQWrjpeOkhRty6/wKm0py5LOhU2jH8+PKLTpQlxA81tigDPWQyewYxG6MTBHlSykM53/9O3E5Ji/nRtLifvgdkEvJBPDkbv3RHnCft+sMkh7LAjAvvsHa9l/T5nENjAz86Z+Yr7SR8wKX7IEZd4S4ftnqClZNaLe6N8GDaMDBo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1767223097; c=relaxed/simple; bh=R0lSDutwpAe4GAg5BGZeHL56hIXVy9/9qpy6JF3hQkg=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=uP+oWuLQy4CgXXh73Oj+cV9zbP04c/IKCzrWZcjHTmi8I4nNJ9a+N9SQNKwfyBkfRRKZNzsud96D3EAFCcaCNKZG6VfU+ZaPTDNabhdJb/su3bvNSC2xauo81kZzGMTgqNFWidSxARkpb8Jis2Y6lqKNkb6gqYi5BdqQPhAiEVc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E426B4BA2E07 Received: from eig-obgw-6001b.ext.cloudfilter.net ([10.0.30.143]) by cmsmtp with ESMTPS id b4Kov1G3gVCBNb5SKvXRbO; Wed, 31 Dec 2025 23:18:16 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id b5SJvlxJLcu11b5SJvppzv; Wed, 31 Dec 2025 23:18:15 +0000 X-Authority-Analysis: v=2.4 cv=bKYWIO+Z c=1 sm=1 tr=0 ts=6955af37 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=ItBw4LHWJt0A:10 a=CCpqsmhAAAAA:8 a=rTyjRlD9Jm3cdqAwY1IA:9 a=QEXdDO2ut3YA:10 a=ul9cdbp4aOFLsgKbc677:22 a=DCx65vhANUyCzuf5D8fC:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=ApFlxUmi8z7XZIM+Khkg70FphTLyKeAAuX+TNidiisg=; b=PgjIAnU64+ENVDFS8Nb1RuEdhS jK+IXB7VbKyuueatvNVQjgc/T+aEfCs69/9OesNXNm3EwchBGzs8lM+OoqwVDQM42gx/DBpeCF+W4 UaPimL1xIxEY1T+pxAUCph577; Received: from 75-166-246-134.hlrn.qwest.net ([75.166.246.134]:51708 helo=[192.168.122.1]) by box5379.bluehost.com with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vb5SJ-00000000CDk-1A5n; Wed, 31 Dec 2025 16:18:15 -0700 From: Tom Tromey Date: Wed, 31 Dec 2025 16:18:13 -0700 Subject: [PATCH 3/3] Have TUI react to disassembly parameter changes MIME-Version: 1.0 Message-Id: <20251231-param-set-observ-v1-3-c6a63695f54d@tromey.com> References: <20251231-param-set-observ-v1-0-c6a63695f54d@tromey.com> In-Reply-To: <20251231-param-set-observ-v1-0-c6a63695f54d@tromey.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 75.166.246.134 X-Source-L: No X-Exim-ID: 1vb5SJ-00000000CDk-1A5n X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 75-166-246-134.hlrn.qwest.net ([192.168.122.1]) [75.166.246.134]:51708 X-Source-Auth: tom+tromey.com X-Email-Count: 4 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfCr+fm6Wp04q1kUbXrkHgGdvbGVe/ExmLuP2cwlAos+L4PewjT4Cw89lMUIyM1W/J1rJQ6E4nzIpFhUFQW+1hseaO4vBc74W12OznuiCfyEQjsoJsp8b wdpsIiBZokU5hKLYvYWGGscsLEhDARf/LowsNVxEHfgxEpzSgnavHOiBTgsMSm5jpwp500PzYp5PkGwNUbMr+a9U+i9JOkIg0Jo= X-Spam-Status: No, score=-3014.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_LOTSOFHASH, KAM_SHORT, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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 With this patch, changes to "print symbol-filename", "filename-display", or "print max-symbolic-offset" will now cause the TUI disassembly window to update. tui_source_window_base::style_changed is renamed to reflect its use as a way to force a refresh. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33249 --- gdb/testsuite/gdb.tui/tui-disasm-styling.exp | 23 +++++++++++++++++++++++ gdb/tui/tui-disasm.c | 23 +++++++++++++++++++++++ gdb/tui/tui-disasm.h | 10 +++++++++- gdb/tui/tui-source.c | 2 +- gdb/tui/tui-winsource.c | 4 ++-- gdb/tui/tui-winsource.h | 5 +++-- 6 files changed, 61 insertions(+), 6 deletions(-) diff --git a/gdb/testsuite/gdb.tui/tui-disasm-styling.exp b/gdb/testsuite/gdb.tui/tui-disasm-styling.exp index 685974411dfbba1d83104056812447585ee6a41f..311e7af876324cc38d61947fba39c61482098777 100644 --- a/gdb/testsuite/gdb.tui/tui-disasm-styling.exp +++ b/gdb/testsuite/gdb.tui/tui-disasm-styling.exp @@ -66,3 +66,26 @@ check_asm_output true "asm output is styled once again" Term::command "set style sources off" check_asm_output true "asm output is styled when source styling is off" + +Term::command "set print max-symbolic-offset 1" +set asm_output [Term::get_region 1 1 78 13 "\n"] +# Look for a line that has a hex offset and some assembly, but that +# does not have . We can't really check for the assembly +# directly so we just look for any letter. +gdb_assert {[regexp -- "$hex\[^<\]* \[a-z\]" $asm_output]} \ + "reacted to change to max-symbolic-offset" + +# These next tests are a bit simpler to write without styling. +Term::command "set style enabled off" +Term::command "set filename-display absolute" +Term::command "set print symbol-filename on" +set asm_output [Term::get_region 1 1 78 13 "\n"] +# We can't assume the final part of the filename will be visible, so +# just look for any directory separator. +gdb_assert {[regexp -- "