Fix alias command not detecting non matching prefix & sometimes asserting.
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-25 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-25 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.base/alias.exp: Test non matching/non existing prefixes.
This commit is contained in:
parent
9b444f9533
commit
b65b566cdc
@ -1,3 +1,8 @@
|
||||
2019-06-25 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* cli/cli-cmds.c (alias_command): Compare the alias prefix
|
||||
with the command prefix.
|
||||
|
||||
2019-06-25 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* tui/tui-wingeneral.c (tui_delete_win): Remove "return".
|
||||
|
@ -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 ();
|
||||
|
@ -1,3 +1,7 @@
|
||||
2019-06-23 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* gdb.base/alias.exp: Test non matching/non existing prefixes.
|
||||
|
||||
2019-06-25 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR testsuite/24727
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user