]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add alias command to cmd_list_element
authorYao Qi <yao.qi@linaro.org>
Wed, 17 May 2017 13:22:04 +0000 (14:22 +0100)
committerYao Qi <yao.qi@linaro.org>
Wed, 17 May 2017 13:24:57 +0000 (14:24 +0100)
When we add alias command, we call add_alias_cmd and pass the alias name
and command name.  This implicitly requires the command and its prefix
commands are already added to cmdlist.  This may not be true, for example,

  add_com_alias ("tty", "set inferior-tty", class_alias, 0);

"inferior-tty" command is added to setlist, but setlist may not be added
to cmdlist (It depends on the order of related _initialize_XXX functions
called) so that we can't find "set inferior-tty" from cmdlist.

This patch fixes this problem by passing cmd_list_element of "inferior-tty"
to add_alias_cmd, so that cmd_list_element of "inferior-tty" doesn't have
to be reachable from cmdlist at that moment.

gdb:

2017-05-17  Yao Qi  <yao.qi@linaro.org>

* cli/cli-decode.c (add_alias_cmd): New function.
* command.h (add_alias_cmd): Declare.
* infcmd.c (_initialize_infcmd): Don't call add_com_alias,
instead call add_alias_cmd.

gdb/testsuite:

2017-05-17  Simon Marchi  <simon.marchi@ericsson.com>

* gdb.base/set-inferior-tty.exp (test_set_inferior_tty): Add
argument command.
(top-level): Invoke test_set_inferior_tty.

gdb/ChangeLog
gdb/cli/cli-decode.c
gdb/command.h
gdb/infcmd.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/set-inferior-tty.exp

index 87c69ddae52ad21b9e27298deca2a8555557c072..cbeb9a7b764249bf4de6e3121bc59f47aafb2529 100644 (file)
@@ -1,3 +1,10 @@
+2017-05-17  Yao Qi  <yao.qi@linaro.org>
+
+       * cli/cli-decode.c (add_alias_cmd): New function.
+       * command.h (add_alias_cmd): Declare.
+       * infcmd.c (_initialize_infcmd): Don't call add_com_alias,
+       instead call add_alias_cmd.
+
 2017-05-12  Tom Tromey  <tom@tromey.com>
 
        PR rust/21483:
index d45733eff3ac55ad2f850e94b69689052578f441..d386d0296f4f1897c6d4d0d09067a93b7cad6c80 100644 (file)
@@ -284,16 +284,10 @@ deprecate_cmd (struct cmd_list_element *cmd, const char *replacement)
 }
 
 struct cmd_list_element *
-add_alias_cmd (const char *name, const char *oldname, enum command_class theclass,
-              int abbrev_flag, struct cmd_list_element **list)
+add_alias_cmd (const char *name, cmd_list_element *old,
+              enum command_class theclass, int abbrev_flag,
+              struct cmd_list_element **list)
 {
-  const char *tmp;
-  struct cmd_list_element *old;
-  struct cmd_list_element *c;
-
-  tmp = oldname;
-  old = lookup_cmd (&tmp, *list, "", 1, 1);
-
   if (old == 0)
     {
       struct cmd_list_element *prehook, *prehookee, *posthook, *posthookee;
@@ -307,7 +301,7 @@ add_alias_cmd (const char *name, const char *oldname, enum command_class theclas
       return 0;
     }
 
-  c = add_cmd (name, theclass, NULL, old->doc, list);
+  struct cmd_list_element *c = add_cmd (name, theclass, NULL, old->doc, list);
 
   /* If OLD->DOC can be freed, we should make another copy.  */
   if (old->doc_allocated)
@@ -330,6 +324,21 @@ add_alias_cmd (const char *name, const char *oldname, enum command_class theclas
   return c;
 }
 
+struct cmd_list_element *
+add_alias_cmd (const char *name, const char *oldname,
+              enum command_class theclass, int abbrev_flag,
+              struct cmd_list_element **list)
+{
+  const char *tmp;
+  struct cmd_list_element *old;
+
+  tmp = oldname;
+  old = lookup_cmd (&tmp, *list, "", 1, 1);
+
+  return add_alias_cmd (name, old, theclass, abbrev_flag, list);
+}
+
+
 /* Like add_cmd but adds an element for a command prefix: a name that
    should be followed by a subcommand to be looked up in another
    command list.  PREFIXLIST should be the address of the variable
index ae200217be03f34a24ba29faa53e9feb2f5dabad..aa179e91264538e293ffcfcec467ab7388d3fd1c 100644 (file)
@@ -141,6 +141,12 @@ extern struct cmd_list_element *add_alias_cmd (const char *, const char *,
                                               enum command_class, int,
                                               struct cmd_list_element **);
 
+extern struct cmd_list_element *add_alias_cmd (const char *,
+                                              cmd_list_element *,
+                                              enum command_class, int,
+                                              struct cmd_list_element **);
+
+
 extern struct cmd_list_element *add_prefix_cmd (const char *, enum command_class,
                                                cmd_cfunc_ftype *fun,
                                                const char *,
index 22b2c7aadecc18b81f7da4a8e4f1a4b8d45434d1..ede2ab091dc7d97e50532bf161ec784139799276 100644 (file)
@@ -3229,7 +3229,10 @@ is restored."),
                                     set_inferior_tty_command,
                                     show_inferior_tty_command,
                                     &setlist, &showlist);
-  add_com_alias ("tty", "set inferior-tty", class_alias, 0);
+  cmd_name = "inferior-tty";
+  c = lookup_cmd (&cmd_name, setlist, "", -1, 1);
+  gdb_assert (c != NULL);
+  add_alias_cmd ("tty", c, class_alias, 0, &cmdlist);
 
   cmd_name = "args";
   add_setshow_string_noescape_cmd (cmd_name, class_run,
index b1f969492a1f26da18c29729c5ba5f7991d49e1c..1414152bcad05292caf0a3981b5d4f27fb0cda47 100644 (file)
@@ -1,3 +1,9 @@
+2017-05-17  Simon Marchi  <simon.marchi@ericsson.com>
+
+       * gdb.base/set-inferior-tty.exp (test_set_inferior_tty): Add
+       argument command.
+       (top-level): Invoke test_set_inferior_tty.
+
 2017-05-04  Pedro Alves  <palves@redhat.com>
 
        * gdb.python/py-record-btrace-threads.exp (check_insn_for_thread):
index d84d4a39ea21131a5d4217e59cbaa2e692152b50..480cffab1db07022f78bf8b8f0512c3acdff81b1 100644 (file)
@@ -21,20 +21,22 @@ if {[build_executable $testfile.exp $testfile ${srcfile} ${compile_options}] ==
     return -1
 }
 
-proc test_set_inferior_tty { } {
+proc test_set_inferior_tty { command } {
     global binfile
 
     clean_restart ${binfile}
 
-    gdb_test_no_output "set inferior-tty hello" "set inferior-tty to hello"
+    gdb_test_no_output "$command hello" "set inferior-tty to hello"
     gdb_test "show inferior-tty" \
             "Terminal for future runs of program being debugged is \"hello\"." \
             "show inferior-tty shows hello"
 
-    gdb_test_no_output "set inferior-tty" "set inferior-tty to empty"
+    gdb_test_no_output "$command" "set inferior-tty to empty"
     gdb_test "show inferior-tty" \
             "Terminal for future runs of program being debugged is \"\"." \
             "show inferior-tty shows empty"
 }
 
-test_set_inferior_tty
+foreach_with_prefix command {"set inferior-tty" "tty"} {
+    test_set_inferior_tty $command
+}