aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/python-internal.h
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2022-09-21 16:23:02 +0100
committerAndrew Burgess <aburgess@redhat.com>2022-10-20 16:49:53 +0100
commit8a3b17063e86ba7687896de7b5de870006a02ef5 (patch)
treee3216fa897fd8764d0c0849929d7a7fe215b0df9 /gdb/python/python-internal.h
parent66bd1b294d8e5b460d6b9c645d2db529f4c441de (diff)
downloadgdb-8a3b17063e86ba7687896de7b5de870006a02ef5.zip
gdb-8a3b17063e86ba7687896de7b5de870006a02ef5.tar.gz
gdb-8a3b17063e86ba7687896de7b5de870006a02ef5.tar.bz2
gdb/python: break more 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 comment anywhere. This commit is similar to the previous one, and fixes the second dependency issue that I found. In this case the finish_breakpoint_object_type uses the breakpoint_object_type as its tp_base, this means that breakpoint_object_type must have been initialized with a call to PyType_Ready before finish_breakpoint_object_type can be initialized. Previously we depended on the ordering of calls to gdbpy_initialize_breakpoints and gdbpy_initialize_finishbreakpoints in python.c. After this commit a new function gdbpy_breakpoint_init_breakpoint_type exists, this function ensures that breakpoint_object_type has been initialized, and can be called from any gdbpy_initialize_* function. I feel that this change makes the dependency explicit, which I think is a good thing. There should be no user visible changes after this commit.
Diffstat (limited to 'gdb/python/python-internal.h')
-rw-r--r--gdb/python/python-internal.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index c2ac96d..06357cc 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -290,6 +290,18 @@ extern PyTypeObject frame_object_type
extern PyTypeObject thread_object_type
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("thread_object");
+/* Ensure that breakpoint_object_type is initialized and return true. If
+ breakpoint_object_type can't be initialized then set a suitable Python
+ error and return false.
+
+ This function needs to be called from any gdbpy_initialize_* function
+ that wants to reference breakpoint_object_type. After all the
+ gdbpy_initialize_* functions have been called then breakpoint_object_type
+ is guaranteed to have been initialized, and this function does not need
+ calling before referencing breakpoint_object_type. */
+
+extern bool gdbpy_breakpoint_init_breakpoint_type ();
+
struct gdbpy_breakpoint_object
{
PyObject_HEAD