From: Philippe Waroquiers <philippe.waroquiers@skynet.be>
To: gdb-patches@sourceware.org
Cc: Philippe Waroquiers <philippe.waroquiers@skynet.be>
Subject: [RFA] Fix alias command not detecting non matching prefix & sometimes asserting.
Date: Sun, 23 Jun 2019 15:41:00 -0000 [thread overview]
Message-ID: <20190623154106.13224-1-philippe.waroquiers@skynet.be> (raw)
alias_command does not detect that the prefixes of the alias command and the
aliased command are not matching: it is comparing the alias prefix
with itself, instead of comparing it with the aliased command prefix.
This causes either the alias command to silently do nothing,
or to have GDB asserting:
(gdb) alias assigne imprime limite-elements = set print elements
../../binutils-gdb/gdb/cli/cli-cmds.c:1552: internal-error: void alias_command(const char*, int): Assertion `c_command != NULL && c_command != (struct cmd_list_element *) -1' failed.
A problem internal to GDB has been detected,
Fix the logic, and update gdb.base/alias.exp to test these cases.
gdb/ChangeLog
2019-06-23 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* cli/cli-cmds.c (alias_command): Compare the alias prefix
with the command prefix.
gdb/testsuite/ChangeLog
2019-06-23 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* gdb.base/alias.exp: Test non matching/non existing prefixes.
---
gdb/cli/cli-cmds.c | 9 +++---
gdb/testsuite/gdb.base/alias.exp | 50 ++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 4 deletions(-)
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 62f4d7f0c5..5124ab3f1b 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -1518,8 +1518,8 @@ alias_command (const char *args, int from_tty)
Example: alias spe = set print elements
Otherwise ALIAS and COMMAND must have the same number of words,
- and every word except the last must match; and the last word of
- ALIAS is made an alias of the last word of COMMAND.
+ and every word except the last must identify the same prefix command;
+ and the last word of ALIAS is made an alias of the last word of COMMAND.
Example: alias set print elms = set pr elem
Note that unambiguous abbreviations are allowed. */
@@ -1538,10 +1538,11 @@ alias_command (const char *args, int from_tty)
error (_("Mismatched command length between ALIAS and COMMAND."));
/* Create copies of ALIAS and COMMAND without the last word,
- and use that to verify the leading elements match. */
+ and use that to verify the leading elements give the same
+ prefix command. */
std::string alias_prefix_string (argv_to_string (alias_argv,
alias_argc - 1));
- std::string command_prefix_string (argv_to_string (alias_argv,
+ std::string command_prefix_string (argv_to_string (command_argv.get (),
command_argc - 1));
alias_prefix = alias_prefix_string.c_str ();
command_prefix = command_prefix_string.c_str ();
diff --git a/gdb/testsuite/gdb.base/alias.exp b/gdb/testsuite/gdb.base/alias.exp
index fe4eb44cd0..20722e5dea 100644
--- a/gdb/testsuite/gdb.base/alias.exp
+++ b/gdb/testsuite/gdb.base/alias.exp
@@ -66,3 +66,53 @@ gdb_test_no_output "alias set pr elms = set p elem"
gdb_test_no_output "set pr elms 51"
gdb_test "show print elements" "Limit .* is 51\[.\]" "verify set pr elms"
gdb_test "help set print" "set print elms .*"
+
+# Verify alias command detects a non existing prefix.
+gdb_test "alias assigne imprime limite-elements = set print elements" \
+ "ALIAS and COMMAND prefixes do not match\." \
+ "assigne imprime prefix not defined"
+
+gdb_test "alias set imprime limite-elements = set print elements" \
+ "ALIAS and COMMAND prefixes do not match\." \
+ "set imprime prefix not defined"
+
+# Verify alias command detects a non matching prefix.
+gdb_test "alias set ada limite-elements = set print elements" \
+ "ALIAS and COMMAND prefixes do not match\." \
+ "mismatched prefix"
+
+# Verify alias command detects a non matching prefix due to length.
+gdb_test "alias set imprime-limite-elements = set print elements" \
+ "Mismatched command length between ALIAS and COMMAND\." \
+ "mismatched length"
+
+
+# Gradually define the prefixes and the limite-elements command.
+gdb_test_no_output "alias assigne = set" "alias assigne"
+gdb_test_no_output "alias assigne imprime = set print" "alias assigne imprime"
+gdb_test_no_output "alias assigne imprime limite-elements = set print elements" \
+ "alias assigne imprime limite-elements"
+
+# Define an alias using the command prefix with a command using an alias prefix.
+gdb_test_no_output "alias set print max-elements = assigne imprime elements" \
+ "alias set print max-elements using assigne imprime"
+
+
+# Tests the resulting prefixes and commands.
+gdb_test_no_output "assigne print elements 52"
+gdb_test "show print elements" "Limit .* is 52\[.\]" "verify 52"
+
+gdb_test_no_output "assigne imprime elements 53"
+gdb_test "show print elements" "Limit .* is 53\[.\]" "verify 53"
+
+gdb_test_no_output "assigne imprime limite-elements 54"
+gdb_test "show print elements" "Limit .* is 54\[.\]" "verify 54"
+
+gdb_test_no_output "set imprime elements 55"
+gdb_test "show print elements" "Limit .* is 55\[.\]" "verify 55"
+
+gdb_test_no_output "set print limite-elements 56"
+gdb_test "show print elements" "Limit .* is 56\[.\]" "verify 56"
+
+gdb_test_no_output "set print max-elements 57"
+gdb_test "show print elements" "Limit .* is 57\[.\]" "verify 57"
--
2.20.1
next reply other threads:[~2019-06-23 15:41 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-23 15:41 Philippe Waroquiers [this message]
2019-06-25 14:49 ` Tom Tromey
2019-06-25 17:42 ` Philippe Waroquiers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190623154106.13224-1-philippe.waroquiers@skynet.be \
--to=philippe.waroquiers@skynet.be \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox