diff options
author | Tom Tromey <tromey@adacore.com> | 2022-11-01 12:48:27 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2025-04-26 15:03:00 -0600 |
commit | e5e619acf9922bd4c7be05d944eae34cc4fa413b (patch) | |
tree | 05db1521873b4c2e22405aef326d8858499bf0a4 | |
parent | 8f9b303e68d1e5b48b253b0a215ef7761422fb8a (diff) | |
download | binutils-e5e619acf9922bd4c7be05d944eae34cc4fa413b.zip binutils-e5e619acf9922bd4c7be05d944eae34cc4fa413b.tar.gz binutils-e5e619acf9922bd4c7be05d944eae34cc4fa413b.tar.bz2 |
Add "maint canonicalize" command
This adds a new "maint canonicalize" command that can be used to see
the canonical form of a C++ name. I've needed this a few times when
debugging gdb.
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Reviewed-By: Tom de Vries <tdevries@suse.de>
-rw-r--r-- | gdb/NEWS | 3 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 7 | ||||
-rw-r--r-- | gdb/maint.c | 19 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/maint.exp | 5 |
4 files changed, 34 insertions, 0 deletions
@@ -56,6 +56,9 @@ maintenance check psymtabs maintenance check symtabs Renamed from maintenance check-symtabs +maintenance canonicalize + Show the canonical form of a C++ name. + set riscv numeric-register-names on|off show riscv numeric-register-names Controls whether GDB refers to risc-v registers by their numeric names diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 362e6e7..9b4aa5b 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -41632,6 +41632,13 @@ into remote agent bytecodes and display them as a disassembled list. This command is useful for debugging the agent version of dynamic printf (@pxref{Dynamic Printf}). +@kindex maint canonicalize +@item maint canonicalize @var{name} +Print the canonical form of @var{name}, a C@t{++} name. Because a +C@t{++} name may have multiple possible spellings, @value{GDBN} +computes a canonical form of a name for internal use. For example, +@code{short int} and @code{short} are two ways to name the same type. + @kindex maint info breakpoints @anchor{maint info breakpoints} @item maint info breakpoints diff --git a/gdb/maint.c b/gdb/maint.c index f5977ec..766ab74 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -39,6 +39,7 @@ #include "inferior.h" #include "gdbsupport/thread-pool.h" #include "event-top.h" +#include "cp-support.h" #include "cli/cli-decode.h" #include "cli/cli-utils.h" @@ -108,6 +109,18 @@ maintenance_demangle (const char *args, int from_tty) styled_string (command_style.style (), "demangle")); } +/* Print the canonical form of a name. */ + +static void +maintenance_canonicalize (const char *args, int from_tty) +{ + gdb::unique_xmalloc_ptr<char> canon = cp_canonicalize_string (args); + if (canon == nullptr) + gdb_printf ("No change.\n"); + else + gdb_printf ("canonical = %s\n", canon.get ()); +} + static void maintenance_time_display (const char *args, int from_tty) { @@ -1343,6 +1356,12 @@ This command has been moved to \"demangle\"."), &maintenancelist); deprecate_cmd (cmd, "demangle"); + cmd = add_cmd ("canonicalize", class_maintenance, maintenance_canonicalize, + _("\ +Show the canonical form of a C++ name.\n\ +Usage: maintenance canonicalize NAME"), + &maintenancelist); + add_prefix_cmd ("per-command", class_maintenance, set_per_command_cmd, _("\ Per-command statistics settings."), &per_command_setlist, diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp index e006d55..52282bc 100644 --- a/gdb/testsuite/gdb.base/maint.exp +++ b/gdb/testsuite/gdb.base/maint.exp @@ -513,4 +513,9 @@ gdb_test_no_output "maint print symbols" gdb_test_no_output "maint print msymbols" gdb_test_no_output "maint print psymbols" +gdb_test "maint canonicalize int short" "canonical = short" +gdb_test "maint canonicalize fn<ty<int>>" \ + "canonical = fn<ty<int> >" +gdb_test "maint canonical unsigned int" "No change\\." + gdb_exit |