1 /* Gdb/Python header for private use by Python module.
2 
3    Copyright (C) 2008-2024 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #ifndef PYTHON_PYTHON_INTERNAL_H
21 #define PYTHON_PYTHON_INTERNAL_H
22 
23 #include "extension.h"
24 #include "extension-priv.h"
25 
26 /* These WITH_* macros are defined by the CPython API checker that
27    comes with the Python plugin for GCC.  See:
28    https://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html
29    The checker defines a WITH_ macro for each attribute it
30    exposes.  Note that we intentionally do not use
31    'cpychecker_returns_borrowed_ref' -- that idiom is forbidden in
32    gdb.  */
33 
34 #ifdef WITH_CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF_ATTRIBUTE
35 #define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)             \
36   __attribute__ ((cpychecker_type_object_for_typedef (ARG)))
37 #else
38 #define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
39 #endif
40 
41 #ifdef WITH_CPYCHECKER_SETS_EXCEPTION_ATTRIBUTE
42 #define CPYCHECKER_SETS_EXCEPTION __attribute__ ((cpychecker_sets_exception))
43 #else
44 #define CPYCHECKER_SETS_EXCEPTION
45 #endif
46 
47 #ifdef WITH_CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION_ATTRIBUTE
48 #define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION           \
49   __attribute__ ((cpychecker_negative_result_sets_exception))
50 #else
51 #define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
52 #endif
53 
54 /* /usr/include/features.h on linux systems will define _POSIX_C_SOURCE
55    if it sees _GNU_SOURCE (which config.h will define).
56    pyconfig.h defines _POSIX_C_SOURCE to a different value than
57    /usr/include/features.h does causing compilation to fail.
58    To work around this, undef _POSIX_C_SOURCE before we include Python.h.
59 
60    Same problem with _XOPEN_SOURCE.  */
61 #undef _POSIX_C_SOURCE
62 #undef _XOPEN_SOURCE
63 
64 /* On sparc-solaris, /usr/include/sys/feature_tests.h defines
65    _FILE_OFFSET_BITS, which pyconfig.h also defines.  Same work
66    around technique as above.  */
67 #undef _FILE_OFFSET_BITS
68 
69 /* A kludge to avoid redefinition of snprintf on Windows by pyerrors.h.  */
70 #if defined(_WIN32) && defined(HAVE_DECL_SNPRINTF)
71 #define HAVE_SNPRINTF 1
72 #endif
73 
74 /* Another kludge to avoid compilation errors because MinGW defines
75    'hypot' to '_hypot', but the C++ headers says "using ::hypot".  */
76 #ifdef __MINGW32__
77 # define _hypot hypot
78 #endif
79 
80 /* Request clean size types from Python.  */
81 #define PY_SSIZE_T_CLEAN
82 
83 /* Include the Python header files using angle brackets rather than
84    double quotes.  On case-insensitive filesystems, this prevents us
85    from including our python/python.h header file.  */
86 #include <Python.h>
87 #include <frameobject.h>
88 #include "py-ref.h"
89 
90 #define Py_TPFLAGS_CHECKTYPES 0
91 
92 /* If Python.h does not define WITH_THREAD, then the various
93    GIL-related functions will not be defined.  However,
94    PyGILState_STATE will be.  */
95 #ifndef WITH_THREAD
96 #define PyGILState_Ensure() ((PyGILState_STATE) 0)
97 #define PyGILState_Release(ARG) ((void)(ARG))
98 #define PyEval_InitThreads()
99 #define PyThreadState_Swap(ARG) ((void)(ARG))
100 #define PyEval_ReleaseLock()
101 #endif
102 
103 /* Python supplies HAVE_LONG_LONG and some `long long' support when it
104    is available.  These defines let us handle the differences more
105    cleanly.  */
106 #ifdef HAVE_LONG_LONG
107 
108 #define GDB_PY_LL_ARG "L"
109 #define GDB_PY_LLU_ARG "K"
110 typedef PY_LONG_LONG gdb_py_longest;
111 typedef unsigned PY_LONG_LONG gdb_py_ulongest;
112 #define gdb_py_long_as_ulongest PyLong_AsUnsignedLongLong
113 #define gdb_py_long_as_long_and_overflow PyLong_AsLongLongAndOverflow
114 
115 #else /* HAVE_LONG_LONG */
116 
117 #define GDB_PY_LL_ARG "L"
118 #define GDB_PY_LLU_ARG "K"
119 typedef long gdb_py_longest;
120 typedef unsigned long gdb_py_ulongest;
121 #define gdb_py_long_as_ulongest PyLong_AsUnsignedLong
122 #define gdb_py_long_as_long_and_overflow PyLong_AsLongAndOverflow
123 
124 #endif /* HAVE_LONG_LONG */
125 
126 #if PY_VERSION_HEX < 0x03020000
127 typedef long Py_hash_t;
128 #endif
129 
130 /* PyMem_RawMalloc appeared in Python 3.4.  For earlier versions, we can just
131    fall back to PyMem_Malloc.  */
132 
133 #if PY_VERSION_HEX < 0x03040000
134 #define PyMem_RawMalloc PyMem_Malloc
135 #endif
136 
137 /* PyObject_CallMethod's 'method' and 'format' parameters were missing
138    the 'const' qualifier before Python 3.4.  Hence, we wrap the
139    function in our own version to avoid errors with string literals.
140    Note, this is a variadic template because PyObject_CallMethod is a
141    varargs function and Python doesn't have a "PyObject_VaCallMethod"
142    variant taking a va_list that we could defer to instead.  */
143 
144 template<typename... Args>
145 static inline PyObject *
gdb_PyObject_CallMethod(PyObject * o,const char * method,const char * format,Args...args)146 gdb_PyObject_CallMethod (PyObject *o, const char *method, const char *format,
147                                Args... args) /* ARI: editCase function */
148 {
149   return PyObject_CallMethod (o,
150                                     const_cast<char *> (method),
151                                     const_cast<char *> (format),
152                                     args...);
153 }
154 
155 #undef PyObject_CallMethod
156 #define PyObject_CallMethod gdb_PyObject_CallMethod
157 
158 /* The 'name' parameter of PyErr_NewException was missing the 'const'
159    qualifier in Python <= 3.4.  Hence, we wrap it in a function to
160    avoid errors when compiled with -Werror.  */
161 
162 static inline PyObject*
gdb_PyErr_NewException(const char * name,PyObject * base,PyObject * dict)163 gdb_PyErr_NewException (const char *name, PyObject *base, PyObject *dict)
164 {
165   return PyErr_NewException (const_cast<char *> (name), base, dict);
166 }
167 
168 #define PyErr_NewException gdb_PyErr_NewException
169 
170 /* PySys_GetObject's 'name' parameter was missing the 'const'
171    qualifier before Python 3.4.  Hence, we wrap it in a function to
172    avoid errors when compiled with -Werror.  */
173 
174 static inline PyObject *
gdb_PySys_GetObject(const char * name)175 gdb_PySys_GetObject (const char *name)
176 {
177   return PySys_GetObject (const_cast<char *> (name));
178 }
179 
180 #define PySys_GetObject gdb_PySys_GetObject
181 
182 /* PySys_SetPath was deprecated in Python 3.11.  Disable the deprecated
183    code for Python 3.10 and newer.  */
184 #if PY_VERSION_HEX < 0x030a0000
185 
186 /* PySys_SetPath's 'path' parameter was missing the 'const' qualifier
187    before Python 3.6.  Hence, we wrap it in a function to avoid errors
188    when compiled with -Werror.  */
189 
190 # define GDB_PYSYS_SETPATH_CHAR wchar_t
191 
192 static inline void
gdb_PySys_SetPath(const GDB_PYSYS_SETPATH_CHAR * path)193 gdb_PySys_SetPath (const GDB_PYSYS_SETPATH_CHAR *path)
194 {
195   PySys_SetPath (const_cast<GDB_PYSYS_SETPATH_CHAR *> (path));
196 }
197 
198 #define PySys_SetPath gdb_PySys_SetPath
199 #endif
200 
201 /* Wrap PyGetSetDef to allow convenient construction with string
202    literals.  Unfortunately, PyGetSetDef's 'name' and 'doc' members
203    are 'char *' instead of 'const char *', meaning that in order to
204    list-initialize PyGetSetDef arrays with string literals (and
205    without the wrapping below) would require writing explicit 'char *'
206    casts.  Instead, we extend PyGetSetDef and add constexpr
207    constructors that accept const 'name' and 'doc', hiding the ugly
208    casts here in a single place.  */
209 
210 struct gdb_PyGetSetDef : PyGetSetDef
211 {
gdb_PyGetSetDefgdb_PyGetSetDef212   constexpr gdb_PyGetSetDef (const char *name_, getter get_, setter set_,
213                                    const char *doc_, void *closure_)
214     : PyGetSetDef {const_cast<char *> (name_), get_, set_,
215                        const_cast<char *> (doc_), closure_}
216   {}
217 
218   /* Alternative constructor that allows omitting the closure in list
219      initialization.  */
gdb_PyGetSetDefgdb_PyGetSetDef220   constexpr gdb_PyGetSetDef (const char *name_, getter get_, setter set_,
221                                    const char *doc_)
222     : gdb_PyGetSetDef {name_, get_, set_, doc_, NULL}
223   {}
224 
225   /* Constructor for the sentinel entries.  */
gdb_PyGetSetDefgdb_PyGetSetDef226   constexpr gdb_PyGetSetDef (std::nullptr_t)
227     : gdb_PyGetSetDef {NULL, NULL, NULL, NULL, NULL}
228   {}
229 };
230 
231 /* The 'keywords' parameter of PyArg_ParseTupleAndKeywords has type
232    'char **'.  However, string literals are const in C++, and so to
233    avoid casting at every keyword array definition, we'll need to make
234    the keywords array an array of 'const char *'.  To avoid having all
235    callers add a 'const_cast<char **>' themselves when passing such an
236    array through 'char **', we define our own version of
237    PyArg_ParseTupleAndKeywords here with a corresponding 'keywords'
238    parameter type that does the cast in a single place.  (This is not
239    an overload of PyArg_ParseTupleAndKeywords in order to make it
240    clearer that we're calling our own function instead of a function
241    that exists in some newer Python version.)  */
242 
243 static inline int
gdb_PyArg_ParseTupleAndKeywords(PyObject * args,PyObject * kw,const char * format,const char ** keywords,...)244 gdb_PyArg_ParseTupleAndKeywords (PyObject *args, PyObject *kw,
245                                          const char *format, const char **keywords, ...)
246 {
247   va_list ap;
248   int res;
249 
250   va_start (ap, keywords);
251   res = PyArg_VaParseTupleAndKeywords (args, kw, format,
252                                                const_cast<char **> (keywords),
253                                                ap);
254   va_end (ap);
255 
256   return res;
257 }
258 
259 /* In order to be able to parse symtab_and_line_to_sal_object function
260    a real symtab_and_line structure is needed.  */
261 #include "symtab.h"
262 
263 /* Also needed to parse enum var_types. */
264 #include "command.h"
265 #include "breakpoint.h"
266 
267 enum gdbpy_iter_kind { iter_keys, iter_values, iter_items };
268 
269 struct block;
270 struct value;
271 struct language_defn;
272 struct program_space;
273 struct bpstat;
274 struct inferior;
275 
276 extern int gdb_python_initialized;
277 
278 extern PyObject *gdb_module;
279 extern PyObject *gdb_python_module;
280 extern PyTypeObject value_object_type
281     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("value_object");
282 extern PyTypeObject block_object_type
283     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("block_object");
284 extern PyTypeObject symbol_object_type
285     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symbol_object");
286 extern PyTypeObject event_object_type
287     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
288 extern PyTypeObject breakpoint_object_type
289     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("breakpoint_object");
290 extern PyTypeObject frame_object_type
291     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("frame_object");
292 extern PyTypeObject thread_object_type
293     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("thread_object");
294 
295 /* Ensure that breakpoint_object_type is initialized and return true.  If
296    breakpoint_object_type can't be initialized then set a suitable Python
297    error and return false.
298 
299    This function needs to be called from any gdbpy_initialize_* function
300    that wants to reference breakpoint_object_type.  After all the
301    gdbpy_initialize_* functions have been called then breakpoint_object_type
302    is guaranteed to have been initialized, and this function does not need
303    calling before referencing breakpoint_object_type.  */
304 
305 extern bool gdbpy_breakpoint_init_breakpoint_type ();
306 
307 struct gdbpy_breakpoint_object
308 {
309   PyObject_HEAD
310 
311   /* The breakpoint number according to gdb.  */
312   int number;
313 
314   /* The gdb breakpoint object, or NULL if the breakpoint has been
315      deleted.  */
316   struct breakpoint *bp;
317 
318   /* 1 is this is a FinishBreakpoint object, 0 otherwise.  */
319   int is_finish_bp;
320 };
321 
322 /* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
323    exception if it is invalid.  */
324 #define BPPY_REQUIRE_VALID(Breakpoint)                                  \
325     do {                                                                \
326       if ((Breakpoint)->bp == NULL)                                     \
327           return PyErr_Format (PyExc_RuntimeError,                        \
328                                    _("Breakpoint %d is invalid."),            \
329                                    (Breakpoint)->number);                     \
330     } while (0)
331 
332 /* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
333    exception if it is invalid.  This macro is for use in setter functions.  */
334 #define BPPY_SET_REQUIRE_VALID(Breakpoint)                              \
335     do {                                                                \
336       if ((Breakpoint)->bp == NULL)                                     \
337           {                                                               \
338             PyErr_Format (PyExc_RuntimeError, _("Breakpoint %d is invalid."), \
339                               (Breakpoint)->number);                          \
340             return -1;                                                    \
341           }                                                               \
342     } while (0)
343 
344 
345 /* Variables used to pass information between the Breakpoint
346    constructor and the breakpoint-created hook function.  */
347 extern gdbpy_breakpoint_object *bppy_pending_object;
348 
349 
350 struct thread_object
351 {
352   PyObject_HEAD
353 
354   /* The thread we represent.  */
355   struct thread_info *thread;
356 
357   /* The Inferior object to which this thread belongs.  */
358   PyObject *inf_obj;
359 
360   /* Dictionary holding user-added attributes.  This is the __dict__
361      attribute of the object.  */
362   PyObject *dict;
363 };
364 
365 struct inferior_object;
366 
367 extern struct cmd_list_element *set_python_list;
368 extern struct cmd_list_element *show_python_list;
369 
370 /* extension_language_script_ops "methods".  */
371 
372 /* Return true if auto-loading Python scripts is enabled.
373    This is the extension_language_script_ops.auto_load_enabled "method".  */
374 
375 extern bool gdbpy_auto_load_enabled (const struct extension_language_defn *);
376 
377 /* extension_language_ops "methods".  */
378 
379 extern enum ext_lang_rc gdbpy_apply_val_pretty_printer
380   (const struct extension_language_defn *,
381    struct value *value,
382    struct ui_file *stream, int recurse,
383    const struct value_print_options *options,
384    const struct language_defn *language);
385 extern enum ext_lang_bt_status gdbpy_apply_frame_filter
386   (const struct extension_language_defn *,
387    const frame_info_ptr &frame, frame_filter_flags flags,
388    enum ext_lang_frame_args args_type,
389    struct ui_out *out, int frame_low, int frame_high);
390 extern void gdbpy_preserve_values (const struct extension_language_defn *,
391                                            struct objfile *objfile,
392                                            htab_t copied_types);
393 extern enum ext_lang_bp_stop gdbpy_breakpoint_cond_says_stop
394   (const struct extension_language_defn *, struct breakpoint *);
395 extern int gdbpy_breakpoint_has_cond (const struct extension_language_defn *,
396                                               struct breakpoint *b);
397 
398 extern enum ext_lang_rc gdbpy_get_matching_xmethod_workers
399   (const struct extension_language_defn *extlang,
400    struct type *obj_type, const char *method_name,
401    std::vector<xmethod_worker_up> *dm_vec);
402 
403 
404 PyObject *gdbpy_history (PyObject *self, PyObject *args);
405 PyObject *gdbpy_add_history (PyObject *self, PyObject *args);
406 extern PyObject *gdbpy_history_count (PyObject *self, PyObject *args);
407 PyObject *gdbpy_convenience_variable (PyObject *self, PyObject *args);
408 PyObject *gdbpy_set_convenience_variable (PyObject *self, PyObject *args);
409 PyObject *gdbpy_breakpoints (PyObject *, PyObject *);
410 PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *);
411 PyObject *gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw);
412 PyObject *gdbpy_lookup_global_symbol (PyObject *self, PyObject *args,
413                                               PyObject *kw);
414 PyObject *gdbpy_lookup_static_symbol (PyObject *self, PyObject *args,
415                                               PyObject *kw);
416 PyObject *gdbpy_lookup_static_symbols (PyObject *self, PyObject *args,
417                                                      PyObject *kw);
418 PyObject *gdbpy_start_recording (PyObject *self, PyObject *args);
419 PyObject *gdbpy_current_recording (PyObject *self, PyObject *args);
420 PyObject *gdbpy_stop_recording (PyObject *self, PyObject *args);
421 PyObject *gdbpy_newest_frame (PyObject *self, PyObject *args);
422 PyObject *gdbpy_selected_frame (PyObject *self, PyObject *args);
423 PyObject *gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw);
424 int gdbpy_is_field (PyObject *obj);
425 PyObject *gdbpy_create_lazy_string_object (CORE_ADDR address, long length,
426                                                      const char *encoding,
427                                                      struct type *type);
428 PyObject *gdbpy_inferiors (PyObject *unused, PyObject *unused2);
429 PyObject *gdbpy_create_ptid_object (ptid_t ptid);
430 PyObject *gdbpy_selected_thread (PyObject *self, PyObject *args);
431 PyObject *gdbpy_selected_inferior (PyObject *self, PyObject *args);
432 PyObject *gdbpy_string_to_argv (PyObject *self, PyObject *args);
433 PyObject *gdbpy_parameter_value (const setting &var);
434 gdb::unique_xmalloc_ptr<char> gdbpy_parse_command_name
435   (const char *name, struct cmd_list_element ***base_list,
436    struct cmd_list_element **start_list);
437 PyObject *gdbpy_register_tui_window (PyObject *self, PyObject *args,
438                                              PyObject *kw);
439 
440 PyObject *symtab_and_line_to_sal_object (struct symtab_and_line sal);
441 PyObject *symtab_to_symtab_object (struct symtab *symtab);
442 PyObject *symbol_to_symbol_object (struct symbol *sym);
443 PyObject *block_to_block_object (const struct block *block,
444                                          struct objfile *objfile);
445 PyObject *value_to_value_object (struct value *v);
446 PyObject *type_to_type_object (struct type *);
447 PyObject *frame_info_to_frame_object (const frame_info_ptr &frame);
448 PyObject *symtab_to_linetable_object (PyObject *symtab);
449 gdbpy_ref<> pspace_to_pspace_object (struct program_space *);
450 PyObject *pspy_get_printers (PyObject *, void *);
451 PyObject *pspy_get_frame_filters (PyObject *, void *);
452 PyObject *pspy_get_frame_unwinders (PyObject *, void *);
453 PyObject *pspy_get_xmethods (PyObject *, void *);
454 
455 gdbpy_ref<> objfile_to_objfile_object (struct objfile *);
456 PyObject *objfpy_get_printers (PyObject *, void *);
457 PyObject *objfpy_get_frame_filters (PyObject *, void *);
458 PyObject *objfpy_get_frame_unwinders (PyObject *, void *);
459 PyObject *objfpy_get_xmethods (PyObject *, void *);
460 PyObject *gdbpy_lookup_objfile (PyObject *self, PyObject *args, PyObject *kw);
461 
462 PyObject *gdbarch_to_arch_object (struct gdbarch *gdbarch);
463 PyObject *gdbpy_all_architecture_names (PyObject *self, PyObject *args);
464 
465 PyObject *gdbpy_new_register_descriptor_iterator (struct gdbarch *gdbarch,
466                                                               const char *group_name);
467 PyObject *gdbpy_new_reggroup_iterator (struct gdbarch *gdbarch);
468 
469 gdbpy_ref<thread_object> create_thread_object (struct thread_info *tp);
470 gdbpy_ref<> thread_to_thread_object (thread_info *thr);;
471 gdbpy_ref<inferior_object> inferior_to_inferior_object (inferior *inf);
472 
473 PyObject *gdbpy_buffer_to_membuf (gdb::unique_xmalloc_ptr<gdb_byte> buffer,
474                                           CORE_ADDR address, ULONGEST length);
475 
476 struct process_stratum_target;
477 gdbpy_ref<> target_to_connection_object (process_stratum_target *target);
478 PyObject *gdbpy_connections (PyObject *self, PyObject *args);
479 
480 const struct block *block_object_to_block (PyObject *obj);
481 struct symbol *symbol_object_to_symbol (PyObject *obj);
482 struct value *value_object_to_value (PyObject *self);
483 struct value *convert_value_from_python (PyObject *obj);
484 struct type *type_object_to_type (PyObject *obj);
485 struct symtab *symtab_object_to_symtab (PyObject *obj);
486 struct symtab_and_line *sal_object_to_symtab_and_line (PyObject *obj);
487 frame_info_ptr frame_object_to_frame_info (PyObject *frame_obj);
488 struct gdbarch *arch_object_to_gdbarch (PyObject *obj);
489 
490 extern PyObject *gdbpy_execute_mi_command (PyObject *self, PyObject *args,
491                                                      PyObject *kw);
492 
493 /* Serialize RESULTS and print it in MI format to the current_uiout.
494 
495    This function handles the top-level results passed as a dictionary.
496    The caller is responsible for ensuring that.  The values within this
497    dictionary can be a wider range of types.  Handling the values of the top-level
498    dictionary is done by serialize_mi_result_1, see that function for more
499    details.
500 
501    If anything goes wrong while parsing and printing the MI output then an
502    error is thrown.  */
503 
504 extern void serialize_mi_results (PyObject *results);
505 
506 /* Implementation of the gdb.notify_mi function.  */
507 
508 extern PyObject *gdbpy_notify_mi (PyObject *self, PyObject *args,
509                                           PyObject *kw);
510 
511 /* Convert Python object OBJ to a program_space pointer.  OBJ must be a
512    gdb.Progspace reference.  Return nullptr if the gdb.Progspace is not
513    valid (see gdb.Progspace.is_valid), otherwise return the program_space
514    pointer.  */
515 
516 extern struct program_space *progspace_object_to_program_space (PyObject *obj);
517 
518 /* A class for managing the initialization, and finalization functions
519    from all Python files (e.g. gdb/python/py-*.c).
520 
521    Within any Python file, create an instance of this class, passing in
522    the initialization function, and, optionally, the finalization
523    function.
524 
525    These functions are added to a single global list of functions, which
526    can then be called from do_start_initialization and finalize_python
527    (see python.c) to initialize all the Python files within GDB.  */
528 
529 class gdbpy_initialize_file
530 {
531   /* The type of a function that can be called just after GDB has setup the
532      Python interpreter.  This function will setup any additional Python
533      state required by a particular subsystem.  Return 0 if the setup was
534      successful, or return -1 if setup failed, in which case a Python
535      exception should have been raised.  */
536 
537   using gdbpy_initialize_file_ftype = int (*) (void);
538 
539   /* The type of a function that can be called just before GDB shuts down
540      the Python interpreter.  This function can cleanup an Python state
541      that is cached within GDB, for example, if GDB is holding any
542      references to Python objects, these should be released before the
543      Python interpreter is shut down.
544 
545      There is no error return in this case.  This function is only called
546      when GDB is already shutting down.  The function should make a best
547      effort to clean up, and then return.  */
548 
549   using gdbpy_finalize_file_ftype = void (*) (void);
550 
551   /* The type for an initialization and finalization function pair.  */
552 
553   using callback_pair_t = std::pair<gdbpy_initialize_file_ftype,
554                                             gdbpy_finalize_file_ftype>;
555 
556   /* Return the vector of callbacks.  The vector is defined as a static
557      variable within this function so that it will be initialized the first
558      time this function is called.  This is important, as this function is
559      called as part of the global object initialization process; if the
560      vector was a static variable within this class then we could not
561      guarantee that it had been initialized before it was used.  */
562 
563   static std::vector<callback_pair_t> &
callbacks()564   callbacks ()
565   {
566     static std::vector<callback_pair_t> list;
567     return list;
568   }
569 
570 public:
571 
572   /* Register the initialization (INIT) and finalization (FINI) functions
573      for a Python file.  See the comments on the function types above for
574      when these functions will be called.
575 
576      Either of these functions can be nullptr, in which case no function
577      will be called.
578 
579      The FINI argument is optional, and defaults to nullptr (no function to
580      call).  */
581 
582   gdbpy_initialize_file (gdbpy_initialize_file_ftype init,
583                                gdbpy_finalize_file_ftype fini = nullptr)
584   {
585     callbacks ().emplace_back (init, fini);
586   }
587 
588   /* Run all the Python file initialize functions and return true.  If any
589      of the initialize functions fails then this function returns false.
590      In the case of failure it is undefined how many of the initialize
591      functions will have been called.  */
592 
593   static bool
initialize_all()594   initialize_all ()
595   {
596     /* The initialize_all function should only be called once.  The
597        following check reverses the global list, which will effect this
598        initialize_all call, as well as the later finalize_all call.
599 
600        The environment variable checked here is the same as the one checked
601        in the generated init.c file.  */
602     if (getenv ("GDB_REVERSE_INIT_FUNCTIONS") != nullptr)
603       std::reverse (callbacks ().begin (), callbacks ().end ());
604 
605     for (const auto &p : gdbpy_initialize_file::callbacks ())
606       {
607           if (p.first != nullptr && p.first () < 0)
608             return false;
609       }
610     return true;
611   }
612 
613   /* Run all the Python file finalize functions.  */
614 
615   static void
finalize_all()616   finalize_all ()
617   {
618     for (const auto &p : gdbpy_initialize_file::callbacks ())
619       {
620           if (p.second != nullptr)
621             p.second ();
622       }
623   }
624 };
625 
626 /* Macro to simplify registering the initialization and finalization
627    functions for a Python file.  */
628 
629 #define GDBPY_INITIALIZE_FILE(INIT, ...)                                        \
630   static gdbpy_initialize_file                                                            \
631     CONCAT(gdbpy_initialize_file_obj_, __LINE__) (INIT, ##__VA_ARGS__)
632 
633 PyMODINIT_FUNC gdbpy_events_mod_func ();
634 
635 /* A wrapper for PyErr_Fetch that handles reference counting for the
636    caller.  */
637 class gdbpy_err_fetch
638 {
639 public:
640 
gdbpy_err_fetch()641   gdbpy_err_fetch ()
642   {
643 #if PY_VERSION_HEX < 0x030c0000
644     PyObject *error_type, *error_value, *error_traceback;
645 
646     PyErr_Fetch (&error_type, &error_value, &error_traceback);
647     m_error_type.reset (error_type);
648     m_error_value.reset (error_value);
649     m_error_traceback.reset (error_traceback);
650 #else
651     /* PyErr_Fetch is deprecated in python 3.12, use PyErr_GetRaisedException
652        instead.  */
653     m_exc.reset (PyErr_GetRaisedException ());
654 #endif
655   }
656 
657   /* Call PyErr_Restore using the values stashed in this object.
658      After this call, this object is invalid and neither the to_string
659      nor restore methods may be used again.  */
660 
restore()661   void restore ()
662   {
663 #if PY_VERSION_HEX < 0x030c0000
664     PyErr_Restore (m_error_type.release (),
665                        m_error_value.release (),
666                        m_error_traceback.release ());
667 #else
668     /* PyErr_Restore is deprecated in python 3.12, use PyErr_SetRaisedException
669        instead.  */
670     PyErr_SetRaisedException (m_exc.release ());
671 #endif
672   }
673 
674   /* Return the string representation of the exception represented by
675      this object.  If the result is NULL a python error occurred, the
676      caller must clear it.  */
677 
678   gdb::unique_xmalloc_ptr<char> to_string () const;
679 
680   /* Return the string representation of the type of the exception
681      represented by this object.  If the result is NULL a python error
682      occurred, the caller must clear it.  */
683 
684   gdb::unique_xmalloc_ptr<char> type_to_string () const;
685 
686   /* Return true if the stored type matches TYPE, false otherwise.  */
687 
type_matches(PyObject * type)688   bool type_matches (PyObject *type) const
689   {
690     gdbpy_ref<> err_type = this->type ();
691     return PyErr_GivenExceptionMatches (err_type.get (), type);
692   }
693 
694   /* Return a new reference to the exception value object.  */
695 
value()696   gdbpy_ref<> value () const
697   {
698 #if PY_VERSION_HEX < 0x030c0000
699     if (!m_normalized)
700       {
701           PyObject *error_type, *error_value, *error_traceback;
702           error_type = m_error_type.release ();
703           error_value = m_error_value.release ();
704           error_traceback = m_error_traceback.release ();
705           PyErr_NormalizeException (&error_type, &error_value, &error_traceback);
706           m_error_type.reset (error_type);
707           m_error_value.reset (error_value);
708           m_error_traceback.reset (error_traceback);
709           m_normalized = true;
710       }
711     return m_error_value;
712 #else
713     return m_exc;
714 #endif
715   }
716 
717   /* Return a new reference to the exception type object.  */
718 
type()719   gdbpy_ref<> type () const
720   {
721 #if PY_VERSION_HEX < 0x030c0000
722     return m_error_type;
723 #else
724     if (m_exc.get() == nullptr)
725       return nullptr;
726     return gdbpy_ref<>::new_reference ((PyObject *)Py_TYPE (m_exc.get ()));
727 #endif
728   }
729 
730 private:
731 
732 #if PY_VERSION_HEX < 0x030c0000
733   mutable gdbpy_ref<> m_error_type, m_error_value, m_error_traceback;
734   mutable bool m_normalized = false;
735 #else
736   gdbpy_ref<> m_exc;
737 #endif
738 };
739 
740 /* Called before entering the Python interpreter to install the
741    current language and architecture to be used for Python values.
742    Also set the active extension language for GDB so that SIGINT's
743    are directed our way, and if necessary install the right SIGINT
744    handler.  */
745 class gdbpy_enter
746 {
747  public:
748 
749   /* Set the ambient Python architecture to GDBARCH and the language
750      to LANGUAGE.  If GDBARCH is nullptr, then the architecture will
751      be computed, when needed, using get_current_arch; see the
752      get_gdbarch method.  If LANGUAGE is not nullptr, then the current
753      language at time of construction will be saved (to be restored on
754      destruction), and the current language will be set to
755      LANGUAGE.  */
756   explicit gdbpy_enter (struct gdbarch *gdbarch = nullptr,
757                               const struct language_defn *language = nullptr);
758 
759   ~gdbpy_enter ();
760 
761   DISABLE_COPY_AND_ASSIGN (gdbpy_enter);
762 
763   /* Return the current gdbarch, as known to the Python layer.  This
764      is either python_gdbarch (which comes from the most recent call
765      to the gdbpy_enter constructor), or, if that is nullptr, the
766      result of get_current_arch.  */
767   static struct gdbarch *get_gdbarch ();
768 
769   /* Called only during gdb shutdown.  This sets python_gdbarch to an
770      acceptable value.  */
771   static void finalize ();
772 
773  private:
774 
775   /* The current gdbarch, according to Python.  This can be
776      nullptr.  */
777   static struct gdbarch *python_gdbarch;
778 
779   struct active_ext_lang_state *m_previous_active;
780   PyGILState_STATE m_state;
781   struct gdbarch *m_gdbarch;
782   const struct language_defn *m_language;
783 
784   /* An optional is used here because we don't want to call
785      PyErr_Fetch too early.  */
786   std::optional<gdbpy_err_fetch> m_error;
787 };
788 
789 /* Like gdbpy_enter, but takes a varobj.  This is a subclass just to
790    make constructor delegation a little nicer.  */
791 class gdbpy_enter_varobj : public gdbpy_enter
792 {
793  public:
794 
795   /* This is defined in varobj.c, where it can access varobj
796      internals.  */
797   gdbpy_enter_varobj (const struct varobj *var);
798 
799 };
800 
801 /* The opposite of gdb_enter: this releases the GIL around a region,
802    allowing other Python threads to run.  No Python APIs may be used
803    while this is active.  */
804 class gdbpy_allow_threads
805 {
806 public:
807 
gdbpy_allow_threads()808   gdbpy_allow_threads ()
809     : m_save (PyEval_SaveThread ())
810   {
811     gdb_assert (m_save != nullptr);
812   }
813 
~gdbpy_allow_threads()814   ~gdbpy_allow_threads ()
815   {
816     PyEval_RestoreThread (m_save);
817   }
818 
819   DISABLE_COPY_AND_ASSIGN (gdbpy_allow_threads);
820 
821 private:
822 
823   PyThreadState *m_save;
824 };
825 
826 /* A helper class to save and restore the GIL, but without touching
827    the other globals that are handled by gdbpy_enter.  */
828 
829 class gdbpy_gil
830 {
831 public:
832 
gdbpy_gil()833   gdbpy_gil ()
834     : m_state (PyGILState_Ensure ())
835   {
836   }
837 
~gdbpy_gil()838   ~gdbpy_gil ()
839   {
840     PyGILState_Release (m_state);
841   }
842 
843   DISABLE_COPY_AND_ASSIGN (gdbpy_gil);
844 
845 private:
846 
847   PyGILState_STATE m_state;
848 };
849 
850 /* Use this in a 'catch' block to convert the exception to a Python
851    exception and return nullptr.  */
852 #define GDB_PY_HANDLE_EXCEPTION(Exception)        \
853   do {                                                      \
854     gdbpy_convert_exception (Exception);          \
855     return nullptr;                               \
856   } while (0)
857 
858 /* Use this in a 'catch' block to convert the exception to a Python
859    exception and return -1.  */
860 #define GDB_PY_SET_HANDLE_EXCEPTION(Exception)                                  \
861     do {                                                                        \
862       gdbpy_convert_exception (Exception);                                      \
863       return -1;                                                                \
864     } while (0)
865 
866 int gdbpy_print_python_errors_p (void);
867 void gdbpy_print_stack (void);
868 void gdbpy_print_stack_or_quit ();
869 void gdbpy_handle_exception () ATTRIBUTE_NORETURN;
870 
871 /* A wrapper around calling 'error'.  Prefixes the error message with an
872    'Error occurred in Python' string.  Use this in C++ code if we spot
873    something wrong with an object returned from Python code.  The prefix
874    string gives the user a hint that the mistake is within Python code,
875    rather than some other part of GDB.
876 
877    This always calls error, and never returns.  */
878 
879 void gdbpy_error (const char *fmt, ...)
880   ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
881 
882 gdbpy_ref<> python_string_to_unicode (PyObject *obj);
883 gdb::unique_xmalloc_ptr<char> unicode_to_target_string (PyObject *unicode_str);
884 gdb::unique_xmalloc_ptr<char> python_string_to_target_string (PyObject *obj);
885 gdbpy_ref<> python_string_to_target_python_string (PyObject *obj);
886 gdb::unique_xmalloc_ptr<char> python_string_to_host_string (PyObject *obj);
887 gdbpy_ref<> host_string_to_python_string (const char *str);
888 int gdbpy_is_string (PyObject *obj);
889 gdb::unique_xmalloc_ptr<char> gdbpy_obj_to_string (PyObject *obj);
890 
891 int gdbpy_is_lazy_string (PyObject *result);
892 void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
893                                         struct type **str_type,
894                                         long *length,
895                                         gdb::unique_xmalloc_ptr<char> *encoding);
896 
897 int gdbpy_is_value_object (PyObject *obj);
898 
899 /* Note that these are declared here, and not in python.h with the
900    other pretty-printer functions, because they refer to PyObject.  */
901 gdbpy_ref<> apply_varobj_pretty_printer (PyObject *print_obj,
902                                                    struct value **replacement,
903                                                    struct ui_file *stream,
904                                                    const value_print_options *opts);
905 gdbpy_ref<> gdbpy_get_varobj_pretty_printer (struct value *value);
906 gdb::unique_xmalloc_ptr<char> gdbpy_get_display_hint (PyObject *printer);
907 PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args);
908 
909 PyObject *gdbpy_print_options (PyObject *self, PyObject *args);
910 void gdbpy_get_print_options (value_print_options *opts);
911 extern const struct value_print_options *gdbpy_current_print_options;
912 
913 void bpfinishpy_pre_stop_hook (struct gdbpy_breakpoint_object *bp_obj);
914 void bpfinishpy_post_stop_hook (struct gdbpy_breakpoint_object *bp_obj);
915 void bpfinishpy_pre_delete_hook (struct gdbpy_breakpoint_object *bp_obj);
916 
917 extern PyObject *gdbpy_doc_cst;
918 extern PyObject *gdbpy_children_cst;
919 extern PyObject *gdbpy_to_string_cst;
920 extern PyObject *gdbpy_display_hint_cst;
921 extern PyObject *gdbpy_enabled_cst;
922 extern PyObject *gdbpy_value_cst;
923 
924 /* Exception types.  */
925 extern PyObject *gdbpy_gdb_error;
926 extern PyObject *gdbpy_gdb_memory_error;
927 extern PyObject *gdbpy_gdberror_exc;
928 
929 extern void gdbpy_convert_exception (const struct gdb_exception &)
930     CPYCHECKER_SETS_EXCEPTION;
931 
932 int get_addr_from_python (PyObject *obj, CORE_ADDR *addr)
933     CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
934 
935 gdbpy_ref<> gdb_py_object_from_longest (LONGEST l);
936 gdbpy_ref<> gdb_py_object_from_ulongest (ULONGEST l);
937 int gdb_py_int_as_long (PyObject *, long *);
938 
939 PyObject *gdb_py_generic_dict (PyObject *self, void *closure);
940 
941 int gdb_pymodule_addobject (PyObject *module, const char *name,
942                                   PyObject *object)
943   CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
944 
945 
946 /* Return a Python string (str) object that represents SELF.  SELF can be
947    any object type, but should be in an "invalid" state.  What "invalid"
948    means is up to the caller.  The returned string will take the form
949    "<TYPENAME (invalid)>", without the quotes, and with TYPENAME replaced
950    with the type of SELF.  */
951 
952 PyObject *gdb_py_invalid_object_repr (PyObject *self);
953 
954 struct varobj_iter;
955 struct varobj;
956 std::unique_ptr<varobj_iter> py_varobj_get_iterator
957      (struct varobj *var,
958       PyObject *printer,
959       const value_print_options *opts);
960 
961 /* Deleter for Py_buffer unique_ptr specialization.  */
962 
963 struct Py_buffer_deleter
964 {
operatorPy_buffer_deleter965   void operator() (Py_buffer *b) const
966   {
967     PyBuffer_Release (b);
968   }
969 };
970 
971 /* A unique_ptr specialization for Py_buffer.  */
972 typedef std::unique_ptr<Py_buffer, Py_buffer_deleter> Py_buffer_up;
973 
974 /* Parse a register number from PYO_REG_ID and place the register number
975    into *REG_NUM.  The register is a register for GDBARCH.
976 
977    If a register is parsed successfully then *REG_NUM will have been
978    updated, and true is returned.  Otherwise the contents of *REG_NUM are
979    undefined, and false is returned.  When false is returned, the
980    Python error is set.
981 
982    The PYO_REG_ID object can be a string, the name of the register.  This
983    is the slowest approach as GDB has to map the name to a number for each
984    call.  Alternatively PYO_REG_ID can be an internal GDB register
985    number.  This is quick but should not be encouraged as this means
986    Python scripts are now dependent on GDB's internal register numbering.
987    Final PYO_REG_ID can be a gdb.RegisterDescriptor object, these objects
988    can be looked up by name once, and then cache the register number so
989    should be as quick as using a register number.  */
990 
991 extern bool gdbpy_parse_register_id (struct gdbarch *gdbarch,
992                                              PyObject *pyo_reg_id, int *reg_num);
993 
994 /* Return true if OBJ is a gdb.Architecture object, otherwise, return
995    false.  */
996 
997 extern bool gdbpy_is_architecture (PyObject *obj);
998 
999 /* Return true if OBJ is a gdb.Progspace object, otherwise, return false.  */
1000 
1001 extern bool gdbpy_is_progspace (PyObject *obj);
1002 
1003 /* Take DOC, the documentation string for a GDB command defined in Python,
1004    and return an (possibly) modified version of that same string.
1005 
1006    When a command is defined in Python, the documentation string will
1007    usually be indented based on the indentation of the surrounding Python
1008    code.  However, the documentation string is a literal string, all the
1009    white-space added for indentation is included within the documentation
1010    string.
1011 
1012    This indentation is then included in the help text that GDB displays,
1013    which looks odd out of the context of the original Python source code.
1014 
1015    This function analyses DOC and tries to figure out what white-space
1016    within DOC was added as part of the indentation, and then removes that
1017    white-space from the copy that is returned.
1018 
1019    If the analysis of DOC fails then DOC will be returned unmodified.  */
1020 
1021 extern gdb::unique_xmalloc_ptr<char> gdbpy_fix_doc_string_indentation
1022   (gdb::unique_xmalloc_ptr<char> doc);
1023 
1024 /* Implement the 'print_insn' hook for Python.  Disassemble an instruction
1025    whose address is ADDRESS for architecture GDBARCH.  The bytes of the
1026    instruction should be read with INFO->read_memory_func as the
1027    instruction being disassembled might actually be in a buffer.
1028 
1029    Used INFO->fprintf_func to print the results of the disassembly, and
1030    return the length of the instruction in octets.
1031 
1032    If no instruction can be disassembled then return an empty value.  */
1033 
1034 extern std::optional<int> gdbpy_print_insn (struct gdbarch *gdbarch,
1035                                                       CORE_ADDR address,
1036                                                       disassemble_info *info);
1037 
1038 #endif /* PYTHON_PYTHON_INTERNAL_H */
1039