gdb: add option to reverse order of _initialize function calls
authorSimon Marchi <simon.marchi@polymtl.ca>
Thu, 27 May 2021 17:59:01 +0000 (13:59 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Thu, 27 May 2021 18:00:08 +0000 (14:00 -0400)
commitd5a6313e1c4c748a7e744514dbabfa001636f09a
treebeebd72f21765cddff02dd70b5facce426d61da9
parentf39632d9579d3c97f1e50a728efed3c5409747d2
gdb: add option to reverse order of _initialize function calls

An earlier patch in this series fixed a dependency problem between two
_initialize functions.  That problem was uncovered by reversing the
order of the initialize function calls.

In short, symtab.c tried to add the alias "maintenance
flush-symbol-cache" for the command "maintenance flush symbol-cache".
Because the "maintenance flush" prefix command was not yet created (it
happens in maint.c, initialized later in this reversed order), the
add_alias_cmd function returned NULL.  That result was passed to
deprecate_cmd, which didn't expected that value, and that caused a
segfault.  This was fixed by changing alias creation functions to take
the target command as a cmd_list_element, instead of by name.

This patch adds a runtime option to reverse the order of the initialize
calls at will.  I chose to use an environment variable for this, over a
parameter (even a "maintenance" one), because:

 - The init functions are called before the early init commands are
   executed, so we could use -iex to turn this mode on early enough.
   This is obvious when you remember that commands / parameters are
   created by initialize funcitions :).

 - This is not something anybody would want to tweak after startup
   anyway.

gdb/ChangeLog:

* make-init-c: Add option to reverse function calls.

gdb/testsuite/ChangeLog:

* gdb.base/reverse-init-functions.exp: New.

Change-Id: I543e609cf526e7cb145a006a794d0e6851b63f45
gdb/ChangeLog
gdb/make-init-c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/reverse-init-functions.exp [new file with mode: 0644]