Use thread_info and inferior pointers more throughout
[deliverable/binutils-gdb.git] / gdb / python / python-internal.h
CommitLineData
d57a3c85
TJB
1/* Gdb/Python header for private use by Python module.
2
e2882c85 3 Copyright (C) 2008-2018 Free Software Foundation, Inc.
d57a3c85
TJB
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
6dddc817 23#include "extension.h"
e992c591 24#include "extension-priv.h"
6dddc817 25
62eec1a5
TT
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
634c58be
TT
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
62eec1a5
TT
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
9b08f225
TT
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
56cc411c
TT
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
5d153bd1
TT
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
d57a3c85
TJB
66/* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t
67 needed by pyport.h. */
d57a3c85
TJB
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.
aac63f0f
JB
72 To work around this, undef _POSIX_C_SOURCE before we include Python.h.
73
74 Same problem with _XOPEN_SOURCE. */
d57a3c85 75#undef _POSIX_C_SOURCE
aac63f0f 76#undef _XOPEN_SOURCE
d57a3c85 77
aed1781d
JB
78/* On sparc-solaris, /usr/include/sys/feature_tests.h defines
79 _FILE_OFFSET_BITS, which pyconfig.h also defines. Same work
284a3db3 80 around technique as above. */
aed1781d
JB
81#undef _FILE_OFFSET_BITS
82
1cdd3232
EZ
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
b2a426e2
EZ
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
1c033f8c
TT
94/* Request clean size types from Python. */
95#define PY_SSIZE_T_CLEAN
96
ac534cba
JB
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>
9a27f2c6
PK
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
75c0bdf4 113#define PyInt_FromSsize_t PyLong_FromSsize_t
9a27f2c6 114#define PyInt_AsLong PyLong_AsLong
75c0bdf4 115#define PyInt_AsSsize_t PyLong_AsSsize_t
9a27f2c6
PK
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
d57a3c85 123#if HAVE_LIBPYTHON2_4
5171e6b3
TT
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. */
128typedef int Py_ssize_t;
d57a3c85
TJB
129#endif
130
9a27f2c6
PK
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
ca30a762
TT
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)
548a926a 148#define PyGILState_Release(ARG) ((void)(ARG))
aed1781d 149#define PyEval_InitThreads()
548a926a 150#define PyThreadState_Swap(ARG) ((void)(ARG))
aed1781d 151#define PyEval_ReleaseLock()
ca30a762
TT
152#endif
153
74aedc46
TT
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"
161typedef PY_LONG_LONG gdb_py_longest;
162typedef 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"
171typedef long gdb_py_longest;
172typedef 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
881d5d5d
JK
179#if PY_VERSION_HEX < 0x03020000
180typedef long Py_hash_t;
181#endif
182
6f8b0407
SM
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
1915daeb
PA
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
194static inline void
ac90359c 195gdb_Py_DECREF (void *op) /* ARI: editCase function */
1915daeb 196{
a6e6f791
PA
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);
1915daeb
PA
201}
202
203#undef Py_DECREF
204#define Py_DECREF(op) gdb_Py_DECREF (op)
74aedc46 205
5a6c7709
SC
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
210static inline PyObject *
211gdb_PyObject_GetAttrString (PyObject *obj,
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
223static inline int
224gdb_PyObject_HasAttrString (PyObject *obj,
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
4d759979
PA
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
239template<typename... Args>
240static inline PyObject *
241gdb_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
257static inline PyObject*
258gdb_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
269static inline PyObject *
270gdb_PySys_GetObject (const char *name)
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
287static inline void
288gdb_PySys_SetPath (const GDB_PYSYS_SETPATH_CHAR *path)
289{
290 PySys_SetPath (const_cast<GDB_PYSYS_SETPATH_CHAR *> (path));
291}
292
293#define PySys_SetPath gdb_PySys_SetPath
294
0d1f4ceb
PA
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
304struct 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
2adadf51
PA
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
337static inline int
338gdb_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
256458bc 353/* In order to be able to parse symtab_and_line_to_sal_object function
9cb74f47
PM
354 a real symtab_and_line structure is needed. */
355#include "symtab.h"
356
d7b32ed3
PM
357/* Also needed to parse enum var_types. */
358#include "command.h"
505500db 359#include "breakpoint.h"
d7b32ed3 360
a73bb892
PK
361enum gdbpy_iter_kind { iter_keys, iter_values, iter_items };
362
f3e9a817 363struct block;
a08702d6 364struct value;
d452c4bc 365struct language_defn;
fa33c3cd 366struct program_space;
505500db 367struct bpstats;
619cebe8 368struct inferior;
d57a3c85 369
0646da15
TT
370extern int gdb_python_initialized;
371
d57a3c85 372extern PyObject *gdb_module;
b9516fa1 373extern PyObject *gdb_python_module;
62eec1a5
TT
374extern PyTypeObject value_object_type
375 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("value_object");
376extern PyTypeObject block_object_type
377 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("block_object");
378extern PyTypeObject symbol_object_type
379 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symbol_object");
380extern PyTypeObject event_object_type
381 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
62eec1a5
TT
382extern PyTypeObject breakpoint_object_type
383 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("breakpoint_object");
384extern PyTypeObject frame_object_type
385 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("frame_object");
fbbe5337
KB
386extern PyTypeObject thread_object_type
387 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("thread_object");
cc72b2a2 388
4cb0213d 389typedef struct gdbpy_breakpoint_object
cc72b2a2
KP
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. */
401 int is_finish_bp;
4cb0213d 402} gdbpy_breakpoint_object;
cc72b2a2
KP
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. */
4cb0213d 429extern gdbpy_breakpoint_object *bppy_pending_object;
505500db 430
a08702d6 431
595939de
PM
432typedef struct
433{
434 PyObject_HEAD
435
436 /* The thread we represent. */
437 struct thread_info *thread;
438
439 /* The Inferior object to which this thread belongs. */
440 PyObject *inf_obj;
441} thread_object;
442
00431a78
PA
443struct inferior_object;
444
8a1ea21f
DE
445extern struct cmd_list_element *set_python_list;
446extern struct cmd_list_element *show_python_list;
6dddc817
DE
447\f
448/* extension_language_script_ops "methods". */
449
450extern int gdbpy_auto_load_enabled (const struct extension_language_defn *);
451
452/* extension_language_ops "methods". */
453
454extern enum ext_lang_rc gdbpy_apply_val_pretty_printer
455 (const struct extension_language_defn *,
668e1674 456 struct type *type,
6b850546 457 LONGEST embedded_offset, CORE_ADDR address,
6dddc817 458 struct ui_file *stream, int recurse,
668e1674 459 struct value *val,
6dddc817
DE
460 const struct value_print_options *options,
461 const struct language_defn *language);
462extern enum ext_lang_bt_status gdbpy_apply_frame_filter
463 (const struct extension_language_defn *,
d4dd3282
TT
464 struct frame_info *frame, frame_filter_flags flags,
465 enum ext_lang_frame_args args_type,
6dddc817
DE
466 struct ui_out *out, int frame_low, int frame_high);
467extern void gdbpy_preserve_values (const struct extension_language_defn *,
468 struct objfile *objfile,
469 htab_t copied_types);
470extern enum ext_lang_bp_stop gdbpy_breakpoint_cond_says_stop
471 (const struct extension_language_defn *, struct breakpoint *);
472extern int gdbpy_breakpoint_has_cond (const struct extension_language_defn *,
473 struct breakpoint *b);
883964a7 474
883964a7
SC
475extern enum ext_lang_rc gdbpy_get_matching_xmethod_workers
476 (const struct extension_language_defn *extlang,
477 struct type *obj_type, const char *method_name,
ba18742c
SM
478 std::vector<xmethod_worker_up> *dm_vec);
479
6dddc817 480\f
08c637de 481PyObject *gdbpy_history (PyObject *self, PyObject *args);
7729052b
TT
482PyObject *gdbpy_convenience_variable (PyObject *self, PyObject *args);
483PyObject *gdbpy_set_convenience_variable (PyObject *self, PyObject *args);
adc36818 484PyObject *gdbpy_breakpoints (PyObject *, PyObject *);
f8f6f20b 485PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *);
f3e9a817 486PyObject *gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw);
6e6fbe60
DE
487PyObject *gdbpy_lookup_global_symbol (PyObject *self, PyObject *args,
488 PyObject *kw);
4726b2d8
TW
489PyObject *gdbpy_start_recording (PyObject *self, PyObject *args);
490PyObject *gdbpy_current_recording (PyObject *self, PyObject *args);
491PyObject *gdbpy_stop_recording (PyObject *self, PyObject *args);
d8e22779 492PyObject *gdbpy_newest_frame (PyObject *self, PyObject *args);
f8f6f20b 493PyObject *gdbpy_selected_frame (PyObject *self, PyObject *args);
f3e9a817 494PyObject *gdbpy_block_for_pc (PyObject *self, PyObject *args);
2c74e833 495PyObject *gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw);
a16b0e22 496int gdbpy_is_field (PyObject *obj);
be759fcf 497PyObject *gdbpy_create_lazy_string_object (CORE_ADDR address, long length,
9a2b4c1b
MS
498 const char *encoding,
499 struct type *type);
595939de 500PyObject *gdbpy_inferiors (PyObject *unused, PyObject *unused2);
162078c8 501PyObject *gdbpy_create_ptid_object (ptid_t ptid);
595939de 502PyObject *gdbpy_selected_thread (PyObject *self, PyObject *args);
2aa48337 503PyObject *gdbpy_selected_inferior (PyObject *self, PyObject *args);
07ca107c 504PyObject *gdbpy_string_to_argv (PyObject *self, PyObject *args);
d7b32ed3 505PyObject *gdbpy_parameter_value (enum var_types type, void *var);
63d97a20 506char *gdbpy_parse_command_name (const char *name,
d7b32ed3
PM
507 struct cmd_list_element ***base_list,
508 struct cmd_list_element **start_list);
a08702d6 509
f3e9a817
PM
510PyObject *symtab_and_line_to_sal_object (struct symtab_and_line sal);
511PyObject *symtab_to_symtab_object (struct symtab *symtab);
512PyObject *symbol_to_symbol_object (struct symbol *sym);
9df2fbc4
PM
513PyObject *block_to_block_object (const struct block *block,
514 struct objfile *objfile);
a08702d6 515PyObject *value_to_value_object (struct value *v);
2c74e833 516PyObject *type_to_type_object (struct type *);
595939de 517PyObject *frame_info_to_frame_object (struct frame_info *frame);
bc79de95 518PyObject *symtab_to_linetable_object (PyObject *symtab);
634c58be
TT
519PyObject *pspace_to_pspace_object (struct program_space *)
520 CPYCHECKER_RETURNS_BORROWED_REF;
fa33c3cd 521PyObject *pspy_get_printers (PyObject *, void *);
1e611234 522PyObject *pspy_get_frame_filters (PyObject *, void *);
d11916aa 523PyObject *pspy_get_frame_unwinders (PyObject *, void *);
883964a7 524PyObject *pspy_get_xmethods (PyObject *, void *);
fa33c3cd 525
634c58be
TT
526PyObject *objfile_to_objfile_object (struct objfile *)
527 CPYCHECKER_RETURNS_BORROWED_REF;
89c73ade 528PyObject *objfpy_get_printers (PyObject *, void *);
1e611234 529PyObject *objfpy_get_frame_filters (PyObject *, void *);
d11916aa 530PyObject *objfpy_get_frame_unwinders (PyObject *, void *);
883964a7 531PyObject *objfpy_get_xmethods (PyObject *, void *);
6dddd6a5 532PyObject *gdbpy_lookup_objfile (PyObject *self, PyObject *args, PyObject *kw);
a08702d6 533
bea883fd
SCR
534PyObject *gdbarch_to_arch_object (struct gdbarch *gdbarch);
535
595939de 536thread_object *create_thread_object (struct thread_info *tp);
00431a78
PA
537thread_object *thread_to_thread_object (thread_info *thr)
538 CPYCHECKER_RETURNS_BORROWED_REF;
539inferior_object *inferior_to_inferior_object (inferior *inf);
595939de 540
9df2fbc4 541const struct block *block_object_to_block (PyObject *obj);
f3e9a817 542struct symbol *symbol_object_to_symbol (PyObject *obj);
a6bac58e 543struct value *value_object_to_value (PyObject *self);
a08702d6 544struct value *convert_value_from_python (PyObject *obj);
2c74e833 545struct type *type_object_to_type (PyObject *obj);
f3e9a817
PM
546struct symtab *symtab_object_to_symtab (PyObject *obj);
547struct symtab_and_line *sal_object_to_symtab_and_line (PyObject *obj);
cc72b2a2 548struct frame_info *frame_object_to_frame_info (PyObject *frame_obj);
bea883fd 549struct gdbarch *arch_object_to_gdbarch (PyObject *obj);
a08702d6 550
037bbc8e 551void gdbpy_initialize_gdb_readline (void);
999633ed
TT
552int gdbpy_initialize_auto_load (void)
553 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
554int gdbpy_initialize_values (void)
555 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
556int gdbpy_initialize_frames (void)
557 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
d050f7d7
TW
558int gdbpy_initialize_instruction (void)
559 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
75c0bdf4
TW
560int gdbpy_initialize_btrace (void)
561 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
4726b2d8
TW
562int gdbpy_initialize_record (void)
563 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
999633ed
TT
564int gdbpy_initialize_symtabs (void)
565 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
566int gdbpy_initialize_commands (void)
567 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
568int gdbpy_initialize_symbols (void)
569 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
570int gdbpy_initialize_symtabs (void)
571 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
572int gdbpy_initialize_blocks (void)
573 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
574int gdbpy_initialize_types (void)
575 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
576int gdbpy_initialize_functions (void)
577 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
578int gdbpy_initialize_pspace (void)
579 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
580int gdbpy_initialize_objfile (void)
581 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
582int gdbpy_initialize_breakpoints (void)
583 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
584int gdbpy_initialize_finishbreakpoints (void)
585 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
586int gdbpy_initialize_lazy_string (void)
587 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
bc79de95
PM
588int gdbpy_initialize_linetable (void)
589 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
999633ed
TT
590int gdbpy_initialize_parameters (void)
591 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
592int gdbpy_initialize_thread (void)
593 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
594int gdbpy_initialize_inferior (void)
595 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
596int gdbpy_initialize_eventregistry (void)
597 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
598int gdbpy_initialize_event (void)
599 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
600int gdbpy_initialize_py_events (void)
601 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
999633ed
TT
602int gdbpy_initialize_arch (void)
603 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
883964a7
SC
604int gdbpy_initialize_xmethods (void)
605 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
d11916aa
SS
606int gdbpy_initialize_unwind (void)
607 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
d57a3c85 608
4ecee2c4
TT
609/* Called before entering the Python interpreter to install the
610 current language and architecture to be used for Python values.
611 Also set the active extension language for GDB so that SIGINT's
612 are directed our way, and if necessary install the right SIGINT
613 handler. */
614class gdbpy_enter
615{
616 public:
617
618 gdbpy_enter (struct gdbarch *gdbarch, const struct language_defn *language);
619
620 ~gdbpy_enter ();
621
d6541620 622 DISABLE_COPY_AND_ASSIGN (gdbpy_enter);
4ecee2c4
TT
623
624 private:
625
626 struct active_ext_lang_state *m_previous_active;
627 PyGILState_STATE m_state;
628 struct gdbarch *m_gdbarch;
629 const struct language_defn *m_language;
630 PyObject *m_error_type, *m_error_value, *m_error_traceback;
631};
632
6cd67bea
TT
633/* Like gdbpy_enter, but takes a varobj. This is a subclass just to
634 make constructor delegation a little nicer. */
635class gdbpy_enter_varobj : public gdbpy_enter
636{
637 public:
638
639 /* This is defined in varobj.c, where it can access varobj
640 internals. */
641 gdbpy_enter_varobj (const struct varobj *var);
642
643};
644
d452c4bc
UW
645extern struct gdbarch *python_gdbarch;
646extern const struct language_defn *python_language;
d57a3c85
TJB
647
648/* Use this after a TRY_EXCEPT to throw the appropriate Python
649 exception. */
56cc411c
TT
650#define GDB_PY_HANDLE_EXCEPTION(Exception) \
651 do { \
652 if (Exception.reason < 0) \
653 { \
654 gdbpy_convert_exception (Exception); \
655 return NULL; \
656 } \
657 } while (0)
d57a3c85 658
adc36818
PM
659/* Use this after a TRY_EXCEPT to throw the appropriate Python
660 exception. This macro is for use inside setter functions. */
661#define GDB_PY_SET_HANDLE_EXCEPTION(Exception) \
662 do { \
663 if (Exception.reason < 0) \
664 { \
621c8364 665 gdbpy_convert_exception (Exception); \
adc36818
PM
666 return -1; \
667 } \
668 } while (0)
d57a3c85 669
69b4374a 670int gdbpy_print_python_errors_p (void);
d57a3c85
TJB
671void gdbpy_print_stack (void);
672
673PyObject *python_string_to_unicode (PyObject *obj);
9b972014
TT
674gdb::unique_xmalloc_ptr<char> unicode_to_target_string (PyObject *unicode_str);
675gdb::unique_xmalloc_ptr<char> python_string_to_target_string (PyObject *obj);
fbb8f299 676PyObject *python_string_to_target_python_string (PyObject *obj);
9b972014 677gdb::unique_xmalloc_ptr<char> python_string_to_host_string (PyObject *obj);
4ae6cc19 678PyObject *host_string_to_python_string (const char *str);
08c637de 679int gdbpy_is_string (PyObject *obj);
9b972014
TT
680gdb::unique_xmalloc_ptr<char> gdbpy_obj_to_string (PyObject *obj);
681gdb::unique_xmalloc_ptr<char> gdbpy_exception_to_string (PyObject *ptype,
682 PyObject *pvalue);
07ca107c 683
be759fcf 684int gdbpy_is_lazy_string (PyObject *result);
09ca9e2e 685void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
256458bc 686 struct type **str_type,
1eba6383
TT
687 long *length,
688 gdb::unique_xmalloc_ptr<char> *encoding);
d57a3c85 689
595939de
PM
690int gdbpy_is_value_object (PyObject *obj);
691
b6313243
TT
692/* Note that these are declared here, and not in python.h with the
693 other pretty-printer functions, because they refer to PyObject. */
fbb8f299 694PyObject *apply_varobj_pretty_printer (PyObject *print_obj,
621c8364
TT
695 struct value **replacement,
696 struct ui_file *stream);
b6313243 697PyObject *gdbpy_get_varobj_pretty_printer (struct value *value);
9b972014 698gdb::unique_xmalloc_ptr<char> gdbpy_get_display_hint (PyObject *printer);
b6313243
TT
699PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args);
700
4cb0213d
DE
701void bpfinishpy_pre_stop_hook (struct gdbpy_breakpoint_object *bp_obj);
702void bpfinishpy_post_stop_hook (struct gdbpy_breakpoint_object *bp_obj);
cc72b2a2 703
d8906c6f 704extern PyObject *gdbpy_doc_cst;
a6bac58e
TT
705extern PyObject *gdbpy_children_cst;
706extern PyObject *gdbpy_to_string_cst;
707extern PyObject *gdbpy_display_hint_cst;
967cf477 708extern PyObject *gdbpy_enabled_cst;
fb6a3ed3 709extern PyObject *gdbpy_value_cst;
d8906c6f 710
621c8364
TT
711/* Exception types. */
712extern PyObject *gdbpy_gdb_error;
713extern PyObject *gdbpy_gdb_memory_error;
07ca107c
DE
714extern PyObject *gdbpy_gdberror_exc;
715
56cc411c
TT
716extern void gdbpy_convert_exception (struct gdb_exception)
717 CPYCHECKER_SETS_EXCEPTION;
621c8364 718
b86af38a
TT
719int get_addr_from_python (PyObject *obj, CORE_ADDR *addr)
720 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
595939de 721
74aedc46
TT
722PyObject *gdb_py_object_from_longest (LONGEST l);
723PyObject *gdb_py_object_from_ulongest (ULONGEST l);
724int gdb_py_int_as_long (PyObject *, long *);
725
2e8265fd
TT
726PyObject *gdb_py_generic_dict (PyObject *self, void *closure);
727
aa36459a
TT
728int gdb_pymodule_addobject (PyObject *module, const char *name,
729 PyObject *object)
730 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
731
e5250216
YQ
732struct varobj_iter;
733struct varobj;
734struct varobj_iter *py_varobj_get_iterator (struct varobj *var,
735 PyObject *printer);
736
d57a3c85 737#endif /* GDB_PYTHON_INTERNAL_H */
This page took 1.545234 seconds and 4 git commands to generate.