Add more methods to gdb.Progspace
[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>
a5c5eda7 102#include "py-ref.h"
9a27f2c6
PK
103
104#if PY_MAJOR_VERSION >= 3
105#define IS_PY3K 1
106#endif
107
108#ifdef IS_PY3K
109#define Py_TPFLAGS_HAVE_ITER 0
110#define Py_TPFLAGS_CHECKTYPES 0
111
112#define PyInt_Check PyLong_Check
113#define PyInt_FromLong PyLong_FromLong
75c0bdf4 114#define PyInt_FromSsize_t PyLong_FromSsize_t
9a27f2c6 115#define PyInt_AsLong PyLong_AsLong
75c0bdf4 116#define PyInt_AsSsize_t PyLong_AsSsize_t
9a27f2c6
PK
117
118#define PyString_FromString PyUnicode_FromString
119#define PyString_Decode PyUnicode_Decode
120#define PyString_FromFormat PyUnicode_FromFormat
121#define PyString_Check PyUnicode_Check
122#endif
123
d57a3c85 124#if HAVE_LIBPYTHON2_4
5171e6b3
TT
125/* Py_ssize_t is not defined until 2.5.
126 Logical type for Py_ssize_t is Py_intptr_t, but that fails in 64-bit
127 compilation due to several apparent mistakes in python2.4 API, so we
128 use 'int' instead. */
129typedef int Py_ssize_t;
d57a3c85
TJB
130#endif
131
9a27f2c6
PK
132#ifndef PyVarObject_HEAD_INIT
133/* Python 2.4 does not define PyVarObject_HEAD_INIT. */
134#define PyVarObject_HEAD_INIT(type, size) \
135 PyObject_HEAD_INIT(type) size,
136
137#endif
138
139#ifndef Py_TYPE
140/* Python 2.4 does not define Py_TYPE. */
141#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
142#endif
143
ca30a762
TT
144/* If Python.h does not define WITH_THREAD, then the various
145 GIL-related functions will not be defined. However,
146 PyGILState_STATE will be. */
147#ifndef WITH_THREAD
148#define PyGILState_Ensure() ((PyGILState_STATE) 0)
548a926a 149#define PyGILState_Release(ARG) ((void)(ARG))
aed1781d 150#define PyEval_InitThreads()
548a926a 151#define PyThreadState_Swap(ARG) ((void)(ARG))
aed1781d 152#define PyEval_ReleaseLock()
ca30a762
TT
153#endif
154
74aedc46
TT
155/* Python supplies HAVE_LONG_LONG and some `long long' support when it
156 is available. These defines let us handle the differences more
157 cleanly. */
158#ifdef HAVE_LONG_LONG
159
160#define GDB_PY_LL_ARG "L"
161#define GDB_PY_LLU_ARG "K"
162typedef PY_LONG_LONG gdb_py_longest;
163typedef unsigned PY_LONG_LONG gdb_py_ulongest;
164#define gdb_py_long_from_longest PyLong_FromLongLong
165#define gdb_py_long_from_ulongest PyLong_FromUnsignedLongLong
166#define gdb_py_long_as_ulongest PyLong_AsUnsignedLongLong
167
168#else /* HAVE_LONG_LONG */
169
170#define GDB_PY_LL_ARG "L"
171#define GDB_PY_LLU_ARG "K"
172typedef long gdb_py_longest;
173typedef unsigned long gdb_py_ulongest;
174#define gdb_py_long_from_longest PyLong_FromLong
175#define gdb_py_long_from_ulongest PyLong_FromUnsignedLong
176#define gdb_py_long_as_ulongest PyLong_AsUnsignedLong
177
178#endif /* HAVE_LONG_LONG */
179
881d5d5d
JK
180#if PY_VERSION_HEX < 0x03020000
181typedef long Py_hash_t;
182#endif
183
6f8b0407
SM
184/* PyMem_RawMalloc appeared in Python 3.4. For earlier versions, we can just
185 fall back to PyMem_Malloc. */
186
187#if PY_VERSION_HEX < 0x03040000
188#define PyMem_RawMalloc PyMem_Malloc
189#endif
190
1915daeb
PA
191/* Python 2.6 did not wrap Py_DECREF in 'do {...} while (0)', leading
192 to 'suggest explicit braces to avoid ambiguous ‘else’' gcc errors.
193 Wrap it ourselves, so that callers don't need to care. */
194
195static inline void
ac90359c 196gdb_Py_DECREF (void *op) /* ARI: editCase function */
1915daeb 197{
a6e6f791
PA
198 /* ... and Python 2.4 didn't cast OP to PyObject pointer on the
199 '(op)->ob_refcnt' references within the macro. Cast it ourselves
200 too. */
201 Py_DECREF ((PyObject *) op);
1915daeb
PA
202}
203
204#undef Py_DECREF
205#define Py_DECREF(op) gdb_Py_DECREF (op)
74aedc46 206
5a6c7709
SC
207/* The second argument to PyObject_GetAttrString was missing the 'const'
208 qualifier in Python-2.4. Hence, we wrap it in a function to avoid errors
209 when compiled with -Werror. */
210
211static inline PyObject *
212gdb_PyObject_GetAttrString (PyObject *obj,
213 const char *attr) /* ARI: editCase function */
214{
215 return PyObject_GetAttrString (obj, (char *) attr);
216}
217
218#define PyObject_GetAttrString(obj, attr) gdb_PyObject_GetAttrString (obj, attr)
219
220/* The second argument to PyObject_HasAttrString was also missing the 'const'
221 qualifier in Python-2.4. Hence, we wrap it also in a function to avoid
222 errors when compiled with -Werror. */
223
224static inline int
225gdb_PyObject_HasAttrString (PyObject *obj,
226 const char *attr) /* ARI: editCase function */
227{
228 return PyObject_HasAttrString (obj, (char *) attr);
229}
230
231#define PyObject_HasAttrString(obj, attr) gdb_PyObject_HasAttrString (obj, attr)
232
4d759979
PA
233/* PyObject_CallMethod's 'method' and 'format' parameters were missing
234 the 'const' qualifier before Python 3.4. Hence, we wrap the
235 function in our own version to avoid errors with string literals.
236 Note, this is a variadic template because PyObject_CallMethod is a
237 varargs function and Python doesn't have a "PyObject_VaCallMethod"
238 variant taking a va_list that we could defer to instead. */
239
240template<typename... Args>
241static inline PyObject *
242gdb_PyObject_CallMethod (PyObject *o, const char *method, const char *format,
243 Args... args) /* ARI: editCase function */
244{
245 return PyObject_CallMethod (o,
246 const_cast<char *> (method),
247 const_cast<char *> (format),
248 args...);
249}
250
251#undef PyObject_CallMethod
252#define PyObject_CallMethod gdb_PyObject_CallMethod
253
254/* The 'name' parameter of PyErr_NewException was missing the 'const'
255 qualifier in Python <= 3.4. Hence, we wrap it in a function to
256 avoid errors when compiled with -Werror. */
257
258static inline PyObject*
259gdb_PyErr_NewException (const char *name, PyObject *base, PyObject *dict)
260{
261 return PyErr_NewException (const_cast<char *> (name), base, dict);
262}
263
264#define PyErr_NewException gdb_PyErr_NewException
265
266/* PySys_GetObject's 'name' parameter was missing the 'const'
267 qualifier before Python 3.4. Hence, we wrap it in a function to
268 avoid errors when compiled with -Werror. */
269
270static inline PyObject *
271gdb_PySys_GetObject (const char *name)
272{
273 return PySys_GetObject (const_cast<char *> (name));
274}
275
276#define PySys_GetObject gdb_PySys_GetObject
277
278/* PySys_SetPath's 'path' parameter was missing the 'const' qualifier
279 before Python 3.6. Hence, we wrap it in a function to avoid errors
280 when compiled with -Werror. */
281
282#ifdef IS_PY3K
283# define GDB_PYSYS_SETPATH_CHAR wchar_t
284#else
285# define GDB_PYSYS_SETPATH_CHAR char
286#endif
287
288static inline void
289gdb_PySys_SetPath (const GDB_PYSYS_SETPATH_CHAR *path)
290{
291 PySys_SetPath (const_cast<GDB_PYSYS_SETPATH_CHAR *> (path));
292}
293
294#define PySys_SetPath gdb_PySys_SetPath
295
0d1f4ceb
PA
296/* Wrap PyGetSetDef to allow convenient construction with string
297 literals. Unfortunately, PyGetSetDef's 'name' and 'doc' members
298 are 'char *' instead of 'const char *', meaning that in order to
299 list-initialize PyGetSetDef arrays with string literals (and
300 without the wrapping below) would require writing explicit 'char *'
301 casts. Instead, we extend PyGetSetDef and add constexpr
302 constructors that accept const 'name' and 'doc', hiding the ugly
303 casts here in a single place. */
304
305struct gdb_PyGetSetDef : PyGetSetDef
306{
307 constexpr gdb_PyGetSetDef (const char *name_, getter get_, setter set_,
308 const char *doc_, void *closure_)
309 : PyGetSetDef {const_cast<char *> (name_), get_, set_,
310 const_cast<char *> (doc_), closure_}
311 {}
312
313 /* Alternative constructor that allows omitting the closure in list
314 initialization. */
315 constexpr gdb_PyGetSetDef (const char *name_, getter get_, setter set_,
316 const char *doc_)
317 : gdb_PyGetSetDef {name_, get_, set_, doc_, NULL}
318 {}
319
320 /* Constructor for the sentinel entries. */
321 constexpr gdb_PyGetSetDef (std::nullptr_t)
322 : gdb_PyGetSetDef {NULL, NULL, NULL, NULL, NULL}
323 {}
324};
325
2adadf51
PA
326/* The 'keywords' parameter of PyArg_ParseTupleAndKeywords has type
327 'char **'. However, string literals are const in C++, and so to
328 avoid casting at every keyword array definition, we'll need to make
329 the keywords array an array of 'const char *'. To avoid having all
330 callers add a 'const_cast<char **>' themselves when passing such an
331 array through 'char **', we define our own version of
332 PyArg_ParseTupleAndKeywords here with a corresponding 'keywords'
333 parameter type that does the cast in a single place. (This is not
334 an overload of PyArg_ParseTupleAndKeywords in order to make it
335 clearer that we're calling our own function instead of a function
336 that exists in some newer Python version.) */
337
338static inline int
339gdb_PyArg_ParseTupleAndKeywords (PyObject *args, PyObject *kw,
340 const char *format, const char **keywords, ...)
341{
342 va_list ap;
343 int res;
344
345 va_start (ap, keywords);
346 res = PyArg_VaParseTupleAndKeywords (args, kw, format,
347 const_cast<char **> (keywords),
348 ap);
349 va_end (ap);
350
351 return res;
352}
353
256458bc 354/* In order to be able to parse symtab_and_line_to_sal_object function
9cb74f47
PM
355 a real symtab_and_line structure is needed. */
356#include "symtab.h"
357
d7b32ed3
PM
358/* Also needed to parse enum var_types. */
359#include "command.h"
505500db 360#include "breakpoint.h"
d7b32ed3 361
a73bb892
PK
362enum gdbpy_iter_kind { iter_keys, iter_values, iter_items };
363
f3e9a817 364struct block;
a08702d6 365struct value;
d452c4bc 366struct language_defn;
fa33c3cd 367struct program_space;
505500db 368struct bpstats;
619cebe8 369struct inferior;
d57a3c85 370
0646da15
TT
371extern int gdb_python_initialized;
372
d57a3c85 373extern PyObject *gdb_module;
b9516fa1 374extern PyObject *gdb_python_module;
62eec1a5
TT
375extern PyTypeObject value_object_type
376 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("value_object");
377extern PyTypeObject block_object_type
378 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("block_object");
379extern PyTypeObject symbol_object_type
380 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symbol_object");
381extern PyTypeObject event_object_type
382 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
62eec1a5
TT
383extern PyTypeObject breakpoint_object_type
384 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("breakpoint_object");
385extern PyTypeObject frame_object_type
386 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("frame_object");
fbbe5337
KB
387extern PyTypeObject thread_object_type
388 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("thread_object");
cc72b2a2 389
4cb0213d 390typedef struct gdbpy_breakpoint_object
cc72b2a2
KP
391{
392 PyObject_HEAD
393
394 /* The breakpoint number according to gdb. */
395 int number;
396
397 /* The gdb breakpoint object, or NULL if the breakpoint has been
398 deleted. */
399 struct breakpoint *bp;
400
401 /* 1 is this is a FinishBreakpoint object, 0 otherwise. */
402 int is_finish_bp;
4cb0213d 403} gdbpy_breakpoint_object;
cc72b2a2
KP
404
405/* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
406 exception if it is invalid. */
407#define BPPY_REQUIRE_VALID(Breakpoint) \
408 do { \
409 if ((Breakpoint)->bp == NULL) \
410 return PyErr_Format (PyExc_RuntimeError, \
411 _("Breakpoint %d is invalid."), \
412 (Breakpoint)->number); \
413 } while (0)
414
415/* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
416 exception if it is invalid. This macro is for use in setter functions. */
417#define BPPY_SET_REQUIRE_VALID(Breakpoint) \
418 do { \
419 if ((Breakpoint)->bp == NULL) \
420 { \
421 PyErr_Format (PyExc_RuntimeError, _("Breakpoint %d is invalid."), \
422 (Breakpoint)->number); \
423 return -1; \
424 } \
425 } while (0)
426
427
428/* Variables used to pass information between the Breakpoint
429 constructor and the breakpoint-created hook function. */
4cb0213d 430extern gdbpy_breakpoint_object *bppy_pending_object;
505500db 431
a08702d6 432
595939de
PM
433typedef struct
434{
435 PyObject_HEAD
436
437 /* The thread we represent. */
438 struct thread_info *thread;
439
440 /* The Inferior object to which this thread belongs. */
441 PyObject *inf_obj;
442} thread_object;
443
00431a78
PA
444struct inferior_object;
445
8a1ea21f
DE
446extern struct cmd_list_element *set_python_list;
447extern struct cmd_list_element *show_python_list;
6dddc817
DE
448\f
449/* extension_language_script_ops "methods". */
450
451extern int gdbpy_auto_load_enabled (const struct extension_language_defn *);
452
453/* extension_language_ops "methods". */
454
455extern enum ext_lang_rc gdbpy_apply_val_pretty_printer
456 (const struct extension_language_defn *,
668e1674 457 struct type *type,
6b850546 458 LONGEST embedded_offset, CORE_ADDR address,
6dddc817 459 struct ui_file *stream, int recurse,
668e1674 460 struct value *val,
6dddc817
DE
461 const struct value_print_options *options,
462 const struct language_defn *language);
463extern enum ext_lang_bt_status gdbpy_apply_frame_filter
464 (const struct extension_language_defn *,
d4dd3282
TT
465 struct frame_info *frame, frame_filter_flags flags,
466 enum ext_lang_frame_args args_type,
6dddc817
DE
467 struct ui_out *out, int frame_low, int frame_high);
468extern void gdbpy_preserve_values (const struct extension_language_defn *,
469 struct objfile *objfile,
470 htab_t copied_types);
471extern enum ext_lang_bp_stop gdbpy_breakpoint_cond_says_stop
472 (const struct extension_language_defn *, struct breakpoint *);
473extern int gdbpy_breakpoint_has_cond (const struct extension_language_defn *,
474 struct breakpoint *b);
883964a7 475
883964a7
SC
476extern enum ext_lang_rc gdbpy_get_matching_xmethod_workers
477 (const struct extension_language_defn *extlang,
478 struct type *obj_type, const char *method_name,
ba18742c
SM
479 std::vector<xmethod_worker_up> *dm_vec);
480
6dddc817 481\f
08c637de 482PyObject *gdbpy_history (PyObject *self, PyObject *args);
7729052b
TT
483PyObject *gdbpy_convenience_variable (PyObject *self, PyObject *args);
484PyObject *gdbpy_set_convenience_variable (PyObject *self, PyObject *args);
adc36818 485PyObject *gdbpy_breakpoints (PyObject *, PyObject *);
f8f6f20b 486PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *);
f3e9a817 487PyObject *gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw);
6e6fbe60
DE
488PyObject *gdbpy_lookup_global_symbol (PyObject *self, PyObject *args,
489 PyObject *kw);
4726b2d8
TW
490PyObject *gdbpy_start_recording (PyObject *self, PyObject *args);
491PyObject *gdbpy_current_recording (PyObject *self, PyObject *args);
492PyObject *gdbpy_stop_recording (PyObject *self, PyObject *args);
d8e22779 493PyObject *gdbpy_newest_frame (PyObject *self, PyObject *args);
f8f6f20b 494PyObject *gdbpy_selected_frame (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. */
a5c5eda7
SM
694gdbpy_ref<> apply_varobj_pretty_printer (PyObject *print_obj,
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.861429 seconds and 4 git commands to generate.