GDB (xrefs)
Loading...
Searching...
No Matches
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-2023 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20#ifndef PYTHON_PYTHON_INTERNAL_H
21#define PYTHON_PYTHON_INTERNAL_H
22
23#include "extension.h"
24#include "extension-priv.h"
25
26/* These WITH_* macros are defined by the CPython API checker that
27 comes with the Python plugin for GCC. See:
28 https://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html
29 The checker defines a WITH_ macro for each attribute it
30 exposes. Note that we intentionally do not use
31 'cpychecker_returns_borrowed_ref' -- that idiom is forbidden in
32 gdb. */
33
34#ifdef WITH_CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF_ATTRIBUTE
35#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG) \
36 __attribute__ ((cpychecker_type_object_for_typedef (ARG)))
37#else
38#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
39#endif
40
41#ifdef WITH_CPYCHECKER_SETS_EXCEPTION_ATTRIBUTE
42#define CPYCHECKER_SETS_EXCEPTION __attribute__ ((cpychecker_sets_exception))
43#else
44#define CPYCHECKER_SETS_EXCEPTION
45#endif
46
47#ifdef WITH_CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION_ATTRIBUTE
48#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION \
49 __attribute__ ((cpychecker_negative_result_sets_exception))
50#else
51#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
52#endif
53
54/* /usr/include/features.h on linux systems will define _POSIX_C_SOURCE
55 if it sees _GNU_SOURCE (which config.h will define).
56 pyconfig.h defines _POSIX_C_SOURCE to a different value than
57 /usr/include/features.h does causing compilation to fail.
58 To work around this, undef _POSIX_C_SOURCE before we include Python.h.
59
60 Same problem with _XOPEN_SOURCE. */
61#undef _POSIX_C_SOURCE
62#undef _XOPEN_SOURCE
63
64/* On sparc-solaris, /usr/include/sys/feature_tests.h defines
65 _FILE_OFFSET_BITS, which pyconfig.h also defines. Same work
66 around technique as above. */
67#undef _FILE_OFFSET_BITS
68
69/* A kludge to avoid redefinition of snprintf on Windows by pyerrors.h. */
70#if defined(_WIN32) && defined(HAVE_DECL_SNPRINTF)
71#define HAVE_SNPRINTF 1
72#endif
73
74/* Another kludge to avoid compilation errors because MinGW defines
75 'hypot' to '_hypot', but the C++ headers says "using ::hypot". */
76#ifdef __MINGW32__
77# define _hypot hypot
78#endif
79
80/* Request clean size types from Python. */
81#define PY_SSIZE_T_CLEAN
82
83/* Include the Python header files using angle brackets rather than
84 double quotes. On case-insensitive filesystems, this prevents us
85 from including our python/python.h header file. */
86#include <Python.h>
87#include <frameobject.h>
88#include "py-ref.h"
89
90#define Py_TPFLAGS_CHECKTYPES 0
91
92/* If Python.h does not define WITH_THREAD, then the various
93 GIL-related functions will not be defined. However,
94 PyGILState_STATE will be. */
95#ifndef WITH_THREAD
96#define PyGILState_Ensure() ((PyGILState_STATE) 0)
97#define PyGILState_Release(ARG) ((void)(ARG))
98#define PyEval_InitThreads()
99#define PyThreadState_Swap(ARG) ((void)(ARG))
100#define PyEval_ReleaseLock()
101#endif
102
103/* Python supplies HAVE_LONG_LONG and some `long long' support when it
104 is available. These defines let us handle the differences more
105 cleanly. */
106#ifdef HAVE_LONG_LONG
107
108#define GDB_PY_LL_ARG "L"
109#define GDB_PY_LLU_ARG "K"
110typedef PY_LONG_LONG gdb_py_longest;
111typedef unsigned PY_LONG_LONG gdb_py_ulongest;
112#define gdb_py_long_as_ulongest PyLong_AsUnsignedLongLong
113
114#else /* HAVE_LONG_LONG */
115
116#define GDB_PY_LL_ARG "L"
117#define GDB_PY_LLU_ARG "K"
118typedef long gdb_py_longest;
119typedef unsigned long gdb_py_ulongest;
120#define gdb_py_long_as_ulongest PyLong_AsUnsignedLong
121
122#endif /* HAVE_LONG_LONG */
123
124#if PY_VERSION_HEX < 0x03020000
125typedef long Py_hash_t;
126#endif
127
128/* PyMem_RawMalloc appeared in Python 3.4. For earlier versions, we can just
129 fall back to PyMem_Malloc. */
130
131#if PY_VERSION_HEX < 0x03040000
132#define PyMem_RawMalloc PyMem_Malloc
133#endif
134
135/* PyObject_CallMethod's 'method' and 'format' parameters were missing
136 the 'const' qualifier before Python 3.4. Hence, we wrap the
137 function in our own version to avoid errors with string literals.
138 Note, this is a variadic template because PyObject_CallMethod is a
139 varargs function and Python doesn't have a "PyObject_VaCallMethod"
140 variant taking a va_list that we could defer to instead. */
141
142template<typename... Args>
143static inline PyObject *
144gdb_PyObject_CallMethod (PyObject *o, const char *method, const char *format,
145 Args... args) /* ARI: editCase function */
146{
147 return PyObject_CallMethod (o,
148 const_cast<char *> (method),
149 const_cast<char *> (format),
150 args...);
151}
152
153#undef PyObject_CallMethod
154#define PyObject_CallMethod gdb_PyObject_CallMethod
155
156/* The 'name' parameter of PyErr_NewException was missing the 'const'
157 qualifier in Python <= 3.4. Hence, we wrap it in a function to
158 avoid errors when compiled with -Werror. */
159
160static inline PyObject*
161gdb_PyErr_NewException (const char *name, PyObject *base, PyObject *dict)
162{
163 return PyErr_NewException (const_cast<char *> (name), base, dict);
164}
165
166#define PyErr_NewException gdb_PyErr_NewException
167
168/* PySys_GetObject's 'name' parameter was missing the 'const'
169 qualifier before Python 3.4. Hence, we wrap it in a function to
170 avoid errors when compiled with -Werror. */
171
172static inline PyObject *
174{
175 return PySys_GetObject (const_cast<char *> (name));
176}
177
178#define PySys_GetObject gdb_PySys_GetObject
179
180/* PySys_SetPath was deprecated in Python 3.11. Disable the deprecated
181 code for Python 3.10 and newer. */
182#if PY_VERSION_HEX < 0x030a0000
183
184/* PySys_SetPath's 'path' parameter was missing the 'const' qualifier
185 before Python 3.6. Hence, we wrap it in a function to avoid errors
186 when compiled with -Werror. */
187
188# define GDB_PYSYS_SETPATH_CHAR wchar_t
189
190static inline void
192{
193 PySys_SetPath (const_cast<GDB_PYSYS_SETPATH_CHAR *> (path));
194}
195
196#define PySys_SetPath gdb_PySys_SetPath
197#endif
198
199/* Wrap PyGetSetDef to allow convenient construction with string
200 literals. Unfortunately, PyGetSetDef's 'name' and 'doc' members
201 are 'char *' instead of 'const char *', meaning that in order to
202 list-initialize PyGetSetDef arrays with string literals (and
203 without the wrapping below) would require writing explicit 'char *'
204 casts. Instead, we extend PyGetSetDef and add constexpr
205 constructors that accept const 'name' and 'doc', hiding the ugly
206 casts here in a single place. */
207
208struct gdb_PyGetSetDef : PyGetSetDef
209{
210 constexpr gdb_PyGetSetDef (const char *name_, getter get_, setter set_,
211 const char *doc_, void *closure_)
212 : PyGetSetDef {const_cast<char *> (name_), get_, set_,
213 const_cast<char *> (doc_), closure_}
214 {}
215
216 /* Alternative constructor that allows omitting the closure in list
217 initialization. */
218 constexpr gdb_PyGetSetDef (const char *name_, getter get_, setter set_,
219 const char *doc_)
220 : gdb_PyGetSetDef {name_, get_, set_, doc_, NULL}
221 {}
222
223 /* Constructor for the sentinel entries. */
224 constexpr gdb_PyGetSetDef (std::nullptr_t)
225 : gdb_PyGetSetDef {NULL, NULL, NULL, NULL, NULL}
226 {}
227};
228
229/* The 'keywords' parameter of PyArg_ParseTupleAndKeywords has type
230 'char **'. However, string literals are const in C++, and so to
231 avoid casting at every keyword array definition, we'll need to make
232 the keywords array an array of 'const char *'. To avoid having all
233 callers add a 'const_cast<char **>' themselves when passing such an
234 array through 'char **', we define our own version of
235 PyArg_ParseTupleAndKeywords here with a corresponding 'keywords'
236 parameter type that does the cast in a single place. (This is not
237 an overload of PyArg_ParseTupleAndKeywords in order to make it
238 clearer that we're calling our own function instead of a function
239 that exists in some newer Python version.) */
240
241static inline int
243 const char *format, const char **keywords, ...)
244{
245 va_list ap;
246 int res;
247
248 va_start (ap, keywords);
249 res = PyArg_VaParseTupleAndKeywords (args, kw, format,
250 const_cast<char **> (keywords),
251 ap);
252 va_end (ap);
253
254 return res;
255}
256
257/* In order to be able to parse symtab_and_line_to_sal_object function
258 a real symtab_and_line structure is needed. */
259#include "symtab.h"
260
261/* Also needed to parse enum var_types. */
262#include "command.h"
263#include "breakpoint.h"
264
266
267struct block;
268struct value;
269struct language_defn;
270struct program_space;
271struct bpstat;
272struct inferior;
273
274extern int gdb_python_initialized;
275
276extern PyObject *gdb_module;
278extern PyTypeObject value_object_type
280extern PyTypeObject block_object_type
282extern PyTypeObject symbol_object_type
284extern PyTypeObject event_object_type
286extern PyTypeObject breakpoint_object_type
288extern PyTypeObject frame_object_type
290extern PyTypeObject thread_object_type
292
293/* Ensure that breakpoint_object_type is initialized and return true. If
294 breakpoint_object_type can't be initialized then set a suitable Python
295 error and return false.
296
297 This function needs to be called from any gdbpy_initialize_* function
298 that wants to reference breakpoint_object_type. After all the
299 gdbpy_initialize_* functions have been called then breakpoint_object_type
300 is guaranteed to have been initialized, and this function does not need
301 calling before referencing breakpoint_object_type. */
302
304
306{
307 PyObject_HEAD
308
309 /* The breakpoint number according to gdb. */
311
312 /* The gdb breakpoint object, or NULL if the breakpoint has been
313 deleted. */
314 struct breakpoint *bp;
315
316 /* 1 is this is a FinishBreakpoint object, 0 otherwise. */
318};
319
320/* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
321 exception if it is invalid. */
322#define BPPY_REQUIRE_VALID(Breakpoint) \
323 do { \
324 if ((Breakpoint)->bp == NULL) \
325 return PyErr_Format (PyExc_RuntimeError, \
326 _("Breakpoint %d is invalid."), \
327 (Breakpoint)->number); \
328 } while (0)
329
330/* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
331 exception if it is invalid. This macro is for use in setter functions. */
332#define BPPY_SET_REQUIRE_VALID(Breakpoint) \
333 do { \
334 if ((Breakpoint)->bp == NULL) \
335 { \
336 PyErr_Format (PyExc_RuntimeError, _("Breakpoint %d is invalid."), \
337 (Breakpoint)->number); \
338 return -1; \
339 } \
340 } while (0)
341
342
343/* Variables used to pass information between the Breakpoint
344 constructor and the breakpoint-created hook function. */
346
347
349{
350 PyObject_HEAD
351
352 /* The thread we represent. */
354
355 /* The Inferior object to which this thread belongs. */
357};
358
359struct inferior_object;
360
361extern struct cmd_list_element *set_python_list;
363
364/* extension_language_script_ops "methods". */
365
366/* Return true if auto-loading Python scripts is enabled.
367 This is the extension_language_script_ops.auto_load_enabled "method". */
368
369extern bool gdbpy_auto_load_enabled (const struct extension_language_defn *);
370
371/* extension_language_ops "methods". */
372
374 (const struct extension_language_defn *,
375 struct value *value,
376 struct ui_file *stream, int recurse,
377 const struct value_print_options *options,
378 const struct language_defn *language);
380 (const struct extension_language_defn *,
381 frame_info_ptr frame, frame_filter_flags flags,
382 enum ext_lang_frame_args args_type,
383 struct ui_out *out, int frame_low, int frame_high);
384extern void gdbpy_preserve_values (const struct extension_language_defn *,
385 struct objfile *objfile,
386 htab_t copied_types);
388 (const struct extension_language_defn *, struct breakpoint *);
389extern int gdbpy_breakpoint_has_cond (const struct extension_language_defn *,
390 struct breakpoint *b);
391
393 (const struct extension_language_defn *extlang,
394 struct type *obj_type, const char *method_name,
395 std::vector<xmethod_worker_up> *dm_vec);
396
397
400extern PyObject *gdbpy_history_count (PyObject *self, PyObject *args);
407 PyObject *kw);
409 PyObject *kw);
411 PyObject *kw);
418int gdbpy_is_field (PyObject *obj);
419PyObject *gdbpy_create_lazy_string_object (CORE_ADDR address, long length,
420 const char *encoding,
421 struct type *type);
422PyObject *gdbpy_inferiors (PyObject *unused, PyObject *unused2);
428gdb::unique_xmalloc_ptr<char> gdbpy_parse_command_name
429 (const char *name, struct cmd_list_element ***base_list,
430 struct cmd_list_element **start_list);
432 PyObject *kw);
433
438 struct objfile *objfile);
449
456
459
461 const char *group_name);
463
467
468PyObject *gdbpy_buffer_to_membuf (gdb::unique_xmalloc_ptr<gdb_byte> buffer,
469 CORE_ADDR address, ULONGEST length);
470
474
475const struct block *block_object_to_block (PyObject *obj);
477struct value *value_object_to_value (PyObject *self);
479struct type *type_object_to_type (PyObject *obj);
484
485/* Convert Python object OBJ to a program_space pointer. OBJ must be a
486 gdb.Progspace reference. Return nullptr if the gdb.Progspace is not
487 valid (see gdb.Progspace.is_valid), otherwise return the program_space
488 pointer. */
489
491
515int gdbpy_initialize_types (void)
541int gdbpy_initialize_event (void)
543int gdbpy_initialize_arch (void)
562
563PyMODINIT_FUNC gdbpy_events_mod_func ();
564
565/* A wrapper for PyErr_Fetch that handles reference counting for the
566 caller. */
568{
569public:
570
572 {
573 PyObject *error_type, *error_value, *error_traceback;
574
575 PyErr_Fetch (&error_type, &error_value, &error_traceback);
576 m_error_type.reset (error_type);
577 m_error_value.reset (error_value);
578 m_error_traceback.reset (error_traceback);
579 }
580
581 /* Call PyErr_Restore using the values stashed in this object.
582 After this call, this object is invalid and neither the to_string
583 nor restore methods may be used again. */
584
585 void restore ()
586 {
587 PyErr_Restore (m_error_type.release (),
588 m_error_value.release (),
589 m_error_traceback.release ());
590 }
591
592 /* Return the string representation of the exception represented by
593 this object. If the result is NULL a python error occurred, the
594 caller must clear it. */
595
596 gdb::unique_xmalloc_ptr<char> to_string () const;
597
598 /* Return the string representation of the type of the exception
599 represented by this object. If the result is NULL a python error
600 occurred, the caller must clear it. */
601
602 gdb::unique_xmalloc_ptr<char> type_to_string () const;
603
604 /* Return true if the stored type matches TYPE, false otherwise. */
605
607 {
608 return PyErr_GivenExceptionMatches (m_error_type.get (), type);
609 }
610
611 /* Return a new reference to the exception value object. */
612
614 {
615 return m_error_value;
616 }
617
618private:
619
620 gdbpy_ref<> m_error_type, m_error_value, m_error_traceback;
621};
622
623/* Called before entering the Python interpreter to install the
624 current language and architecture to be used for Python values.
625 Also set the active extension language for GDB so that SIGINT's
626 are directed our way, and if necessary install the right SIGINT
627 handler. */
629{
630 public:
631
632 /* Set the ambient Python architecture to GDBARCH and the language
633 to LANGUAGE. If GDBARCH is nullptr, then the architecture will
634 be computed, when needed, using get_current_arch; see the
635 get_gdbarch method. If LANGUAGE is not nullptr, then the current
636 language at time of construction will be saved (to be restored on
637 destruction), and the current language will be set to
638 LANGUAGE. */
639 explicit gdbpy_enter (struct gdbarch *gdbarch = nullptr,
640 const struct language_defn *language = nullptr);
641
643
645
646 /* Return the current gdbarch, as known to the Python layer. This
647 is either python_gdbarch (which comes from the most recent call
648 to the gdbpy_enter constructor), or, if that is nullptr, the
649 result of get_current_arch. */
650 static struct gdbarch *get_gdbarch ();
651
652 /* Called only during gdb shutdown. This sets python_gdbarch to an
653 acceptable value. */
654 static void finalize ();
655
656 private:
657
658 /* The current gdbarch, according to Python. This can be
659 nullptr. */
660 static struct gdbarch *python_gdbarch;
661
663 PyGILState_STATE m_state;
666
667 /* An optional is used here because we don't want to call
668 PyErr_Fetch too early. */
669 gdb::optional<gdbpy_err_fetch> m_error;
670};
671
672/* Like gdbpy_enter, but takes a varobj. This is a subclass just to
673 make constructor delegation a little nicer. */
675{
676 public:
677
678 /* This is defined in varobj.c, where it can access varobj
679 internals. */
680 gdbpy_enter_varobj (const struct varobj *var);
681
682};
683
684/* The opposite of gdb_enter: this releases the GIL around a region,
685 allowing other Python threads to run. No Python APIs may be used
686 while this is active. */
688{
689public:
690
692 : m_save (PyEval_SaveThread ())
693 {
694 gdb_assert (m_save != nullptr);
695 }
696
698 {
699 PyEval_RestoreThread (m_save);
700 }
701
703
704private:
705
706 PyThreadState *m_save;
707};
708
709/* Use this after a TRY_EXCEPT to throw the appropriate Python
710 exception. */
711#define GDB_PY_HANDLE_EXCEPTION(Exception) \
712 do { \
713 if (Exception.reason < 0) \
714 { \
715 gdbpy_convert_exception (Exception); \
716 return NULL; \
717 } \
718 } while (0)
719
720/* Use this after a TRY_EXCEPT to throw the appropriate Python
721 exception. This macro is for use inside setter functions. */
722#define GDB_PY_SET_HANDLE_EXCEPTION(Exception) \
723 do { \
724 if (Exception.reason < 0) \
725 { \
726 gdbpy_convert_exception (Exception); \
727 return -1; \
728 } \
729 } while (0)
730
734void gdbpy_handle_exception () ATTRIBUTE_NORETURN;
735
736/* A wrapper around calling 'error'. Prefixes the error message with an
737 'Error occurred in Python' string. Use this in C++ code if we spot
738 something wrong with an object returned from Python code. The prefix
739 string gives the user a hint that the mistake is within Python code,
740 rather than some other part of GDB.
741
742 This always calls error, and never returns. */
743
744void gdbpy_error (const char *fmt, ...)
745 ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
746
748gdb::unique_xmalloc_ptr<char> unicode_to_target_string (PyObject *unicode_str);
749gdb::unique_xmalloc_ptr<char> python_string_to_target_string (PyObject *obj);
751gdb::unique_xmalloc_ptr<char> python_string_to_host_string (PyObject *obj);
752gdbpy_ref<> host_string_to_python_string (const char *str);
753int gdbpy_is_string (PyObject *obj);
754gdb::unique_xmalloc_ptr<char> gdbpy_obj_to_string (PyObject *obj);
755
756int gdbpy_is_lazy_string (PyObject *result);
757void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
758 struct type **str_type,
759 long *length,
760 gdb::unique_xmalloc_ptr<char> *encoding);
761
763
764/* Note that these are declared here, and not in python.h with the
765 other pretty-printer functions, because they refer to PyObject. */
767 struct value **replacement,
768 struct ui_file *stream,
769 const value_print_options *opts);
771gdb::unique_xmalloc_ptr<char> gdbpy_get_display_hint (PyObject *printer);
773
777
780
781extern PyObject *gdbpy_doc_cst;
787
788/* Exception types. */
792
793extern void gdbpy_convert_exception (const struct gdb_exception &)
795
796int get_addr_from_python (PyObject *obj, CORE_ADDR *addr)
798
801int gdb_py_int_as_long (PyObject *, long *);
802
803PyObject *gdb_py_generic_dict (PyObject *self, void *closure);
804
805int gdb_pymodule_addobject (PyObject *module, const char *name,
806 PyObject *object)
808
809struct varobj_iter;
810struct varobj;
812 (struct varobj *var,
813 PyObject *printer,
814 const value_print_options *opts);
815
816/* Deleter for Py_buffer unique_ptr specialization. */
817
819{
820 void operator() (Py_buffer *b) const
821 {
822 PyBuffer_Release (b);
823 }
824};
825
826/* A unique_ptr specialization for Py_buffer. */
827typedef std::unique_ptr<Py_buffer, Py_buffer_deleter> Py_buffer_up;
828
829/* Parse a register number from PYO_REG_ID and place the register number
830 into *REG_NUM. The register is a register for GDBARCH.
831
832 If a register is parsed successfully then *REG_NUM will have been
833 updated, and true is returned. Otherwise the contents of *REG_NUM are
834 undefined, and false is returned. When false is returned, the
835 Python error is set.
836
837 The PYO_REG_ID object can be a string, the name of the register. This
838 is the slowest approach as GDB has to map the name to a number for each
839 call. Alternatively PYO_REG_ID can be an internal GDB register
840 number. This is quick but should not be encouraged as this means
841 Python scripts are now dependent on GDB's internal register numbering.
842 Final PYO_REG_ID can be a gdb.RegisterDescriptor object, these objects
843 can be looked up by name once, and then cache the register number so
844 should be as quick as using a register number. */
845
846extern bool gdbpy_parse_register_id (struct gdbarch *gdbarch,
847 PyObject *pyo_reg_id, int *reg_num);
848
849/* Return true if OBJ is a gdb.Architecture object, otherwise, return
850 false. */
851
852extern bool gdbpy_is_architecture (PyObject *obj);
853
854/* Return true if OBJ is a gdb.Progspace object, otherwise, return false. */
855
856extern bool gdbpy_is_progspace (PyObject *obj);
857
858/* Take DOC, the documentation string for a GDB command defined in Python,
859 and return an (possibly) modified version of that same string.
860
861 When a command is defined in Python, the documentation string will
862 usually be indented based on the indentation of the surrounding Python
863 code. However, the documentation string is a literal string, all the
864 white-space added for indentation is included within the documentation
865 string.
866
867 This indentation is then included in the help text that GDB displays,
868 which looks odd out of the context of the original Python source code.
869
870 This function analyses DOC and tries to figure out what white-space
871 within DOC was added as part of the indentation, and then removes that
872 white-space from the copy that is returned.
873
874 If the analysis of DOC fails then DOC will be returned unmodified. */
875
876extern gdb::unique_xmalloc_ptr<char> gdbpy_fix_doc_string_indentation
877 (gdb::unique_xmalloc_ptr<char> doc);
878
879/* Implement the 'print_insn' hook for Python. Disassemble an instruction
880 whose address is ADDRESS for architecture GDBARCH. The bytes of the
881 instruction should be read with INFO->read_memory_func as the
882 instruction being disassembled might actually be in a buffer.
883
884 Used INFO->fprintf_func to print the results of the disassembly, and
885 return the length of the instruction in octets.
886
887 If no instruction can be disassembled then return an empty value. */
888
889extern gdb::optional<int> gdbpy_print_insn (struct gdbarch *gdbarch,
890 CORE_ADDR address,
891 disassemble_info *info);
892
893#endif /* PYTHON_PYTHON_INTERNAL_H */
const char *const name
DISABLE_COPY_AND_ASSIGN(gdbpy_allow_threads)
PyThreadState * m_save
gdbpy_enter_varobj(const struct varobj *var)
static struct gdbarch * python_gdbarch
PyGILState_STATE m_state
const struct language_defn * m_language
gdb::optional< gdbpy_err_fetch > m_error
static struct gdbarch * get_gdbarch()
gdbpy_enter(struct gdbarch *gdbarch=nullptr, const struct language_defn *language=nullptr)
static void finalize()
struct gdbarch * m_gdbarch
struct active_ext_lang_state * m_previous_active
DISABLE_COPY_AND_ASSIGN(gdbpy_enter)
bool type_matches(PyObject *type) const
gdbpy_ref m_error_traceback
language
Definition defs.h:211
ext_lang_rc
Definition extension.h:165
ext_lang_bt_status
Definition extension.h:71
ext_lang_frame_args
Definition extension.h:114
ext_lang_bp_stop
Definition extension.h:138
static void ATTRIBUTE_PRINTF(1, 0)
Definition gdb_bfd.c:1150
mach_port_t kern_return_t mach_port_t mach_msg_type_name_t msgportsPoly 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:1862
Definition aarch64.h:50
PyTypeObject block_object_type
Definition py-block.c:479
PyTypeObject breakpoint_object_type
PyTypeObject event_object_type
Definition py-event.c:124
PyTypeObject frame_object_type
Definition py-frame.c:799
PyTypeObject thread_object_type
gdb::ref_ptr< T, gdbpy_ref_policy< T > > gdbpy_ref
Definition py-ref.h:43
PyTypeObject symbol_object_type
Definition py-symbol.c:725
PyTypeObject value_object_type
Definition py-value.c:2171
PyObject * gdbpy_buffer_to_membuf(gdb::unique_xmalloc_ptr< gdb_byte > buffer, CORE_ADDR address, ULONGEST length)
Definition py-membuf.c:44
enum ext_lang_bp_stop gdbpy_breakpoint_cond_says_stop(const struct extension_language_defn *, struct breakpoint *)
void gdbpy_print_stack(void)
bool gdbpy_is_progspace(PyObject *obj)
void gdbpy_ref python_string_to_unicode(PyObject *obj)
Definition py-utils.c:37
PyObject * gdbpy_new_register_descriptor_iterator(struct gdbarch *gdbarch, const char *group_name)
int gdbpy_initialize_functions(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyMODINIT_FUNC gdbpy_events_mod_func()
Definition py-evts.c:56
struct value * convert_value_from_python(PyObject *obj)
Definition py-value.c:1838
PyObject * gdbpy_all_architecture_names(PyObject *self, PyObject *args)
Definition py-arch.c:326
struct symbol * symbol_object_to_symbol(PyObject *obj)
Definition py-symbol.c:354
bool gdbpy_breakpoint_init_breakpoint_type()
gdbpy_ref host_string_to_python_string(const char *str)
Definition py-utils.c:153
PyObject * symtab_to_linetable_object(PyObject *symtab)
PyObject * block_to_block_object(const struct block *block, struct objfile *objfile)
Definition py-block.c:329
#define GDB_PYSYS_SETPATH_CHAR
PyObject * objfpy_get_xmethods(PyObject *, void *)
Definition py-objfile.c:383
PyObject * pspy_get_printers(PyObject *, void *)
void gdbpy_convert_exception(const struct gdb_exception &) CPYCHECKER_SETS_EXCEPTION
Definition py-utils.c:216
gdb::unique_xmalloc_ptr< char > gdbpy_fix_doc_string_indentation(gdb::unique_xmalloc_ptr< char > doc)
Definition py-utils.c:407
#define PyObject_CallMethod
int gdbpy_breakpoint_has_cond(const struct extension_language_defn *, struct breakpoint *b)
int gdbpy_initialize_breakpoints(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
struct symtab * symtab_object_to_symtab(PyObject *obj)
Definition py-symtab.c:505
gdbpy_ref< inferior_object > inferior_to_inferior_object(inferior *inf)
void gdbpy_handle_exception() ATTRIBUTE_NORETURN
Definition py-utils.c:366
int gdbpy_print_python_errors_p(void)
gdb::unique_xmalloc_ptr< char > python_string_to_target_string(PyObject *obj)
Definition py-utils.c:113
int gdbpy_initialize_blocks(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-block.c:428
gdbpy_ref apply_varobj_pretty_printer(PyObject *print_obj, struct value **replacement, struct ui_file *stream, const value_print_options *opts)
PyObject * symbol_to_symbol_object(struct symbol *sym)
Definition py-symbol.c:341
void gdbpy_initialize_gdb_readline(void)
enum ext_lang_rc gdbpy_get_matching_xmethod_workers(const struct extension_language_defn *extlang, struct type *obj_type, const char *method_name, std::vector< xmethod_worker_up > *dm_vec)
std::unique_ptr< Py_buffer, Py_buffer_deleter > Py_buffer_up
int gdbpy_is_value_object(PyObject *obj)
Definition py-value.c:2057
PyObject * gdbpy_lookup_static_symbol(PyObject *self, PyObject *args, PyObject *kw)
Definition py-symbol.c:494
int gdbpy_initialize_unwind(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-unwind.c:702
int gdbpy_initialize_disasm() CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-disasm.c:1022
int gdbpy_initialize_types(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-type.c:1446
PyObject * gdb_module
struct symtab_and_line * sal_object_to_symtab_and_line(PyObject *obj)
Definition py-symtab.c:496
int gdb_python_initialized
PyObject * gdbpy_stop_recording(PyObject *self, PyObject *args)
Definition py-record.c:638
int gdbpy_initialize_micommands(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-micmd.c:599
PyObject * gdbpy_lookup_global_symbol(PyObject *self, PyObject *args, PyObject *kw)
Definition py-symbol.c:454
gdbpy_ref gdb_py_object_from_longest(LONGEST l)
Definition py-utils.c:279
PyObject * gdbpy_register_tui_window(PyObject *self, PyObject *args, PyObject *kw)
frame_info_ptr frame_object_to_frame_info(PyObject *frame_obj)
Definition py-frame.c:61
std::unique_ptr< varobj_iter > py_varobj_get_iterator(struct varobj *var, PyObject *printer, const value_print_options *opts)
Definition py-varobj.c:147
PyObject * gdbpy_lookup_objfile(PyObject *self, PyObject *args, PyObject *kw)
Definition py-objfile.c:591
PyObject * pspy_get_xmethods(PyObject *, void *)
gdbpy_ref objfile_to_objfile_object(struct objfile *)
Definition py-objfile.c:686
void bpfinishpy_post_stop_hook(struct gdbpy_breakpoint_object *bp_obj)
PyObject * symtab_to_symtab_object(struct symtab *symtab)
Definition py-symtab.c:467
gdb::unique_xmalloc_ptr< char > gdbpy_parse_command_name(const char *name, struct cmd_list_element ***base_list, struct cmd_list_element **start_list)
Definition py-cmd.c:347
int gdbpy_initialize_objfile(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-objfile.c:708
PyObject * symtab_and_line_to_sal_object(struct symtab_and_line sal)
Definition py-symtab.c:481
long gdb_py_longest
struct cmd_list_element * show_python_list
#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
struct value * value_object_to_value(PyObject *self)
Definition py-value.c:1823
#define PySys_SetPath
PyObject * gdbpy_children_cst
int gdbpy_initialize_registers() CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyObject * frame_info_to_frame_object(frame_info_ptr frame)
Definition py-frame.c:346
void gdbpy_extract_lazy_string(PyObject *string, CORE_ADDR *addr, struct type **str_type, long *length, gdb::unique_xmalloc_ptr< char > *encoding)
gdbpy_iter_kind
@ iter_values
@ iter_items
@ iter_keys
void gdbpy_print_stack_or_quit()
int gdbpy_is_lazy_string(PyObject *result)
PyObject * gdbpy_add_history(PyObject *self, PyObject *args)
Definition py-value.c:1947
int gdbpy_initialize_finishbreakpoints(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
int gdbpy_initialize_instruction(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyObject * gdbpy_create_lazy_string_object(CORE_ADDR address, long length, const char *encoding, struct type *type)
gdb::unique_xmalloc_ptr< char > gdbpy_get_display_hint(PyObject *printer)
PyObject * gdbpy_string_to_argv(PyObject *self, PyObject *args)
Definition py-cmd.c:665
PyObject * gdbpy_selected_inferior(PyObject *self, PyObject *args)
int gdbpy_initialize_xmethods(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
#define CPYCHECKER_SETS_EXCEPTION
int gdbpy_initialize_event(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-event.c:58
int gdbpy_initialize_record(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-record.c:548
PyObject * gdbpy_default_visualizer(PyObject *self, PyObject *args)
int gdbpy_initialize_auto_load(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
bool gdbpy_is_architecture(PyObject *obj)
Definition py-arch.c:80
PyObject * gdbpy_selected_frame(PyObject *self, PyObject *args)
Definition py-frame.c:645
gdb::unique_xmalloc_ptr< char > gdbpy_obj_to_string(PyObject *obj)
Definition py-utils.c:172
PyObject * gdbpy_history_count(PyObject *self, PyObject *args)
Definition py-value.c:1974
PyObject * gdbpy_gdb_memory_error
PyObject * gdbpy_display_hint_cst
int gdbpy_initialize_pspace(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
unsigned long gdb_py_ulongest
long Py_hash_t
PyObject * gdbpy_parameter_value(const setting &var)
PyObject * gdbpy_create_ptid_object(ptid_t ptid)
PyObject * gdbpy_start_recording(PyObject *self, PyObject *args)
Definition py-record.c:596
PyObject * gdbpy_selected_thread(PyObject *self, PyObject *args)
PyObject * gdbpy_new_reggroup_iterator(struct gdbarch *gdbarch)
PyObject * objfpy_get_frame_filters(PyObject *, void *)
Definition py-objfile.c:293
struct gdbarch * arch_object_to_gdbarch(PyObject *obj)
Definition py-arch.c:69
PyObject * gdbpy_lookup_symbol(PyObject *self, PyObject *args, PyObject *kw)
Definition py-symbol.c:385
gdb::unique_xmalloc_ptr< char > python_string_to_host_string(PyObject *obj)
Definition py-utils.c:141
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-utils.c:331
void gdbpy_error(const char *fmt,...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF(1
gdbpy_ref target_to_connection_object(process_stratum_target *target)
PyObject * gdbpy_newest_frame(PyObject *self, PyObject *args)
Definition py-frame.c:625
#define PySys_GetObject
PyObject * gdbpy_history(PyObject *self, PyObject *args)
Definition py-value.c:1924
PyObject * objfpy_get_frame_unwinders(PyObject *, void *)
Definition py-objfile.c:332
PyObject * gdbpy_set_convenience_variable(PyObject *self, PyObject *args)
Definition py-value.c:2013
int gdbpy_initialize_parameters(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-param.c:836
PyObject * gdbpy_gdb_error
PyObject * value_to_value_object_no_release(struct value *v)
Definition py-value.c:1800
PyObject * gdbpy_current_recording(PyObject *self, PyObject *args)
Definition py-record.c:621
int gdbpy_initialize_symbols(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-symbol.c:615
int gdbpy_initialize_thread(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
gdbpy_breakpoint_object * bppy_pending_object
int gdb_py_int_as_long(PyObject *, long *)
Definition py-utils.c:301
void gdbpy_preserve_values(const struct extension_language_defn *, struct objfile *objfile, htab_t copied_types)
Definition py-value.c:225
enum ext_lang_rc gdbpy_apply_val_pretty_printer(const struct extension_language_defn *, struct value *value, struct ui_file *stream, int recurse, const struct value_print_options *options, const struct language_defn *language)
PyObject * value_to_value_object(struct value *v)
Definition py-value.c:1778
gdbpy_ref pspace_to_pspace_object(struct program_space *)
int gdbpy_initialize_linetable(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyObject * gdbpy_enabled_cst
PyObject * pspy_get_frame_unwinders(PyObject *, void *)
int gdbpy_initialize_arch(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-arch.c:348
PyObject * gdbpy_lookup_static_symbols(PyObject *self, PyObject *args, PyObject *kw)
Definition py-symbol.c:559
PyObject * gdbpy_doc_cst
bool gdbpy_parse_register_id(struct gdbarch *gdbarch, PyObject *pyo_reg_id, int *reg_num)
PyObject * gdbpy_frame_stop_reason_string(PyObject *, PyObject *)
Definition py-frame.c:665
enum ext_lang_bt_status gdbpy_apply_frame_filter(const struct extension_language_defn *, frame_info_ptr frame, frame_filter_flags flags, enum ext_lang_frame_args args_type, struct ui_out *out, int frame_low, int frame_high)
gdbpy_ref thread_to_thread_object(thread_info *thr)
int gdbpy_initialize_membuf() CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-membuf.c:103
const struct block * block_object_to_block(PyObject *obj)
Definition py-block.c:342
PyObject * gdbpy_print_options(PyObject *self, PyObject *args)
int gdbpy_initialize_symtabs(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-symtab.c:513
gdbpy_ref gdbpy_get_varobj_pretty_printer(struct value *value)
int gdbpy_initialize_frames(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-frame.c:717
PyObject * pspy_get_frame_filters(PyObject *, void *)
int gdbpy_initialize_inferior(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyObject * gdbpy_to_string_cst
int gdbpy_is_field(PyObject *obj)
Definition py-type.c:126
PyObject * objfpy_get_printers(PyObject *, void *)
Definition py-objfile.c:255
int gdbpy_initialize_connection() CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
const struct value_print_options * gdbpy_current_print_options
gdbpy_ref python_string_to_target_python_string(PyObject *obj)
Definition py-utils.c:128
PyObject * gdb_python_module
int gdbpy_initialize_eventregistry(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyObject * gdbpy_inferiors(PyObject *unused, PyObject *unused2)
struct program_space * progspace_object_to_program_space(PyObject *obj)
PyObject * gdb_py_generic_dict(PyObject *self, void *closure)
Definition py-utils.c:314
int get_addr_from_python(PyObject *obj, CORE_ADDR *addr) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-utils.c:236
PyObject * gdbarch_to_arch_object(struct gdbarch *gdbarch)
Definition py-arch.c:90
PyObject * gdbpy_value_cst
gdb::optional< int > gdbpy_print_insn(struct gdbarch *gdbarch, CORE_ADDR address, disassemble_info *info)
Definition py-disasm.c:755
int gdbpy_is_string(PyObject *obj)
Definition py-utils.c:163
PyObject * gdbpy_convenience_variable(PyObject *self, PyObject *args)
Definition py-value.c:1981
static PyObject * gdb_PySys_GetObject(const char *name)
int gdbpy_initialize_values(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-value.c:2063
#define PyErr_NewException
PyObject * type_to_type_object(struct type *)
Definition py-type.c:1381
int gdbpy_initialize_commands(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-cmd.c:555
gdbpy_ref< thread_object > create_thread_object(struct thread_info *tp)
struct type * type_object_to_type(PyObject *obj)
Definition py-type.c:1404
bool gdbpy_auto_load_enabled(const struct extension_language_defn *)
void bpfinishpy_pre_stop_hook(struct gdbpy_breakpoint_object *bp_obj)
int gdbpy_initialize_tui() CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition py-tui.c:565
static PyObject * gdb_PyObject_CallMethod(PyObject *o, const char *method, const char *format, Args... args)
PyObject * gdbpy_lookup_type(PyObject *self, PyObject *args, PyObject *kw)
Definition py-type.c:1415
int gdbpy_initialize_btrace(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
PyObject * gdbpy_gdberror_exc
int gdbpy_initialize_lazy_string(void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
static void gdb_PySys_SetPath(const GDB_PYSYS_SETPATH_CHAR *path)
int gdbpy_initialize_breakpoint_locations() CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
gdbpy_ref gdb_py_object_from_ulongest(ULONGEST l)
Definition py-utils.c:290
static PyObject * gdb_PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
struct cmd_list_element * set_python_list
static int gdb_PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, const char **keywords,...)
gdb::unique_xmalloc_ptr< char > unicode_to_target_string(PyObject *unicode_str)
Definition py-utils.c:90
void gdbpy_finalize_micommands()
Definition py-micmd.c:618
PyObject * gdbpy_connections(PyObject *self, PyObject *args)
PyObject * gdbpy_breakpoints(PyObject *, PyObject *)
void gdbpy_get_print_options(value_print_options *opts)
static struct type * error_type(const char **, struct objfile *)
Definition stabsread.c:1444
Definition block.h:109
gdb::optional< setting > var
Definition cli-decode.h:236
constexpr gdb_PyGetSetDef(std::nullptr_t)
constexpr gdb_PyGetSetDef(const char *name_, getter get_, setter set_, const char *doc_, void *closure_)
constexpr gdb_PyGetSetDef(const char *name_, getter get_, setter set_, const char *doc_)
struct breakpoint * bp
PyObject_HEAD int number
Definition gnu-nat.c:154
PyObject_HEAD struct thread_info * thread
PyObject * inf_obj
Definition value.c:181
std::string type_to_string(struct type *type)
Definition typeprint.c:402
int PyObject
Definition varobj.c:41