This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GDB 7.99.91 available for testing


On 2017-05-16 16:49, Yao Qi wrote:
On 17-05-16 09:51:42, Simon Marchi wrote:

So indeed, the problem is due to the ordering of the _initialize functions
that changed, _initialize_printcmd used to be called before
_initialize_infcmd, now it's the reverse.

When it works, the timeline of events to be able to get the tty alias
working is the following:

1. The "set" command is registered as a prefix command in printcmd.c, which adds it to the global command list (cmdlist). setlist is the list of its
subcommands.
2. The "set inferior-tty" command is added as a child of "set" (i.e. it's
inserted into setlist) in infcmd.c.
3. The "tty" alias is created for "set inferior-tty" in infcmd.c. This looks up "set" in cmdlist, then "inferior-tty" in the subcommands of "set".
It's found and everyone is happy.

With the _initialize functions called in a different order, steps are
executed in the order 2-3-1. When we try to create the alias, the "set" command has not been created and is therefore not part of cmdlist. We can't
find the "set inferior-tty" command, so the alias is not created.

When we try to create the alias (in step 3), setlist is already created
in step 2, but it is not linked with cmdlist.  The command "set
inferior-tty" is created in step 2 too.  Since step 2 and step 3 are
close to each other (in _initialize_infcmd), we can pass the "set
inferior-tty" cmd_list_element to the place we create alias, like this,

  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);

this makes sure we add alias "tty" under cmdlist, and it is alias to
"set inferior-tty".  Step 1 just links setlist and cmdlist together.


I think the core issue is that it's currently possible to create subcommands for prefixes that have not been created yet. We need some way of ensuring
some kind of ordering.  Here are some ideas:


How is the patch below?  I run regress tests yet, and it still needs
some comments.

It's very clean, I like it. I think it's good for master and 8.0. Do you want to finish it or do you want me to pick it up?

I have enhanced gdb.base/set-inferior-tty.exp to exercise the alias, it could be added to your patch:

https://github.com/simark/binutils-gdb/commit/1a8bcb5dbc0dde3d8a4d3f73d0a057b3831902dd#diff-2f94d545bf202185ae6a6022ebfa93bc

Thanks,

Simon


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]