gdb/python: break dependencies between gdbpy_initialize_* functions
authorAndrew Burgess <aburgess@redhat.com>
Wed, 21 Sep 2022 13:40:30 +0000 (14:40 +0100)
committerAndrew Burgess <aburgess@redhat.com>
Thu, 20 Oct 2022 15:49:53 +0000 (16:49 +0100)
commit66bd1b294d8e5b460d6b9c645d2db529f4c441de
treeeb456e8c8e852274232c104342b5935fa713a4f9
parentd8de7963a9d64d82e745e402f7f264fc53f4f2a7
gdb/python: break dependencies between gdbpy_initialize_* functions

In a later commit in this series I will propose removing all of the
explicit gdbpy_initialize_* calls from python.c and replace these
calls with a more generic mechanism.

One of the side effects of this generic mechanism is that the order in
which the various Python sub-systems within GDB are initialized is no
longer guaranteed.

On the whole I don't think this matters, most of the sub-systems are
independent of each other, though testing did reveal a few places
where we did have dependencies, though I don't think those
dependencies were explicitly documented in a comment anywhere.

This commit removes the first dependency issue, with this and the next
commit, all of the implicit inter-sub-system dependencies will be
replaced by explicit dependencies, which will allow me to, I think,
clean up how the sub-systems are initialized.

The dependency is around the py_insn_type.  This type is setup in
gdbpy_initialize_instruction and used in gdbpy_initialize_record.
Rather than depend on the calls to these two functions being in a
particular order, in this commit I propose adding a new function
py_insn_get_insn_type.  This function will take care of setting up the
py_insn_type type and calling PyType_Ready.  This helper function can
be called from gdbpy_initialize_record and
gdbpy_initialize_instruction, and the py_insn_type will be initialized
just once.

To me this is better, the dependency is now really obvious, but also,
we no longer care in which order gdbpy_initialize_record and
gdbpy_initialize_instruction are called.

There should be no user visible changes after this commit.
gdb/python/py-instruction.c
gdb/python/py-instruction.h
gdb/python/py-record.c