GDB (xrefs)
python-internal.h
Go to the documentation of this file.
1 /* Gdb/Python header for private use by Python module.
2 
3  Copyright (C) 2008-2018 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 GDB_PYTHON_INTERNAL_H
21 #define GDB_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. */
31 
32 #ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE
33 #define CPYCHECKER_RETURNS_BORROWED_REF \
34  __attribute__ ((cpychecker_returns_borrowed_ref))
35 #else
36 #define CPYCHECKER_RETURNS_BORROWED_REF
37 #endif
38 
39 #ifdef WITH_CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF_ATTRIBUTE
40 #define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG) \
41  __attribute__ ((cpychecker_type_object_for_typedef (ARG)))
42 #else
43 #define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
44 #endif
45 
46 #ifdef WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE
47 #define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n) \
48  __attribute__ ((cpychecker_steals_reference_to_arg (n)))
49 #else
50 #define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n)
51 #endif
52 
53 #ifdef WITH_CPYCHECKER_SETS_EXCEPTION_ATTRIBUTE
54 #define CPYCHECKER_SETS_EXCEPTION __attribute__ ((cpychecker_sets_exception))
55 #else
56 #define CPYCHECKER_SETS_EXCEPTION
57 #endif
58 
59 #ifdef WITH_CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION_ATTRIBUTE
60 #define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION \
61  __attribute__ ((cpychecker_negative_result_sets_exception))
62 #else
63 #define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
64 #endif
65 
66 /* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t
67  needed by pyport.h. */
68 /* /usr/include/features.h on linux systems will define _POSIX_C_SOURCE
69  if it sees _GNU_SOURCE (which config.h will define).
70  pyconfig.h defines _POSIX_C_SOURCE to a different value than
71  /usr/include/features.h does causing compilation to fail.
72  To work around this, undef _POSIX_C_SOURCE before we include Python.h.
73 
74  Same problem with _XOPEN_SOURCE. */
75 #undef _POSIX_C_SOURCE
76 #undef _XOPEN_SOURCE
77 
78 /* On sparc-solaris, /usr/include/sys/feature_tests.h defines
79  _FILE_OFFSET_BITS, which pyconfig.h also defines. Same work
80  around technique as above. */
81 #undef _FILE_OFFSET_BITS
82 
83 /* A kludge to avoid redefinition of snprintf on Windows by pyerrors.h. */
84 #if defined(_WIN32) && defined(HAVE_DECL_SNPRINTF)
85 #define HAVE_SNPRINTF 1
86 #endif
87 
88 /* Another kludge to avoid compilation errors because MinGW defines
89  'hypot' to '_hypot', but the C++ headers says "using ::hypot". */
90 #ifdef __MINGW32__
91 # define _hypot hypot
92 #endif
93 
94 /* Request clean size types from Python. */
95 #define PY_SSIZE_T_CLEAN
96 
97 /* Include the Python header files using angle brackets rather than
98  double quotes. On case-insensitive filesystems, this prevents us
99  from including our python/python.h header file. */
100 #include <Python.h>
101 #include <frameobject.h>
102 
103 #if PY_MAJOR_VERSION >= 3
104 #define IS_PY3K 1
105 #endif
106 
107 #ifdef IS_PY3K
108 #define Py_TPFLAGS_HAVE_ITER 0
109 #define Py_TPFLAGS_CHECKTYPES 0
110 
111 #define PyInt_Check PyLong_Check
112 #define PyInt_FromLong PyLong_FromLong
113 #define PyInt_FromSsize_t PyLong_FromSsize_t
114 #define PyInt_AsLong PyLong_AsLong
115 #define PyInt_AsSsize_t PyLong_AsSsize_t
116 
117 #define PyString_FromString PyUnicode_FromString
118 #define PyString_Decode PyUnicode_Decode
119 #define PyString_FromFormat PyUnicode_FromFormat
120 #define PyString_Check PyUnicode_Check
121 #endif
122 
123 #if HAVE_LIBPYTHON2_4
124 /* Py_ssize_t is not defined until 2.5.
125  Logical type for Py_ssize_t is Py_intptr_t, but that fails in 64-bit
126  compilation due to several apparent mistakes in python2.4 API, so we
127  use 'int' instead. */
128 typedef int Py_ssize_t;
129 #endif
130 
131 #ifndef PyVarObject_HEAD_INIT
132 /* Python 2.4 does not define PyVarObject_HEAD_INIT. */
133 #define PyVarObject_HEAD_INIT(type, size) \
134  PyObject_HEAD_INIT(type) size,
135 
136 #endif
137 
138 #ifndef Py_TYPE
139 /* Python 2.4 does not define Py_TYPE. */
140 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
141 #endif
142 
143 /* If Python.h does not define WITH_THREAD, then the various
144  GIL-related functions will not be defined. However,
145  PyGILState_STATE will be. */
146 #ifndef WITH_THREAD
147 #define PyGILState_Ensure() ((PyGILState_STATE) 0)
148 #define PyGILState_Release(ARG) ((void)(ARG))
149 #define PyEval_InitThreads()
150 #define PyThreadState_Swap(ARG) ((void)(ARG))
151 #define PyEval_ReleaseLock()
152 #endif
153 
154 /* Python supplies HAVE_LONG_LONG and some `long long' support when it
155  is available. These defines let us handle the differences more
156  cleanly. */
157 #ifdef HAVE_LONG_LONG
158 
159 #define GDB_PY_LL_ARG "L"
160 #define GDB_PY_LLU_ARG "K"
161 typedef PY_LONG_LONG gdb_py_longest;
162 typedef unsigned PY_LONG_LONG gdb_py_ulongest;
163 #define gdb_py_long_from_longest PyLong_FromLongLong
164 #define gdb_py_long_from_ulongest PyLong_FromUnsignedLongLong
165 #define gdb_py_long_as_ulongest PyLong_AsUnsignedLongLong
166 
167 #else /* HAVE_LONG_LONG */
168 
169 #define GDB_PY_LL_ARG "L"
170 #define GDB_PY_LLU_ARG "K"
171 typedef long gdb_py_longest;
172 typedef unsigned long gdb_py_ulongest;
173 #define gdb_py_long_from_longest PyLong_FromLong
174 #define gdb_py_long_from_ulongest PyLong_FromUnsignedLong
175 #define gdb_py_long_as_ulongest PyLong_AsUnsignedLong
176 
177 #endif /* HAVE_LONG_LONG */
178 
179 #if PY_VERSION_HEX < 0x03020000
180 typedef long Py_hash_t;
181 #endif
182 
183 /* PyMem_RawMalloc appeared in Python 3.4. For earlier versions, we can just
184  fall back to PyMem_Malloc. */
185 
186 #if PY_VERSION_HEX < 0x03040000
187 #define PyMem_RawMalloc PyMem_Malloc
188 #endif
189 
190 /* Python 2.6 did not wrap Py_DECREF in 'do {...} while (0)', leading
191  to 'suggest explicit braces to avoid ambiguous ‘else’' gcc errors.
192  Wrap it ourselves, so that callers don't need to care. */
193 
194 static inline void
195 gdb_Py_DECREF (void *op) /* ARI: editCase function */
196 {
197  /* ... and Python 2.4 didn't cast OP to PyObject pointer on the
198  '(op)->ob_refcnt' references within the macro. Cast it ourselves
199  too. */
200  Py_DECREF ((PyObject *) op);
201 }
202 
203 #undef Py_DECREF
204 #define Py_DECREF(op) gdb_Py_DECREF (op)
205 
206 /* The second argument to PyObject_GetAttrString was missing the 'const'
207  qualifier in Python-2.4. Hence, we wrap it in a function to avoid errors
208  when compiled with -Werror. */
209 
210 static inline PyObject *
212  const char *attr) /* ARI: editCase function */
213 {
214  return PyObject_GetAttrString (obj, (char *) attr);
215 }
216 
217 #define PyObject_GetAttrString(obj, attr) gdb_PyObject_GetAttrString (obj, attr)
218 
219 /* The second argument to PyObject_HasAttrString was also missing the 'const'
220  qualifier in Python-2.4. Hence, we wrap it also in a function to avoid
221  errors when compiled with -Werror. */
222 
223 static inline int
225  const char *attr) /* ARI: editCase function */
226 {
227  return PyObject_HasAttrString (obj, (char *) attr);
228 }
229 
230 #define PyObject_HasAttrString(obj, attr) gdb_PyObject_HasAttrString (obj, attr)
231 
232 /* PyObject_CallMethod's 'method' and 'format' parameters were missing
233  the 'const' qualifier before Python 3.4. Hence, we wrap the
234  function in our own version to avoid errors with string literals.
235  Note, this is a variadic template because PyObject_CallMethod is a
236  varargs function and Python doesn't have a "PyObject_VaCallMethod"
237  variant taking a va_list that we could defer to instead. */
238 
239 template<typename... Args>
240 static inline PyObject *
241 gdb_PyObject_CallMethod (PyObject *o, const char *method, const char *format,
242  Args... args) /* ARI: editCase function */
243 {
244  return PyObject_CallMethod (o,
245  const_cast<char *> (method),
246  const_cast<char *> (format),
247  args...);
248 }
249 
250 #undef PyObject_CallMethod
251 #define PyObject_CallMethod gdb_PyObject_CallMethod
252 
253 /* The 'name' parameter of PyErr_NewException was missing the 'const'
254  qualifier in Python <= 3.4. Hence, we wrap it in a function to
255  avoid errors when compiled with -Werror. */
256 
257 static inline PyObject*
258 gdb_PyErr_NewException (const char *name, PyObject *base, PyObject *dict)
259 {
260  return PyErr_NewException (const_cast<char *> (name), base, dict);
261 }
262 
263 #define PyErr_NewException gdb_PyErr_NewException
264 
265 /* PySys_GetObject's 'name' parameter was missing the 'const'
266  qualifier before Python 3.4. Hence, we wrap it in a function to
267  avoid errors when compiled with -Werror. */
268 
269 static inline PyObject *
271 {
272  return PySys_GetObject (const_cast<char *> (name));
273 }
274 
275 #define PySys_GetObject gdb_PySys_GetObject
276 
277 /* PySys_SetPath's 'path' parameter was missing the 'const' qualifier
278  before Python 3.6. Hence, we wrap it in a function to avoid errors
279  when compiled with -Werror. */
280 
281 #ifdef IS_PY3K
282 # define GDB_PYSYS_SETPATH_CHAR wchar_t
283 #else
284 # define GDB_PYSYS_SETPATH_CHAR char
285 #endif
286 
287 static inline void
289 {
290  PySys_SetPath (const_cast<GDB_PYSYS_SETPATH_CHAR *> (path));
291 }
292 
293 #define PySys_SetPath gdb_PySys_SetPath
294 
295 /* Wrap PyGetSetDef to allow convenient construction with string
296  literals. Unfortunately, PyGetSetDef's 'name' and 'doc' members
297  are 'char *' instead of 'const char *', meaning that in order to
298  list-initialize PyGetSetDef arrays with string literals (and
299  without the wrapping below) would require writing explicit 'char *'
300  casts. Instead, we extend PyGetSetDef and add constexpr
301  constructors that accept const 'name' and 'doc', hiding the ugly
302  casts here in a single place. */
303 
304 struct gdb_PyGetSetDef : PyGetSetDef
305 {
306  constexpr gdb_PyGetSetDef (const char *name_, getter get_, setter set_,
307  const char *doc_, void *closure_)
308  : PyGetSetDef {const_cast<char *> (name_), get_, set_,
309  const_cast<char *> (doc_), closure_}
310  {}
311 
312  /* Alternative constructor that allows omitting the closure in list
313  initialization. */
314  constexpr gdb_PyGetSetDef (const char *name_, getter get_, setter set_,
315  const char *doc_)
316  : gdb_PyGetSetDef {name_, get_, set_, doc_, NULL}
317  {}
318 
319  /* Constructor for the sentinel entries. */
320  constexpr gdb_PyGetSetDef (std::nullptr_t)
321  : gdb_PyGetSetDef {NULL, NULL, NULL, NULL, NULL}
322  {}
323 };
324 
325 /* The 'keywords' parameter of PyArg_ParseTupleAndKeywords has type
326  'char **'. However, string literals are const in C++, and so to
327  avoid casting at every keyword array definition, we'll need to make
328  the keywords array an array of 'const char *'. To avoid having all
329  callers add a 'const_cast<char **>' themselves when passing such an
330  array through 'char **', we define our own version of
331  PyArg_ParseTupleAndKeywords here with a corresponding 'keywords'
332  parameter type that does the cast in a single place. (This is not
333  an overload of PyArg_ParseTupleAndKeywords in order to make it
334  clearer that we're calling our own function instead of a function
335  that exists in some newer Python version.) */
336 
337 static inline int
338 gdb_PyArg_ParseTupleAndKeywords (PyObject *args, PyObject *kw,
339  const char *format, const char **keywords, ...)
340 {
341  va_list ap;
342  int res;
343 
344  va_start (ap, keywords);
345  res = PyArg_VaParseTupleAndKeywords (args, kw, format,
346  const_cast<char **> (keywords),
347  ap);
348  va_end (ap);
349 
350  return res;
351 }
352 
353 /* In order to be able to parse symtab_and_line_to_sal_object function
354  a real symtab_and_line structure is needed. */
355 #include "symtab.h"
356 
357 /* Also needed to parse enum var_types. */
358 #include "command.h"
359 #include "breakpoint.h"
360 
362 
363 struct block;
364 struct value;
365 struct language_defn;
366 struct program_space;
367 struct bpstats;
368 struct inferior;
369 
370 extern int gdb_python_initialized;
371 
372 extern PyObject *gdb_module;
373 extern PyObject *gdb_python_module;
374 extern PyTypeObject value_object_type
375  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("value_object");
376 extern PyTypeObject block_object_type
377  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("block_object");
378 extern PyTypeObject symbol_object_type
379  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symbol_object");
380 extern PyTypeObject event_object_type
381  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
382 extern PyTypeObject breakpoint_object_type
383  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("breakpoint_object");
384 extern PyTypeObject frame_object_type
385  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("frame_object");
386 extern PyTypeObject thread_object_type
387  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("thread_object");
388 
390 {
391  PyObject_HEAD
392 
393  /* The breakpoint number according to gdb. */
394  int number;
395 
396  /* The gdb breakpoint object, or NULL if the breakpoint has been
397  deleted. */
398  struct breakpoint *bp;
399 
400  /* 1 is this is a FinishBreakpoint object, 0 otherwise. */
403 
404 /* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
405  exception if it is invalid. */
406 #define BPPY_REQUIRE_VALID(Breakpoint) \
407  do { \
408  if ((Breakpoint)->bp == NULL) \
409  return PyErr_Format (PyExc_RuntimeError, \
410  _("Breakpoint %d is invalid."), \
411  (Breakpoint)->number); \
412  } while (0)
413 
414 /* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
415  exception if it is invalid. This macro is for use in setter functions. */
416 #define BPPY_SET_REQUIRE_VALID(Breakpoint) \
417  do { \
418  if ((Breakpoint)->bp == NULL) \
419  { \
420  PyErr_Format (PyExc_RuntimeError, _("Breakpoint %d is invalid."), \
421  (Breakpoint)->number); \
422  return -1; \
423  } \
424  } while (0)
425 
426 
427 /* Variables used to pass information between the Breakpoint
428  constructor and the breakpoint-created hook function. */
430 
431 
432 typedef struct
433 {
434  PyObject_HEAD
435 
436  /* The thread we represent. */
438 
439  /* The Inferior object to which this thread belongs. */
440  PyObject *inf_obj;
441 } thread_object;
442 
443 extern struct cmd_list_element *set_python_list;
444 extern struct cmd_list_element *show_python_list;
445 
446 /* extension_language_script_ops "methods". */
447 
448 extern int gdbpy_auto_load_enabled (const struct extension_language_defn *);
449 
450 /* extension_language_ops "methods". */
451 
453  (const struct extension_language_defn *,
454  struct type *type,
455  LONGEST embedded_offset, CORE_ADDR address,
456  struct ui_file *stream, int recurse,
457  struct value *val,
458  const struct value_print_options *options,
459  const struct language_defn *language);
461  (const struct extension_language_defn *,
462  struct frame_info *frame, int flags, enum ext_lang_frame_args args_type,
463  struct ui_out *out, int frame_low, int frame_high);
464 extern void gdbpy_preserve_values (const struct extension_language_defn *,
465  struct objfile *objfile,
466  htab_t copied_types);
468  (const struct extension_language_defn *, struct breakpoint *);
469 extern int gdbpy_breakpoint_has_cond (const struct extension_language_defn *,
470  struct breakpoint *b);
471 
473  (const struct extension_language_defn *extlang, void *data);
475  (const struct extension_language_defn *extlang, void *data);
477  (const struct extension_language_defn *extlang,
478  struct type *obj_type, const char *method_name,
479  xmethod_worker_vec **dm_vec);
481  (const struct extension_language_defn *extlang,
482  struct xmethod_worker *worker,
483  int *nargs,
484  struct type ***arg_types);
486  (const struct extension_language_defn *extlang,
487  struct xmethod_worker *worker,
488  struct value *object, struct value **args, int nargs,
489  struct type **result_type);
490 extern struct value *gdbpy_invoke_xmethod
491  (const struct extension_language_defn *extlang,
492  struct xmethod_worker *worker,
493  struct value *obj, struct value **args, int nargs);
494 
495 PyObject *gdbpy_history (PyObject *self, PyObject *args);
496 PyObject *gdbpy_breakpoints (PyObject *, PyObject *);
497 PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *);
498 PyObject *gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw);
499 PyObject *gdbpy_lookup_global_symbol (PyObject *self, PyObject *args,
500  PyObject *kw);
501 PyObject *gdbpy_start_recording (PyObject *self, PyObject *args);
502 PyObject *gdbpy_current_recording (PyObject *self, PyObject *args);
503 PyObject *gdbpy_stop_recording (PyObject *self, PyObject *args);
504 PyObject *gdbpy_newest_frame (PyObject *self, PyObject *args);
505 PyObject *gdbpy_selected_frame (PyObject *self, PyObject *args);
506 PyObject *gdbpy_block_for_pc (PyObject *self, PyObject *args);
507 PyObject *gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw);
508 int gdbpy_is_field (PyObject *obj);
509 PyObject *gdbpy_create_lazy_string_object (CORE_ADDR address, long length,
510  const char *encoding,
511  struct type *type);
512 PyObject *gdbpy_inferiors (PyObject *unused, PyObject *unused2);
513 PyObject *gdbpy_create_ptid_object (ptid_t ptid);
514 PyObject *gdbpy_selected_thread (PyObject *self, PyObject *args);
515 PyObject *gdbpy_selected_inferior (PyObject *self, PyObject *args);
516 PyObject *gdbpy_string_to_argv (PyObject *self, PyObject *args);
517 PyObject *gdbpy_parameter_value (enum var_types type, void *var);
518 char *gdbpy_parse_command_name (const char *name,
519  struct cmd_list_element ***base_list,
520  struct cmd_list_element **start_list);
521 
522 PyObject *symtab_and_line_to_sal_object (struct symtab_and_line sal);
523 PyObject *symtab_to_symtab_object (struct symtab *symtab);
524 PyObject *symbol_to_symbol_object (struct symbol *sym);
525 PyObject *block_to_block_object (const struct block *block,
526  struct objfile *objfile);
527 PyObject *value_to_value_object (struct value *v);
528 PyObject *type_to_type_object (struct type *);
529 PyObject *frame_info_to_frame_object (struct frame_info *frame);
530 PyObject *symtab_to_linetable_object (PyObject *symtab);
531 PyObject *pspace_to_pspace_object (struct program_space *)
533 PyObject *pspy_get_printers (PyObject *, void *);
534 PyObject *pspy_get_frame_filters (PyObject *, void *);
535 PyObject *pspy_get_frame_unwinders (PyObject *, void *);
536 PyObject *pspy_get_xmethods (PyObject *, void *);
537 
538 PyObject *objfile_to_objfile_object (struct objfile *)
540 PyObject *objfpy_get_printers (PyObject *, void *);
541 PyObject *objfpy_get_frame_filters (PyObject *, void *);
542 PyObject *objfpy_get_frame_unwinders (PyObject *, void *);
543 PyObject *objfpy_get_xmethods (PyObject *, void *);
544 PyObject *gdbpy_lookup_objfile (PyObject *self, PyObject *args, PyObject *kw);
545 
546 PyObject *gdbarch_to_arch_object (struct gdbarch *gdbarch);
547 
551 PyObject *find_inferior_object (int pid);
552 PyObject *inferior_to_inferior_object (struct inferior *inferior);
553 
554 const struct block *block_object_to_block (PyObject *obj);
555 struct symbol *symbol_object_to_symbol (PyObject *obj);
556 struct value *value_object_to_value (PyObject *self);
557 struct value *convert_value_from_python (PyObject *obj);
558 struct type *type_object_to_type (PyObject *obj);
559 struct symtab *symtab_object_to_symtab (PyObject *obj);
560 struct symtab_and_line *sal_object_to_symtab_and_line (PyObject *obj);
561 struct frame_info *frame_object_to_frame_info (PyObject *frame_obj);
562 struct gdbarch *arch_object_to_gdbarch (PyObject *obj);
563 
567 int gdbpy_initialize_values (void)
569 int gdbpy_initialize_frames (void)
573 int gdbpy_initialize_btrace (void)
575 int gdbpy_initialize_record (void)
577 int gdbpy_initialize_symtabs (void)
579 int gdbpy_initialize_commands (void)
581 int gdbpy_initialize_symbols (void)
583 int gdbpy_initialize_symtabs (void)
585 int gdbpy_initialize_blocks (void)
587 int gdbpy_initialize_types (void)
591 int gdbpy_initialize_pspace (void)
593 int gdbpy_initialize_objfile (void)
605 int gdbpy_initialize_thread (void)
607 int gdbpy_initialize_inferior (void)
611 int gdbpy_initialize_event (void)
615 int gdbpy_initialize_arch (void)
617 int gdbpy_initialize_xmethods (void)
619 int gdbpy_initialize_unwind (void)
621 
622 /* Called before entering the Python interpreter to install the
623  current language and architecture to be used for Python values.
624  Also set the active extension language for GDB so that SIGINT's
625  are directed our way, and if necessary install the right SIGINT
626  handler. */
628 {
629  public:
630 
631  gdbpy_enter (struct gdbarch *gdbarch, const struct language_defn *language);
632 
633  ~gdbpy_enter ();
634 
636 
637  private:
638 
640  PyGILState_STATE m_state;
642  const struct language_defn *m_language;
644 };
645 
646 /* Like gdbpy_enter, but takes a varobj. This is a subclass just to
647  make constructor delegation a little nicer. */
649 {
650  public:
651 
652  /* This is defined in varobj.c, where it can access varobj
653  internals. */
654  gdbpy_enter_varobj (const struct varobj *var);
655 
656 };
657 
658 extern struct gdbarch *python_gdbarch;
659 extern const struct language_defn *python_language;
660 
661 /* Use this after a TRY_EXCEPT to throw the appropriate Python
662  exception. */
663 #define GDB_PY_HANDLE_EXCEPTION(Exception) \
664  do { \
665  if (Exception.reason < 0) \
666  { \
667  gdbpy_convert_exception (Exception); \
668  return NULL; \
669  } \
670  } while (0)
671 
672 /* Use this after a TRY_EXCEPT to throw the appropriate Python
673  exception. This macro is for use inside setter functions. */
674 #define GDB_PY_SET_HANDLE_EXCEPTION(Exception) \
675  do { \
676  if (Exception.reason < 0) \
677  { \
678  gdbpy_convert_exception (Exception); \
679  return -1; \
680  } \
681  } while (0)
682 
683 int gdbpy_print_python_errors_p (void);
684 void gdbpy_print_stack (void);
685 
686 PyObject *python_string_to_unicode (PyObject *obj);
689 PyObject *python_string_to_target_python_string (PyObject *obj);
691 PyObject *host_string_to_python_string (const char *str);
692 int gdbpy_is_string (PyObject *obj);
695  PyObject *pvalue);
696 
697 int gdbpy_is_lazy_string (PyObject *result);
698 void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
699  struct type **str_type,
700  long *length,
702 
703 int gdbpy_is_value_object (PyObject *obj);
704 
705 /* Note that these are declared here, and not in python.h with the
706  other pretty-printer functions, because they refer to PyObject. */
707 PyObject *apply_varobj_pretty_printer (PyObject *print_obj,
708  struct value **replacement,
709  struct ui_file *stream);
710 PyObject *gdbpy_get_varobj_pretty_printer (struct value *value);
712 PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args);
713 
716 
717 extern PyObject *gdbpy_doc_cst;
718 extern PyObject *gdbpy_children_cst;
719 extern PyObject *gdbpy_to_string_cst;
720 extern PyObject *gdbpy_display_hint_cst;
721 extern PyObject *gdbpy_enabled_cst;
722 extern PyObject *gdbpy_value_cst;
723 
724 /* Exception types. */
725 extern PyObject *gdbpy_gdb_error;
726 extern PyObject *gdbpy_gdb_memory_error;
727 extern PyObject *gdbpy_gdberror_exc;
728 
729 extern void gdbpy_convert_exception (struct gdb_exception)
731 
732 int get_addr_from_python (PyObject *obj, CORE_ADDR *addr)
734 
735 PyObject *gdb_py_object_from_longest (LONGEST l);
737 int gdb_py_int_as_long (PyObject *, long *);
738 
739 PyObject *gdb_py_generic_dict (PyObject *self, void *closure);
740 
741 int gdb_pymodule_addobject (PyObject *module, const char *name,
742  PyObject *object)
744 
745 struct varobj_iter;
746 struct varobj;
748  PyObject *printer);
749 
750 #endif /* GDB_PYTHON_INTERNAL_H */
PyObject * objfpy_get_xmethods(PyObject *, void *)
Definition: py-objfile.c:377
int gdbpy_initialize_record(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-record.c:547
int gdbpy_initialize_lazy_string(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
#define Py_DECREF(op)
#define GDB_PYSYS_SETPATH_CHAR
PyObject * gdbpy_block_for_pc(PyObject *self, PyObject *args)
Definition: py-block.c:372
#define PyObject_GetAttrString(obj, attr)
const struct block * block_object_to_block(PyObject *obj)
Definition: py-block.c:285
Definition: varobj.h:94
PyObject * gdb_python_module
Definition: python.c:117
int gdbpy_breakpoint_has_cond(const struct extension_language_defn *, struct breakpoint *b)
PyObject * gdbpy_selected_thread(PyObject *self, PyObject *args)
Definition: py-infthread.c:284
PyTypeObject value_object_type
Definition: py-value.c:1882
int gdbpy_initialize_finishbreakpoints(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
int gdbpy_is_field(PyObject *obj)
Definition: py-type.c:151
struct value * convert_value_from_python(PyObject *obj)
Definition: py-value.c:1615
DISABLE_COPY_AND_ASSIGN(gdbpy_enter)
PyTypeObject thread_object_type
Definition: py-infthread.c:345
PyObject * gdbpy_value_cst
Definition: python.c:125
#define PySys_SetPath
~gdbpy_enter()
Definition: python.c:226
bfd_vma CORE_ADDR
Definition: common-types.h:41
ext_lang_bp_stop
Definition: extension.h:129
enum ext_lang_rc gdbpy_apply_val_pretty_printer(const struct extension_language_defn *, struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, struct value *val, const struct value_print_options *options, const struct language_defn *language)
gdb::unique_xmalloc_ptr< char > python_string_to_target_string(PyObject *obj)
Definition: py-utils.c:124
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int int rusage_t pid_t pid
Definition: gnu-nat.c:1824
constexpr gdb_PyGetSetDef(const char *name_, getter get_, setter set_, const char *doc_)
int gdbpy_initialize_blocks(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-block.c:431
PyObject * gdbpy_stop_recording(PyObject *self, PyObject *args)
Definition: py-record.c:638
ext_lang_rc
gdb::unique_xmalloc_ptr< char > unicode_to_target_string(PyObject *unicode_str)
Definition: py-utils.c:103
static void gdb_PySys_SetPath(const GDB_PYSYS_SETPATH_CHAR *path)
PyObject * symtab_to_symtab_object(struct symtab *symtab)
Definition: py-symtab.c:424
int gdbpy_is_string(PyObject *obj)
Definition: py-utils.c:173
unsigned long gdb_py_ulongest
#define CPYCHECKER_RETURNS_BORROWED_REF
PyTypeObject block_object_type
Definition: py-block.c:482
PyObject * gdbpy_to_string_cst
Definition: python.c:120
struct cmd_list_element * set_python_list
PyObject * gdb_py_object_from_ulongest(ULONGEST l)
Definition: py-utils.c:321
PyObject * gdbpy_lookup_type(PyObject *self, PyObject *args, PyObject *kw)
Definition: py-type.c:1343
PyObject * gdbpy_newest_frame(PyObject *self, PyObject *args)
Definition: py-frame.c:601
PyGILState_STATE m_state
int gdbpy_initialize_linetable(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-linetable.c:292
static void gdb_Py_DECREF(void *op)
struct gdbarch * arch_object_to_gdbarch(PyObject *obj)
Definition: py-arch.c:69
int gdbpy_is_value_object(PyObject *obj)
Definition: py-value.c:1754
struct type * type_object_to_type(PyObject *obj)
Definition: py-type.c:1332
struct gdbpy_breakpoint_object gdbpy_breakpoint_object
static PyObject * gdb_PySys_GetObject(const char *name)
PyObject * gdbpy_get_varobj_pretty_printer(struct value *value)
static int gdb_PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, const char **keywords,...)
PyObject * gdbpy_display_hint_cst
Definition: python.c:122
PyTypeObject frame_object_type
Definition: py-frame.c:770
PyObject * gdbpy_default_visualizer(PyObject *self, PyObject *args)
PyObject * pspy_get_frame_unwinders(PyObject *, void *)
Definition: py-progspace.c:225
long gdb_py_longest
PyObject * pspy_get_frame_filters(PyObject *, void *)
Definition: py-progspace.c:184
PyObject * symtab_to_linetable_object(PyObject *symtab)
Definition: py-linetable.c:86
enum ext_lang_rc gdbpy_get_xmethod_result_type(const struct extension_language_defn *extlang, struct xmethod_worker *worker, struct value *object, struct value **args, int nargs, struct type **result_type)
Definition: py-xmethods.c:433
var_types
Definition: command.h:63
PyObject * symtab_and_line_to_sal_object(struct symtab_and_line sal)
Definition: py-symtab.c:438
PyObject * gdbpy_current_recording(PyObject *self, PyObject *args)
Definition: py-record.c:621
PyObject * gdb_py_object_from_longest(LONGEST l)
Definition: py-utils.c:299
PyObject * inf_obj
ext_lang_bt_status
Definition: extension.h:69
PyObject * inferior_to_inferior_object(struct inferior *inferior)
Definition: py-inferior.c:211
int gdbpy_initialize_instruction(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
int gdbpy_is_lazy_string(PyObject *result)
PyTypeObject symbol_object_type
Definition: py-symbol.c:604
gdb::unique_xmalloc_ptr< char > gdbpy_obj_to_string(PyObject *obj)
Definition: py-utils.c:186
void bpfinishpy_post_stop_hook(struct gdbpy_breakpoint_object *bp_obj)
#define PyErr_NewException
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1891
gdbpy_enter_varobj(const struct varobj *var)
Definition: varobj.c:222
void gdbpy_initialize_gdb_readline(void)
const char *const name
Definition: aarch64-tdep.c:76
struct active_ext_lang_state * m_previous_active
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-utils.c:376
PyObject * gdbpy_inferiors(PyObject *unused, PyObject *unused2)
Definition: py-inferior.c:480
PyObject * gdbpy_doc_cst
Definition: python.c:123
PyObject * type_to_type_object(struct type *)
Definition: py-type.c:1320
#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
int gdbpy_initialize_breakpoints(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
#define CPYCHECKER_SETS_EXCEPTION
PyObject * objfile_to_objfile_object(struct objfile *) CPYCHECKER_RETURNS_BORROWED_REF
Definition: py-objfile.c:624
PyObject * python_string_to_target_python_string(PyObject *obj)
Definition: py-utils.c:139
enum ext_lang_rc gdbpy_get_xmethod_arg_types(const struct extension_language_defn *extlang, struct xmethod_worker *worker, int *nargs, struct type ***arg_types)
Definition: py-xmethods.c:308
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
void gdbpy_convert_exception(struct gdb_exception) CPYCHECKER_SETS_EXCEPTION
Definition: py-utils.c:235
PyObject * gdbpy_enabled_cst
Definition: python.c:124
int gdbpy_initialize_btrace(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyObject * gdbpy_gdb_error
Definition: python.c:131
int gdbpy_initialize_py_events(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-evts.c:54
void bpfinishpy_pre_stop_hook(struct gdbpy_breakpoint_object *bp_obj)
int gdbpy_initialize_objfile(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-objfile.c:645
struct value * gdbpy_invoke_xmethod(const struct extension_language_defn *extlang, struct xmethod_worker *worker, struct value *obj, struct value **args, int nargs)
Definition: py-xmethods.c:534
int gdbpy_initialize_event(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-event.c:58
PyObject * find_inferior_object(int pid)
Definition: py-inferior.c:296
int get_addr_from_python(PyObject *obj, CORE_ADDR *addr) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-utils.c:255
int gdbpy_auto_load_enabled(const struct extension_language_defn *)
Definition: py-auto-load.c:47
Definition: ptid.h:35
PyObject * objfpy_get_printers(PyObject *, void *)
Definition: py-objfile.c:243
ext_lang_frame_args
Definition: extension.h:108
const struct language_defn * m_language
int gdbpy_print_python_errors_p(void)
Definition: python.c:1252
int gdbpy_initialize_frames(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-frame.c:692
enum ext_lang_bt_status gdbpy_apply_frame_filter(const struct extension_language_defn *, struct frame_info *frame, int flags, enum ext_lang_frame_args args_type, struct ui_out *out, int frame_low, int frame_high)
PyObject * gdbpy_parameter_value(enum var_types type, void *var)
Definition: python.c:433
gdb::unique_xmalloc_ptr< char > gdbpy_exception_to_string(PyObject *ptype, PyObject *pvalue)
Definition: py-utils.c:212
PyObject * gdbpy_selected_inferior(PyObject *self, PyObject *args)
Definition: py-inferior.c:911
int gdbpy_initialize_values(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-value.c:1760
PyObject * block_to_block_object(const struct block *block, struct objfile *objfile)
Definition: py-block.c:272
PyObject * pspace_to_pspace_object(struct program_space *) CPYCHECKER_RETURNS_BORROWED_REF
Definition: py-progspace.c:346
Definition: gdbtypes.h:749
PyObject * gdbpy_lookup_objfile(PyObject *self, PyObject *args, PyObject *kw)
Definition: py-objfile.c:560
static int gdb_PyObject_HasAttrString(PyObject *obj, const char *attr)
PyObject * gdbpy_history(PyObject *self, PyObject *args)
Definition: py-value.c:1730
struct symtab_and_line * sal_object_to_symtab_and_line(PyObject *obj)
Definition: py-symtab.c:453
struct gdbarch * python_gdbarch
Definition: python.c:203
int gdbpy_initialize_unwind(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-unwind.c:653
PyObject * gdbpy_breakpoints(PyObject *, PyObject *)
int gdbpy_initialize_symtabs(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-symtab.c:518
PyObject * gdbpy_create_lazy_string_object(CORE_ADDR address, long length, const char *encoding, struct type *type)
PyObject * gdbpy_gdberror_exc
Definition: python.c:128
PyObject * gdbpy_create_ptid_object(ptid_t ptid)
Definition: py-infthread.c:259
PyObject * gdbpy_lookup_global_symbol(PyObject *self, PyObject *args, PyObject *kw)
Definition: py-symbol.c:443
int gdb_python_initialized
Definition: python.c:108
int gdb_py_int_as_long(PyObject *, long *)
Definition: py-utils.c:346
constexpr gdb_PyGetSetDef(std::nullptr_t)
int gdbpy_initialize_parameters(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-param.c:729
enum ext_lang_bp_stop gdbpy_breakpoint_cond_says_stop(const struct extension_language_defn *, struct breakpoint *)
char * gdbpy_parse_command_name(const char *name, struct cmd_list_element ***base_list, struct cmd_list_element **start_list)
Definition: py-cmd.c:405
PyObject * value_to_value_object(struct value *v)
Definition: py-value.c:1579
PyObject * host_string_to_python_string(const char *str)
Definition: py-utils.c:164
PyObject * apply_varobj_pretty_printer(PyObject *print_obj, struct value **replacement, struct ui_file *stream)
void gdbpy_extract_lazy_string(PyObject *string, CORE_ADDR *addr, struct type **str_type, long *length, gdb::unique_xmalloc_ptr< char > *encoding)
struct cmd_list_element * show_python_list
#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyObject * m_error_traceback
PyObject_HEAD struct thread_info * thread
Definition: block.h:60
Definition: value.c:169
Definition: ui-out.h:77
struct breakpoint * bp
PyObject * gdbpy_string_to_argv(PyObject *self, PyObject *args)
Definition: py-cmd.c:760
struct symtab * symtab_object_to_symtab(PyObject *obj)
Definition: py-symtab.c:462
PyObject * symbol_to_symbol_object(struct symbol *sym)
Definition: py-symbol.c:325
PyObject * pspy_get_xmethods(PyObject *, void *)
Definition: py-progspace.c:278
thread_object * find_thread_object(ptid_t ptid) CPYCHECKER_RETURNS_BORROWED_REF
Definition: py-inferior.c:307
int gdbpy_initialize_eventregistry(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
int gdbpy_initialize_thread(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-infthread.c:299
int gdbpy_initialize_inferior(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-inferior.c:917
int gdbpy_initialize_functions(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-function.c:186
PyTypeObject breakpoint_object_type
int gdbpy_initialize_types(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-type.c:1374
void gdbpy_free_xmethod_worker_data(const struct extension_language_defn *extlang, void *data)
Definition: py-xmethods.c:52
PyObject * gdbpy_children_cst
Definition: python.c:121
PyObject_HEAD int number
gdbpy_enter(struct gdbarch *gdbarch, const struct language_defn *language)
Definition: python.c:206
int gdbpy_initialize_auto_load(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-auto-load.c:61
gdbpy_breakpoint_object * bppy_pending_object
Definition: py-breakpoint.c:42
gdb::unique_xmalloc_ptr< char > gdbpy_get_display_hint(PyObject *printer)
long Py_hash_t
PyObject * objfpy_get_frame_filters(PyObject *, void *)
Definition: py-objfile.c:283
PyObject * gdbarch_to_arch_object(struct gdbarch *gdbarch)
Definition: py-arch.c:81
PyTypeObject event_object_type
Definition: py-event.c:124
PyObject * objfpy_get_frame_unwinders(PyObject *, void *)
Definition: py-objfile.c:324
int gdbpy_initialize_xmethods(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-xmethods.c:647
void gdbpy_print_stack(void)
Definition: python.c:1262
enum ext_lang_rc gdbpy_get_matching_xmethod_workers(const struct extension_language_defn *extlang, struct type *obj_type, const char *method_name, xmethod_worker_vec **dm_vec)
Definition: py-xmethods.c:131
PyObject * gdbpy_frame_stop_reason_string(PyObject *, PyObject *)
Definition: py-frame.c:643
gdbpy_iter_kind
constexpr gdb_PyGetSetDef(const char *name_, getter get_, setter set_, const char *doc_, void *closure_)
PyObject * gdbpy_lookup_symbol(PyObject *self, PyObject *args, PyObject *kw)
Definition: py-symbol.c:371
static PyObject * gdb_PyObject_CallMethod(PyObject *o, const char *method, const char *format, Args... args)
struct varobj * var
Definition: varobj-iter.h:38
PyObject * gdbpy_gdb_memory_error
Definition: python.c:134
PyObject * pspy_get_printers(PyObject *, void *)
Definition: py-progspace.c:144
gdb::unique_xmalloc_ptr< char > python_string_to_host_string(PyObject *obj)
Definition: py-utils.c:152
unsigned long long ULONGEST
Definition: common-types.h:53
PyObject * gdbpy_selected_frame(PyObject *self, PyObject *args)
Definition: py-frame.c:622
language
Definition: defs.h:203
PyObject * gdbpy_start_recording(PyObject *self, PyObject *args)
Definition: py-record.c:595
PyObject * gdb_module
Definition: python.c:116
static PyObject * gdb_PyObject_GetAttrString(PyObject *obj, const char *attr)
const struct language_defn * python_language
Definition: python.c:204
void * gdbpy_clone_xmethod_worker_data(const struct extension_language_defn *extlang, void *data)
Definition: py-xmethods.c:70
int gdbpy_initialize_symbols(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-symbol.c:502
struct symbol * symbol_object_to_symbol(PyObject *obj)
Definition: py-symbol.c:338
PyObject * m_error_type
#define PyObject_CallMethod
int gdbpy_initialize_commands(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-cmd.c:650
CORE_ADDR address
Definition: value.c:208
struct frame_info * frame_object_to_frame_info(PyObject *frame_obj)
Definition: py-frame.c:63
int gdbpy_initialize_pspace(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-progspace.c:367
struct gdbarch * m_gdbarch
static PyObject * gdb_PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
PyObject * gdb_py_generic_dict(PyObject *self, void *closure)
Definition: py-utils.c:359
PyObject * frame_info_to_frame_object(struct frame_info *frame)
Definition: py-frame.c:359
#define PySys_GetObject
PyObject * python_string_to_unicode(PyObject *obj)
Definition: py-utils.c:38
thread_object * create_thread_object(struct thread_info *tp)
Definition: py-infthread.c:40
PyObject * m_error_value
void gdbpy_preserve_values(const struct extension_language_defn *, struct objfile *objfile, htab_t copied_types)
Definition: py-value.c:163
struct varobj_iter * py_varobj_get_iterator(struct varobj *var, PyObject *printer)
Definition: py-varobj.c:162
#define PyObject_HasAttrString(obj, attr)
long long LONGEST
Definition: common-types.h:52
struct value * value_object_to_value(PyObject *self)
Definition: py-value.c:1600
int gdbpy_initialize_arch(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-arch.c:237