From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id zLTNFokM1l/7LAAAWB0awg (envelope-from ) for ; Sun, 13 Dec 2020 07:43:53 -0500 Received: by simark.ca (Postfix, from userid 112) id 530FA1F0AA; Sun, 13 Dec 2020 07:43:53 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=DKIM_SIGNED,MAILING_LIST_MULTI, RDNS_NONE,T_DKIM_INVALID,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from sourceware.org (unknown [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 93F541E590 for ; Sun, 13 Dec 2020 07:43:52 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F0483385801D; Sun, 13 Dec 2020 12:43:51 +0000 (GMT) Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by sourceware.org (Postfix) with ESMTPS id F3640385801D for ; Sun, 13 Dec 2020 12:43:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org F3640385801D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=andrew.burgess@embecosm.com Received: by mail-wm1-x343.google.com with SMTP id g25so7379365wmh.1 for ; Sun, 13 Dec 2020 04:43:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=3U2kLr0PlTs/d3RcmT9ejqCkQTQH2lPOvwYoVlF6otk=; b=JYueBir7N2Dan8Yu7/UsMPVPhdCcrzPNlGo0INptH18GY1XMkixGNUgjqZ8YJgnABk CCU2SU2Un9rPAN88KObmyvoFDuR4ub7p8rMQ7YNyHaglcsG0OsXi/TcqkUviqynlp1lD uKMg5/amEU9jW81Rono8cZqp0+h3FNJYtCle9LuFoD6YTQEolhusTYlVrvCLCD/GEwDD LnBDYbsyzeTDQw5zFTc/qIrRhB5PgrX2GnueyhBGq+glI/19lX0b3VRcg8HuxfiJBMpI mH2A1/eCQkzHOVV58uq1TaFhZZVPQB0oDG7YrvMTr7zccvSp9JSZjulxCp78kMEKQoZx yJ+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=3U2kLr0PlTs/d3RcmT9ejqCkQTQH2lPOvwYoVlF6otk=; b=icc74+hUilUq+6QUgvrKsVMVytGGH/j8Q2hPCg+D0gr6Phq0Pyv8Eo05Un7Jm/2c2g dW4knU2djsUmioCSx+4TekxuRdLEfhXLfIQ8weTsZ5Bo4nZRMMoxoHl8txXf6KMxNA4o VXAGFgb7+iTBX1mbaKROH0ob3xH6rzcNcpywq71KWR/GS46GPOAyVyDOzu7REImXUcbC NwZLQD/dlfvauGdi8Yj0mjDoAgtMbNbDoChZYnvsBXh6LLuCinmQ20QBTcVC0WviiwlQ gKyhApVUBN8Bb38wVgkL4J3Fpre6yKD03z6vbY0mH58ZvnZ8hB1M8U5TgXcIWHUgKR7v WX/w== X-Gm-Message-State: AOAM531Jmg/aqeTwujIQ4uX8OSzg/z+vnMdSiSh7othAjOB3to1RzY8x RS+Yqfo8QLHEpEtU1m7aeSBkHMlurXDBQQ== X-Google-Smtp-Source: ABdhPJyeyANFnSaDmVUUSIdnUTmrfE67Kn5v5/1WjbWEP0z+NVNNyoOJg6XOtiT1y8+SQXQvNfZqpQ== X-Received: by 2002:a1c:dd07:: with SMTP id u7mr7190343wmg.51.1607863426390; Sun, 13 Dec 2020 04:43:46 -0800 (PST) Received: from localhost (host86-180-62-188.range86-180.btcentralplus.com. [86.180.62.188]) by smtp.gmail.com with ESMTPSA id n12sm27999750wrg.76.2020.12.13.04.43.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 13 Dec 2020 04:43:45 -0800 (PST) Date: Sun, 13 Dec 2020 12:43:43 +0000 From: Andrew Burgess To: gdb-patches@sourceware.org Subject: Re: [PATCH 1/2] gdb: introduce new 'maint flush ' prefix command Message-ID: <20201213124343.GG2945@embecosm.com> References: <874kl2dcrb.fsf@tromey.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <874kl2dcrb.fsf@tromey.com> X-Operating-System: Linux/5.8.13-100.fc31.x86_64 (x86_64) X-Uptime: 12:39:50 up 4 days, 17:24, X-Editor: GNU Emacs [ http://www.gnu.org/software/emacs ] X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tom Tromey Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" * Tom Tromey [2020-12-03 10:23:52 -0700]: > Luis> Should we keep testing the alias in some way though? I see the > Luis> testcases have been updated to only use the new command. We should > Luis> certify that the old ones still exist and work? > > I'm ok with not adding a test in this case, since it's a deprecated > alias of a maintenance command. > > Luis> If we plan to drop the old commands at some point (I think it makes > Luis> sense), we should probably mark them as deprecated with a set removal > Luis> date. > > Definitely agreed about deprecation. > > We haven't normally set dates before, but it seems like a good idea. > Normally deprecated things just stick around more or less forever. Luis/Tom, Thanks for the feedback. I marked the aliases (that replaced the old commands) as deprecated, and updated the NEWS file to mention this. As Tom points out we've never really set dates for removing things (though I do think doing so would be a good thing), and we have a non-zero set of existing aliases and commands that are marked as deprecated. Maybe we should have a discussion about if/when these things should be removed, but I don't want to tie making that policy in with this patch. Below is what I eventually pushed. Thanks, Andrew --- commit 50a5f1878e22b09ebea30ad60a2164b80af6efdb Author: Andrew Burgess Date: Fri Nov 20 19:08:06 2020 +0000 gdb: introduce new 'maint flush ' prefix command We currently have two flushing commands 'flushregs' and 'maint flush-symbol-cache'. I'm planning to add at least one more so I thought it might be nice if we bundled these together into one place. And so I created the 'maint flush ' command prefix. Currently there are two commands: (gdb) maint flush symbol-cache (gdb) maint flush register-cache Unfortunately, even though both of the existing flush commands are maintenance commands, I don't know how keen we about deleting existing commands for fear of breaking things in the wild. So, both of the existing flush commands 'maint flush-symbol-cache' and 'flushregs' are still around as deprecated aliases to the new commands. I've updated the testsuite to use the new command syntax, and updated the documentation too. gdb/ChangeLog: * NEWS: Mention new commands, and that the old commands are now deprecated. * cli/cli-cmds.c (maintenanceflushlist): Define. * cli/cli-cmds.h (maintenanceflushlist): Declare. * maint.c (_initialize_maint_cmds): Initialise maintenanceflushlist. * regcache.c: Add 'cli/cli-cmds.h' include. (reg_flush_command): Add header comment. (_initialize_regcache): Create new 'maint flush register-cache' command, make 'flushregs' an alias. * symtab.c: Add 'cli/cli-cmds.h' include. (_initialize_symtab): Create new 'maint flush symbol-cache' command, make old command an alias. gdb/doc/ChangeLog: * gdb.texinfo (Symbols): Document 'maint flush symbol-cache'. (Maintenance Commands): Document 'maint flush register-cache'. gdb/testsuite/ChangeLog: * gdb.base/c-linkage-name.exp: Update to use new 'maint flush ...' commands. * gdb.base/killed-outside.exp: Likewise. * gdb.opt/inline-bt.exp: Likewise. * gdb.perf/gmonster-null-lookup.py: Likewise. * gdb.perf/gmonster-print-cerr.py: Likewise. * gdb.perf/gmonster-ptype-string.py: Likewise. * gdb.python/py-unwind.exp: Likewise. diff --git a/gdb/NEWS b/gdb/NEWS index d75992e78ef..4d963880cb3 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -39,6 +39,11 @@ set debug event-loop show debug event-loop Control the display of debug output about GDB's event loop. +maintenance flush symbol-cache +maintenance flush register-cache + These new commands are equivalent to the already existing commands + 'maintenance flush-symbol-cache' and 'flushregs' respectively. + * Changed commands break [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] @@ -61,6 +66,12 @@ condition [-force] N COND GDB into defining the condition even when COND is invalid for all the current locations of breakpoint N. +flushregs +maintenance flush-symbol-cache + These commands are deprecated in favor of the new commands + 'maintenance flush register-cache' and 'maintenance flush + symbol-cache' respectively. + *** Changes in GDB 10 * There are new feature names for ARC targets: "org.gnu.gdb.arc.core" diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 54822fad481..88c83cd6319 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -151,6 +151,10 @@ struct cmd_list_element *maintenanceprintlist; struct cmd_list_element *maintenancechecklist; +/* Chain containing all defined "maintenance flush" subcommands. */ + +struct cmd_list_element *maintenanceflushlist; + struct cmd_list_element *setprintlist; struct cmd_list_element *showprintlist; diff --git a/gdb/cli/cli-cmds.h b/gdb/cli/cli-cmds.h index 1d641520bf5..976cea07806 100644 --- a/gdb/cli/cli-cmds.h +++ b/gdb/cli/cli-cmds.h @@ -89,6 +89,10 @@ extern struct cmd_list_element *maintenanceinfolist; extern struct cmd_list_element *maintenanceprintlist; +/* Chain containing all defined "maintenance flush" subcommands. */ + +extern struct cmd_list_element *maintenanceflushlist; + extern struct cmd_list_element *setprintlist; extern struct cmd_list_element *showprintlist; diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 01dcac941c2..5bafb9d11cd 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -19503,12 +19503,16 @@ Print symbol cache usage statistics. This helps determine how well the cache is being utilized. +@kindex maint flush symbol-cache @kindex maint flush-symbol-cache @cindex symbol cache, flushing -@item maint flush-symbol-cache -Flush the contents of the symbol cache, all entries are removed. -This command is useful when debugging the symbol cache. -It is also useful when collecting performance data. +@item maint flush symbol-cache +@itemx maint flush-symbol-cache +Flush the contents of the symbol cache, all entries are removed. This +command is useful when debugging the symbol cache. It is also useful +when collecting performance data. The command @code{maint +flush-symbol-cache} is deprecated in favor of @code{maint flush +symbol-cache}.. @end table @@ -38859,9 +38863,15 @@ restore internal @end smallexample +@kindex maint flush register-cache @kindex flushregs -@item flushregs -This command forces @value{GDBN} to flush its internal register cache. +@cindex register cache, flushing +@item maint flush register-cache +@itemx flushregs +Flush the contents of the register cache and as a consequence the +frame cache. This command is useful when debugging issues related to +register fetching, or frame unwinding. The command @code{flushregs} +is deprecated in favor of @code{maint flush register-cache}. @kindex maint print objfiles @cindex info for known object files diff --git a/gdb/maint.c b/gdb/maint.c index 56319600ed8..ac2431562d3 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -1083,6 +1083,11 @@ lists all sections from all object files, including shared libraries."), &maintenanceprintlist, "maintenance print ", 0, &maintenancelist); + add_basic_prefix_cmd ("flush", class_maintenance, + _("Maintenance command for flushing GDB internal caches."), + &maintenanceflushlist, "maintenance flush ", 0, + &maintenancelist); + add_basic_prefix_cmd ("set", class_maintenance, _("\ Set GDB internal variables used by the GDB maintainer.\n\ Configure variables internal to GDB that aid in GDB's maintenance"), diff --git a/gdb/regcache.c b/gdb/regcache.c index 91d3202b94b..a0dff93a53a 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -30,6 +30,7 @@ #include "observable.h" #include "regset.h" #include +#include "cli/cli-cmds.h" /* * DATA STRUCTURE @@ -1382,6 +1383,8 @@ regcache::debug_print_register (const char *func, int regno) fprintf_unfiltered (gdb_stdlog, "\n"); } +/* Implement 'maint flush register-cache' command. */ + static void reg_flush_command (const char *command, int from_tty) { @@ -2076,14 +2079,20 @@ void _initialize_regcache (); void _initialize_regcache () { + struct cmd_list_element *c; + regcache_descr_handle = gdbarch_data_register_post_init (init_regcache_descr); gdb::observers::target_changed.attach (regcache_observer_target_changed); gdb::observers::thread_ptid_changed.attach (regcache_thread_ptid_changed); - add_com ("flushregs", class_maintenance, reg_flush_command, - _("Force gdb to flush its register cache (maintainer command).")); + add_cmd ("register-cache", class_maintenance, reg_flush_command, + _("Force gdb to flush its register and frame cache."), + &maintenanceflushlist); + c = add_com_alias ("flushregs", "maintenance flush register-cache", + class_maintenance, 0); + deprecate_cmd (c, "maintenance flush register-cache"); #if GDB_SELF_TEST selftests::register_test ("get_thread_arch_aspace_regcache", diff --git a/gdb/symtab.c b/gdb/symtab.c index dccc3d1e237..3339bf7b88a 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -42,6 +42,7 @@ #include "addrmap.h" #include "cli/cli-utils.h" #include "cli/cli-style.h" +#include "cli/cli-cmds.h" #include "fnmatch.h" #include "hashtab.h" #include "typeprint.h" @@ -6929,10 +6930,13 @@ If zero then the symbol cache is disabled."), _("Print symbol cache statistics for each program space."), &maintenanceprintlist); - add_cmd ("flush-symbol-cache", class_maintenance, + add_cmd ("symbol-cache", class_maintenance, maintenance_flush_symbol_cache, _("Flush the symbol cache for each program space."), - &maintenancelist); + &maintenanceflushlist); + c = add_alias_cmd ("flush-symbol-cache", "flush symbol-cache", + class_maintenance, 0, &maintenancelist); + deprecate_cmd (c, "maintenancelist flush symbol-cache"); gdb::observers::executable_changed.attach (symtab_observer_executable_changed); gdb::observers::new_objfile.attach (symtab_new_objfile_observer); diff --git a/gdb/testsuite/gdb.base/c-linkage-name.exp b/gdb/testsuite/gdb.base/c-linkage-name.exp index 6b0a014949e..c6b3b509df6 100644 --- a/gdb/testsuite/gdb.base/c-linkage-name.exp +++ b/gdb/testsuite/gdb.base/c-linkage-name.exp @@ -64,7 +64,7 @@ gdb_test "maint info symtabs" "\{ symtab \[^\r\n\]*c-linkage-name-2.c.*" # Flush the symbol cache to prevent the lookup to return the same as before. -gdb_test "maint flush-symbol-cache" +gdb_test "maint flush symbol-cache" # Try to print MUNDANE using its linkage name again, after partial # symtab expansion. diff --git a/gdb/testsuite/gdb.base/killed-outside.exp b/gdb/testsuite/gdb.base/killed-outside.exp index 3e20ad67cee..645b41f4867 100644 --- a/gdb/testsuite/gdb.base/killed-outside.exp +++ b/gdb/testsuite/gdb.base/killed-outside.exp @@ -115,7 +115,7 @@ with_test_prefix "stepi" { # other commands would trigger. with_test_prefix "registers" { test { - gdb_test "flushregs" ".*" + gdb_test "maint flush register-cache" ".*" gdb_test "info threads" ".*" } } diff --git a/gdb/testsuite/gdb.opt/inline-bt.exp b/gdb/testsuite/gdb.opt/inline-bt.exp index d428c396359..109627c2306 100644 --- a/gdb/testsuite/gdb.opt/inline-bt.exp +++ b/gdb/testsuite/gdb.opt/inline-bt.exp @@ -61,7 +61,7 @@ gdb_test "info frame" ".*inlined into frame.*" "func2 inlined (3)" # function. gdb_test_no_output "set backtrace limit 2" # Force flushing the frame cache. -gdb_test "flushregs" "Register cache flushed." +gdb_test "maint flush register-cache" "Register cache flushed." gdb_test "up" "#1 .*func1.*" "up from bar (4)" gdb_test "info frame" ".*in func1.*" "info frame still works" # Verify the user visible limit works as expected. diff --git a/gdb/testsuite/gdb.perf/gmonster-null-lookup.py b/gdb/testsuite/gdb.perf/gmonster-null-lookup.py index eaf4b11c9f8..f4ce1ea55e9 100644 --- a/gdb/testsuite/gdb.perf/gmonster-null-lookup.py +++ b/gdb/testsuite/gdb.perf/gmonster-null-lookup.py @@ -40,7 +40,7 @@ class NullLookup(perftest.TestCaseWithBasicMeasurements): utils.safe_execute("mt expand-symtabs") iteration = 5 while iteration > 0: - utils.safe_execute("mt flush-symbol-cache") + utils.safe_execute("mt flush symbol-cache") func = lambda: utils.safe_execute("p symbol_not_found") self.measure.measure(func, run) iteration -= 1 diff --git a/gdb/testsuite/gdb.perf/gmonster-print-cerr.py b/gdb/testsuite/gdb.perf/gmonster-print-cerr.py index 796380dcacd..adee2e601aa 100644 --- a/gdb/testsuite/gdb.perf/gmonster-print-cerr.py +++ b/gdb/testsuite/gdb.perf/gmonster-print-cerr.py @@ -46,7 +46,7 @@ class PrintCerr(perftest.TestCaseWithBasicMeasurements): utils.runto_main() iteration = 5 while iteration > 0: - utils.safe_execute("mt flush-symbol-cache") + utils.safe_execute("mt flush symbol-cache") func = lambda: utils.safe_execute("print gm_std::cerr") self.measure.measure(func, run) iteration -= 1 diff --git a/gdb/testsuite/gdb.perf/gmonster-ptype-string.py b/gdb/testsuite/gdb.perf/gmonster-ptype-string.py index 78fa3dfd432..aa5513547e5 100644 --- a/gdb/testsuite/gdb.perf/gmonster-ptype-string.py +++ b/gdb/testsuite/gdb.perf/gmonster-ptype-string.py @@ -41,7 +41,7 @@ class GmonsterPtypeString(perftest.TestCaseWithBasicMeasurements): utils.safe_execute("mt expand-symtabs") iteration = 5 while iteration > 0: - utils.safe_execute("mt flush-symbol-cache") + utils.safe_execute("mt flush symbol-cache") func1 = lambda: utils.safe_execute("ptype hello") func = lambda: utils.run_n_times(2, func1) self.measure.measure(func, run) diff --git a/gdb/testsuite/gdb.python/py-unwind.exp b/gdb/testsuite/gdb.python/py-unwind.exp index 4ef63bf965c..e8ae8632a8e 100644 --- a/gdb/testsuite/gdb.python/py-unwind.exp +++ b/gdb/testsuite/gdb.python/py-unwind.exp @@ -57,4 +57,4 @@ gdb_test_sequence "where" "Backtrace restored by unwinder" { } # Check that the Python unwinder frames can be flushed / released. -gdb_test "flushregs" "Register cache flushed\\." "flush frames" +gdb_test "maint flush register-cache" "Register cache flushed\\." "flush frames"