]> Git Repo - binutils.git/blob - gdb/python/python.c
gdb: remove SYMTAB_COMPUNIT macro, add getter/setter
[binutils.git] / gdb / python / python.c
1 /* General python/gdb code
2
3    Copyright (C) 2008-2022 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 #include "defs.h"
21 #include "arch-utils.h"
22 #include "command.h"
23 #include "ui-out.h"
24 #include "cli/cli-script.h"
25 #include "gdbcmd.h"
26 #include "progspace.h"
27 #include "objfiles.h"
28 #include "value.h"
29 #include "language.h"
30 #include "gdbsupport/event-loop.h"
31 #include "readline/tilde.h"
32 #include "python.h"
33 #include "extension-priv.h"
34 #include "cli/cli-utils.h"
35 #include <ctype.h>
36 #include "location.h"
37 #include "run-on-main-thread.h"
38 #include "gdbsupport/selftest.h"
39 #include "observable.h"
40
41 /* Declared constants and enum for python stack printing.  */
42 static const char python_excp_none[] = "none";
43 static const char python_excp_full[] = "full";
44 static const char python_excp_message[] = "message";
45
46 /* "set python print-stack" choices.  */
47 static const char *const python_excp_enums[] =
48   {
49     python_excp_none,
50     python_excp_full,
51     python_excp_message,
52     NULL
53   };
54
55 /* The exception printing variable.  'full' if we want to print the
56    error message and stack, 'none' if we want to print nothing, and
57    'message' if we only want to print the error message.  'message' is
58    the default.  */
59 static const char *gdbpy_should_print_stack = python_excp_message;
60
61 \f
62 #ifdef HAVE_PYTHON
63
64 #include "cli/cli-decode.h"
65 #include "charset.h"
66 #include "top.h"
67 #include "python-internal.h"
68 #include "linespec.h"
69 #include "source.h"
70 #include "gdbsupport/version.h"
71 #include "target.h"
72 #include "gdbthread.h"
73 #include "interps.h"
74 #include "event-top.h"
75 #include "py-event.h"
76
77 /* True if Python has been successfully initialized, false
78    otherwise.  */
79
80 int gdb_python_initialized;
81
82 extern PyMethodDef python_GdbMethods[];
83
84 PyObject *gdb_module;
85 PyObject *gdb_python_module;
86
87 /* Some string constants we may wish to use.  */
88 PyObject *gdbpy_to_string_cst;
89 PyObject *gdbpy_children_cst;
90 PyObject *gdbpy_display_hint_cst;
91 PyObject *gdbpy_doc_cst;
92 PyObject *gdbpy_enabled_cst;
93 PyObject *gdbpy_value_cst;
94
95 /* The GdbError exception.  */
96 PyObject *gdbpy_gdberror_exc;
97
98 /* The `gdb.error' base class.  */
99 PyObject *gdbpy_gdb_error;
100
101 /* The `gdb.MemoryError' exception.  */
102 PyObject *gdbpy_gdb_memory_error;
103
104 static script_sourcer_func gdbpy_source_script;
105 static objfile_script_sourcer_func gdbpy_source_objfile_script;
106 static objfile_script_executor_func gdbpy_execute_objfile_script;
107 static void gdbpy_initialize (const struct extension_language_defn *);
108 static int gdbpy_initialized (const struct extension_language_defn *);
109 static void gdbpy_eval_from_control_command
110   (const struct extension_language_defn *, struct command_line *cmd);
111 static void gdbpy_start_type_printers (const struct extension_language_defn *,
112                                        struct ext_lang_type_printers *);
113 static enum ext_lang_rc gdbpy_apply_type_printers
114   (const struct extension_language_defn *,
115    const struct ext_lang_type_printers *, struct type *, char **);
116 static void gdbpy_free_type_printers (const struct extension_language_defn *,
117                                       struct ext_lang_type_printers *);
118 static void gdbpy_set_quit_flag (const struct extension_language_defn *);
119 static int gdbpy_check_quit_flag (const struct extension_language_defn *);
120 static enum ext_lang_rc gdbpy_before_prompt_hook
121   (const struct extension_language_defn *, const char *current_gdb_prompt);
122 static gdb::optional<std::string> gdbpy_colorize
123   (const std::string &filename, const std::string &contents);
124
125 /* The interface between gdb proper and loading of python scripts.  */
126
127 static const struct extension_language_script_ops python_extension_script_ops =
128 {
129   gdbpy_source_script,
130   gdbpy_source_objfile_script,
131   gdbpy_execute_objfile_script,
132   gdbpy_auto_load_enabled
133 };
134
135 /* The interface between gdb proper and python extensions.  */
136
137 static const struct extension_language_ops python_extension_ops =
138 {
139   gdbpy_initialize,
140   gdbpy_initialized,
141
142   gdbpy_eval_from_control_command,
143
144   gdbpy_start_type_printers,
145   gdbpy_apply_type_printers,
146   gdbpy_free_type_printers,
147
148   gdbpy_apply_val_pretty_printer,
149
150   gdbpy_apply_frame_filter,
151
152   gdbpy_preserve_values,
153
154   gdbpy_breakpoint_has_cond,
155   gdbpy_breakpoint_cond_says_stop,
156
157   gdbpy_set_quit_flag,
158   gdbpy_check_quit_flag,
159
160   gdbpy_before_prompt_hook,
161
162   gdbpy_get_matching_xmethod_workers,
163
164   gdbpy_colorize,
165 };
166
167 #endif /* HAVE_PYTHON */
168
169 /* The main struct describing GDB's interface to the Python
170    extension language.  */
171 const struct extension_language_defn extension_language_python =
172 {
173   EXT_LANG_PYTHON,
174   "python",
175   "Python",
176
177   ".py",
178   "-gdb.py",
179
180   python_control,
181
182 #ifdef HAVE_PYTHON
183   &python_extension_script_ops,
184   &python_extension_ops
185 #else
186   NULL,
187   NULL
188 #endif
189 };
190
191 #ifdef HAVE_PYTHON
192
193 /* Architecture and language to be used in callbacks from
194    the Python interpreter.  */
195 struct gdbarch *gdbpy_enter::python_gdbarch;
196
197 gdbpy_enter::gdbpy_enter  (struct gdbarch *gdbarch,
198                            const struct language_defn *language)
199 : m_gdbarch (python_gdbarch),
200   m_language (language == nullptr ? nullptr : current_language)
201 {
202   /* We should not ever enter Python unless initialized.  */
203   if (!gdb_python_initialized)
204     error (_("Python not initialized"));
205
206   m_previous_active = set_active_ext_lang (&extension_language_python);
207
208   m_state = PyGILState_Ensure ();
209
210   python_gdbarch = gdbarch;
211   if (language != nullptr)
212     set_language (language->la_language);
213
214   /* Save it and ensure ! PyErr_Occurred () afterwards.  */
215   m_error.emplace ();
216 }
217
218 gdbpy_enter::~gdbpy_enter ()
219 {
220   /* Leftover Python error is forbidden by Python Exception Handling.  */
221   if (PyErr_Occurred ())
222     {
223       /* This order is similar to the one calling error afterwards. */
224       gdbpy_print_stack ();
225       warning (_("internal error: Unhandled Python exception"));
226     }
227
228   m_error->restore ();
229
230   python_gdbarch = m_gdbarch;
231   if (m_language != nullptr)
232     set_language (m_language->la_language);
233
234   restore_active_ext_lang (m_previous_active);
235   PyGILState_Release (m_state);
236 }
237
238 struct gdbarch *
239 gdbpy_enter::get_gdbarch ()
240 {
241   if (python_gdbarch != nullptr)
242     return python_gdbarch;
243   return get_current_arch ();
244 }
245
246 void
247 gdbpy_enter::finalize ()
248 {
249   python_gdbarch = target_gdbarch ();
250 }
251
252 /* A helper class to save and restore the GIL, but without touching
253    the other globals that are handled by gdbpy_enter.  */
254
255 class gdbpy_gil
256 {
257 public:
258
259   gdbpy_gil ()
260     : m_state (PyGILState_Ensure ())
261   {
262   }
263
264   ~gdbpy_gil ()
265   {
266     PyGILState_Release (m_state);
267   }
268
269   DISABLE_COPY_AND_ASSIGN (gdbpy_gil);
270
271 private:
272
273   PyGILState_STATE m_state;
274 };
275
276 /* Set the quit flag.  */
277
278 static void
279 gdbpy_set_quit_flag (const struct extension_language_defn *extlang)
280 {
281   PyErr_SetInterrupt ();
282 }
283
284 /* Return true if the quit flag has been set, false otherwise.  */
285
286 static int
287 gdbpy_check_quit_flag (const struct extension_language_defn *extlang)
288 {
289   if (!gdb_python_initialized)
290     return 0;
291
292   gdbpy_gil gil;
293   return PyOS_InterruptOccurred ();
294 }
295
296 /* Evaluate a Python command like PyRun_SimpleString, but uses
297    Py_single_input which prints the result of expressions, and does
298    not automatically print the stack on errors.  */
299
300 static int
301 eval_python_command (const char *command)
302 {
303   PyObject *m, *d;
304
305   m = PyImport_AddModule ("__main__");
306   if (m == NULL)
307     return -1;
308
309   d = PyModule_GetDict (m);
310   if (d == NULL)
311     return -1;
312   gdbpy_ref<> v (PyRun_StringFlags (command, Py_single_input, d, d, NULL));
313   if (v == NULL)
314     return -1;
315
316 #ifndef IS_PY3K
317   if (Py_FlushLine ())
318     PyErr_Clear ();
319 #endif
320
321   return 0;
322 }
323
324 /* Implementation of the gdb "python-interactive" command.  */
325
326 static void
327 python_interactive_command (const char *arg, int from_tty)
328 {
329   struct ui *ui = current_ui;
330   int err;
331
332   scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
333
334   arg = skip_spaces (arg);
335
336   gdbpy_enter enter_py;
337
338   if (arg && *arg)
339     {
340       std::string script = std::string (arg) + "\n";
341       err = eval_python_command (script.c_str ());
342     }
343   else
344     {
345       err = PyRun_InteractiveLoop (ui->instream, "<stdin>");
346       dont_repeat ();
347     }
348
349   if (err)
350     {
351       gdbpy_print_stack ();
352       error (_("Error while executing Python code."));
353     }
354 }
355
356 /* A wrapper around PyRun_SimpleFile.  FILE is the Python script to run
357    named FILENAME.
358
359    On Windows hosts few users would build Python themselves (this is no
360    trivial task on this platform), and thus use binaries built by
361    someone else instead.  There may happen situation where the Python
362    library and GDB are using two different versions of the C runtime
363    library.  Python, being built with VC, would use one version of the
364    msvcr DLL (Eg. msvcr100.dll), while MinGW uses msvcrt.dll.
365    A FILE * from one runtime does not necessarily operate correctly in
366    the other runtime.
367
368    To work around this potential issue, we run code in Python to load
369    the script.  */
370
371 static void
372 python_run_simple_file (FILE *file, const char *filename)
373 {
374 #ifndef _WIN32
375
376   PyRun_SimpleFile (file, filename);
377
378 #else /* _WIN32 */
379
380   /* Because we have a string for a filename, and are using Python to
381      open the file, we need to expand any tilde in the path first.  */
382   gdb::unique_xmalloc_ptr<char> full_path (tilde_expand (filename));
383
384   if (gdb_python_module == nullptr
385       || ! PyObject_HasAttrString (gdb_python_module, "_execute_file"))
386     error (_("Installation error: gdb._execute_file function is missing"));
387
388   gdbpy_ref<> return_value
389     (PyObject_CallMethod (gdb_python_module, "_execute_file", "s",
390                           full_path.get ()));
391   if (return_value == nullptr)
392     {
393       /* Use PyErr_PrintEx instead of gdbpy_print_stack to better match the
394          behavior of the non-Windows codepath.  */
395       PyErr_PrintEx(0);
396     }
397
398 #endif /* _WIN32 */
399 }
400
401 /* Given a command_line, return a command string suitable for passing
402    to Python.  Lines in the string are separated by newlines.  */
403
404 static std::string
405 compute_python_string (struct command_line *l)
406 {
407   struct command_line *iter;
408   std::string script;
409
410   for (iter = l; iter; iter = iter->next)
411     {
412       script += iter->line;
413       script += '\n';
414     }
415   return script;
416 }
417
418 /* Take a command line structure representing a 'python' command, and
419    evaluate its body using the Python interpreter.  */
420
421 static void
422 gdbpy_eval_from_control_command (const struct extension_language_defn *extlang,
423                                  struct command_line *cmd)
424 {
425   int ret;
426
427   if (cmd->body_list_1 != nullptr)
428     error (_("Invalid \"python\" block structure."));
429
430   gdbpy_enter enter_py;
431
432   std::string script = compute_python_string (cmd->body_list_0.get ());
433   ret = PyRun_SimpleString (script.c_str ());
434   if (ret)
435     error (_("Error while executing Python code."));
436 }
437
438 /* Implementation of the gdb "python" command.  */
439
440 static void
441 python_command (const char *arg, int from_tty)
442 {
443   gdbpy_enter enter_py;
444
445   scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
446
447   arg = skip_spaces (arg);
448   if (arg && *arg)
449     {
450       if (PyRun_SimpleString (arg))
451         error (_("Error while executing Python code."));
452     }
453   else
454     {
455       counted_command_line l = get_command_line (python_control, "");
456
457       execute_control_command_untraced (l.get ());
458     }
459 }
460
461 \f
462
463 /* Transform a gdb parameters's value into a Python value.  May return
464    NULL (and set a Python exception) on error.  Helper function for
465    get_parameter.  */
466 PyObject *
467 gdbpy_parameter_value (const setting &var)
468 {
469   switch (var.type ())
470     {
471     case var_string:
472     case var_string_noescape:
473     case var_optional_filename:
474     case var_filename:
475     case var_enum:
476       {
477         const char *str;
478         if (var.type () == var_enum)
479           str = var.get<const char *> ();
480         else
481           str = var.get<std::string> ().c_str ();
482
483         return host_string_to_python_string (str).release ();
484       }
485
486     case var_boolean:
487       {
488         if (var.get<bool> ())
489           Py_RETURN_TRUE;
490         else
491           Py_RETURN_FALSE;
492       }
493
494     case var_auto_boolean:
495       {
496         enum auto_boolean ab = var.get<enum auto_boolean> ();
497
498         if (ab == AUTO_BOOLEAN_TRUE)
499           Py_RETURN_TRUE;
500         else if (ab == AUTO_BOOLEAN_FALSE)
501           Py_RETURN_FALSE;
502         else
503           Py_RETURN_NONE;
504       }
505
506     case var_integer:
507       if (var.get<int> () == INT_MAX)
508         Py_RETURN_NONE;
509       /* Fall through.  */
510     case var_zinteger:
511     case var_zuinteger_unlimited:
512       return gdb_py_object_from_longest (var.get<int> ()).release ();
513
514     case var_uinteger:
515       {
516         unsigned int val = var.get<unsigned int> ();
517
518         if (val == UINT_MAX)
519           Py_RETURN_NONE;
520         return gdb_py_object_from_ulongest (val).release ();
521       }
522
523     case var_zuinteger:
524       {
525         unsigned int val = var.get<unsigned int> ();
526         return gdb_py_object_from_ulongest (val).release ();
527       }
528     }
529
530   return PyErr_Format (PyExc_RuntimeError,
531                        _("Programmer error: unhandled type."));
532 }
533
534 /* A Python function which returns a gdb parameter's value as a Python
535    value.  */
536
537 static PyObject *
538 gdbpy_parameter (PyObject *self, PyObject *args)
539 {
540   struct cmd_list_element *alias, *prefix, *cmd;
541   const char *arg;
542   int found = -1;
543
544   if (! PyArg_ParseTuple (args, "s", &arg))
545     return NULL;
546
547   std::string newarg = std::string ("show ") + arg;
548
549   try
550     {
551       found = lookup_cmd_composition (newarg.c_str (), &alias, &prefix, &cmd);
552     }
553   catch (const gdb_exception &ex)
554     {
555       GDB_PY_HANDLE_EXCEPTION (ex);
556     }
557
558   if (!found)
559     return PyErr_Format (PyExc_RuntimeError,
560                          _("Could not find parameter `%s'."), arg);
561
562   if (!cmd->var.has_value ())
563     return PyErr_Format (PyExc_RuntimeError,
564                          _("`%s' is not a parameter."), arg);
565
566   return gdbpy_parameter_value (*cmd->var);
567 }
568
569 /* Wrapper for target_charset.  */
570
571 static PyObject *
572 gdbpy_target_charset (PyObject *self, PyObject *args)
573 {
574   const char *cset = target_charset (gdbpy_enter::get_gdbarch ());
575
576   return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
577 }
578
579 /* Wrapper for target_wide_charset.  */
580
581 static PyObject *
582 gdbpy_target_wide_charset (PyObject *self, PyObject *args)
583 {
584   const char *cset = target_wide_charset (gdbpy_enter::get_gdbarch ());
585
586   return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
587 }
588
589 /* Implement gdb.host_charset().  */
590
591 static PyObject *
592 gdbpy_host_charset (PyObject *self, PyObject *args)
593 {
594   const char *cset = host_charset ();
595
596   return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
597 }
598
599 /* A Python function which evaluates a string using the gdb CLI.  */
600
601 static PyObject *
602 execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
603 {
604   const char *arg;
605   PyObject *from_tty_obj = NULL, *to_string_obj = NULL;
606   int from_tty, to_string;
607   static const char *keywords[] = { "command", "from_tty", "to_string", NULL };
608
609   if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O!O!", keywords, &arg,
610                                         &PyBool_Type, &from_tty_obj,
611                                         &PyBool_Type, &to_string_obj))
612     return NULL;
613
614   from_tty = 0;
615   if (from_tty_obj)
616     {
617       int cmp = PyObject_IsTrue (from_tty_obj);
618       if (cmp < 0)
619         return NULL;
620       from_tty = cmp;
621     }
622
623   to_string = 0;
624   if (to_string_obj)
625     {
626       int cmp = PyObject_IsTrue (to_string_obj);
627       if (cmp < 0)
628         return NULL;
629       to_string = cmp;
630     }
631
632   std::string to_string_res;
633
634   scoped_restore preventer = prevent_dont_repeat ();
635
636   try
637     {
638       gdbpy_allow_threads allow_threads;
639
640       struct interp *interp;
641
642       std::string arg_copy = arg;
643       bool first = true;
644       char *save_ptr = nullptr;
645       auto reader
646         = [&] ()
647           {
648             const char *result = strtok_r (first ? &arg_copy[0] : nullptr,
649                                            "\n", &save_ptr);
650             first = false;
651             return result;
652           };
653
654       counted_command_line lines = read_command_lines_1 (reader, 1, nullptr);
655
656       {
657         scoped_restore save_async = make_scoped_restore (&current_ui->async,
658                                                          0);
659
660         scoped_restore save_uiout = make_scoped_restore (&current_uiout);
661
662         /* Use the console interpreter uiout to have the same print format
663            for console or MI.  */
664         interp = interp_lookup (current_ui, "console");
665         current_uiout = interp->interp_ui_out ();
666
667         if (to_string)
668           to_string_res = execute_control_commands_to_string (lines.get (),
669                                                               from_tty);
670         else
671           execute_control_commands (lines.get (), from_tty);
672       }
673
674       /* Do any commands attached to breakpoint we stopped at.  */
675       bpstat_do_actions ();
676     }
677   catch (const gdb_exception &except)
678     {
679       /* If an exception occurred then we won't hit normal_stop (), or have
680          an exception reach the top level of the event loop, which are the
681          two usual places in which stdin would be re-enabled. So, before we
682          convert the exception and continue back in Python, we should
683          re-enable stdin here.  */
684       async_enable_stdin ();
685       GDB_PY_HANDLE_EXCEPTION (except);
686     }
687
688   if (to_string)
689     return PyString_FromString (to_string_res.c_str ());
690   Py_RETURN_NONE;
691 }
692
693 /* Implementation of Python rbreak command.  Take a REGEX and
694    optionally a MINSYMS, THROTTLE and SYMTABS keyword and return a
695    Python list that contains newly set breakpoints that match that
696    criteria.  REGEX refers to a GDB format standard regex pattern of
697    symbols names to search; MINSYMS is an optional boolean (default
698    False) that indicates if the function should search GDB's minimal
699    symbols; THROTTLE is an optional integer (default unlimited) that
700    indicates the maximum amount of breakpoints allowable before the
701    function exits (note, if the throttle bound is passed, no
702    breakpoints will be set and a runtime error returned); SYMTABS is
703    an optional Python iterable that contains a set of gdb.Symtabs to
704    constrain the search within.  */
705
706 static PyObject *
707 gdbpy_rbreak (PyObject *self, PyObject *args, PyObject *kw)
708 {
709   char *regex = NULL;
710   std::vector<symbol_search> symbols;
711   unsigned long count = 0;
712   PyObject *symtab_list = NULL;
713   PyObject *minsyms_p_obj = NULL;
714   int minsyms_p = 0;
715   unsigned int throttle = 0;
716   static const char *keywords[] = {"regex","minsyms", "throttle",
717                                    "symtabs", NULL};
718
719   if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O!IO", keywords,
720                                         &regex, &PyBool_Type,
721                                         &minsyms_p_obj, &throttle,
722                                         &symtab_list))
723     return NULL;
724
725   /* Parse minsyms keyword.  */
726   if (minsyms_p_obj != NULL)
727     {
728       int cmp = PyObject_IsTrue (minsyms_p_obj);
729       if (cmp < 0)
730         return NULL;
731       minsyms_p = cmp;
732     }
733
734   global_symbol_searcher spec (FUNCTIONS_DOMAIN, regex);
735   SCOPE_EXIT {
736     for (const char *elem : spec.filenames)
737       xfree ((void *) elem);
738   };
739
740   /* The "symtabs" keyword is any Python iterable object that returns
741      a gdb.Symtab on each iteration.  If specified, iterate through
742      the provided gdb.Symtabs and extract their full path.  As
743      python_string_to_target_string returns a
744      gdb::unique_xmalloc_ptr<char> and a vector containing these types
745      cannot be coerced to a const char **p[] via the vector.data call,
746      release the value from the unique_xmalloc_ptr and place it in a
747      simple type symtab_list_type (which holds the vector and a
748      destructor that frees the contents of the allocated strings.  */
749   if (symtab_list != NULL)
750     {
751       gdbpy_ref<> iter (PyObject_GetIter (symtab_list));
752
753       if (iter == NULL)
754         return NULL;
755
756       while (true)
757         {
758           gdbpy_ref<> next (PyIter_Next (iter.get ()));
759
760           if (next == NULL)
761             {
762               if (PyErr_Occurred ())
763                 return NULL;
764               break;
765             }
766
767           gdbpy_ref<> obj_name (PyObject_GetAttrString (next.get (),
768                                                         "filename"));
769
770           if (obj_name == NULL)
771             return NULL;
772
773           /* Is the object file still valid?  */
774           if (obj_name == Py_None)
775             continue;
776
777           gdb::unique_xmalloc_ptr<char> filename =
778             python_string_to_target_string (obj_name.get ());
779
780           if (filename == NULL)
781             return NULL;
782
783           /* Make sure there is a definite place to store the value of
784              filename before it is released.  */
785           spec.filenames.push_back (nullptr);
786           spec.filenames.back () = filename.release ();
787         }
788     }
789
790   /* The search spec.  */
791   symbols = spec.search ();
792
793   /* Count the number of symbols (both symbols and optionally minimal
794      symbols) so we can correctly check the throttle limit.  */
795   for (const symbol_search &p : symbols)
796     {
797       /* Minimal symbols included?  */
798       if (minsyms_p)
799         {
800           if (p.msymbol.minsym != NULL)
801             count++;
802         }
803
804       if (p.symbol != NULL)
805         count++;
806     }
807
808   /* Check throttle bounds and exit if in excess.  */
809   if (throttle != 0 && count > throttle)
810     {
811       PyErr_SetString (PyExc_RuntimeError,
812                        _("Number of breakpoints exceeds throttled maximum."));
813       return NULL;
814     }
815
816   gdbpy_ref<> return_list (PyList_New (0));
817
818   if (return_list == NULL)
819     return NULL;
820
821   /* Construct full path names for symbols and call the Python
822      breakpoint constructor on the resulting names.  Be tolerant of
823      individual breakpoint failures.  */
824   for (const symbol_search &p : symbols)
825     {
826       std::string symbol_name;
827
828       /* Skipping minimal symbols?  */
829       if (minsyms_p == 0)
830         if (p.msymbol.minsym != NULL)
831           continue;
832
833       if (p.msymbol.minsym == NULL)
834         {
835           struct symtab *symtab = symbol_symtab (p.symbol);
836           const char *fullname = symtab_to_fullname (symtab);
837
838           symbol_name = fullname;
839           symbol_name  += ":";
840           symbol_name  += p.symbol->linkage_name ();
841         }
842       else
843         symbol_name = p.msymbol.minsym->linkage_name ();
844
845       gdbpy_ref<> argList (Py_BuildValue("(s)", symbol_name.c_str ()));
846       gdbpy_ref<> obj (PyObject_CallObject ((PyObject *)
847                                             &breakpoint_object_type,
848                                             argList.get ()));
849
850       /* Tolerate individual breakpoint failures.  */
851       if (obj == NULL)
852         gdbpy_print_stack ();
853       else
854         {
855           if (PyList_Append (return_list.get (), obj.get ()) == -1)
856             return NULL;
857         }
858     }
859   return return_list.release ();
860 }
861
862 /* A Python function which is a wrapper for decode_line_1.  */
863
864 static PyObject *
865 gdbpy_decode_line (PyObject *self, PyObject *args)
866 {
867   const char *arg = NULL;
868   gdbpy_ref<> result;
869   gdbpy_ref<> unparsed;
870   event_location_up location;
871
872   if (! PyArg_ParseTuple (args, "|s", &arg))
873     return NULL;
874
875   /* Treat a string consisting of just whitespace the same as
876      NULL.  */
877   if (arg != NULL)
878     {
879       arg = skip_spaces (arg);
880       if (*arg == '\0')
881         arg = NULL;
882     }
883
884   if (arg != NULL)
885     location = string_to_event_location_basic (&arg, current_language,
886                                                symbol_name_match_type::WILD);
887
888   std::vector<symtab_and_line> decoded_sals;
889   symtab_and_line def_sal;
890   gdb::array_view<symtab_and_line> sals;
891   try
892     {
893       if (location != NULL)
894         {
895           decoded_sals = decode_line_1 (location.get (), 0, NULL, NULL, 0);
896           sals = decoded_sals;
897         }
898       else
899         {
900           set_default_source_symtab_and_line ();
901           def_sal = get_current_source_symtab_and_line ();
902           sals = def_sal;
903         }
904     }
905   catch (const gdb_exception &ex)
906     {
907       /* We know this will always throw.  */
908       gdbpy_convert_exception (ex);
909       return NULL;
910     }
911
912   if (!sals.empty ())
913     {
914       result.reset (PyTuple_New (sals.size ()));
915       if (result == NULL)
916         return NULL;
917       for (size_t i = 0; i < sals.size (); ++i)
918         {
919           PyObject *obj = symtab_and_line_to_sal_object (sals[i]);
920           if (obj == NULL)
921             return NULL;
922
923           PyTuple_SetItem (result.get (), i, obj);
924         }
925     }
926   else
927     result = gdbpy_ref<>::new_reference (Py_None);
928
929   gdbpy_ref<> return_result (PyTuple_New (2));
930   if (return_result == NULL)
931     return NULL;
932
933   if (arg != NULL && strlen (arg) > 0)
934     {
935       unparsed.reset (PyString_FromString (arg));
936       if (unparsed == NULL)
937         return NULL;
938     }
939   else
940     unparsed = gdbpy_ref<>::new_reference (Py_None);
941
942   PyTuple_SetItem (return_result.get (), 0, unparsed.release ());
943   PyTuple_SetItem (return_result.get (), 1, result.release ());
944
945   return return_result.release ();
946 }
947
948 /* Parse a string and evaluate it as an expression.  */
949 static PyObject *
950 gdbpy_parse_and_eval (PyObject *self, PyObject *args)
951 {
952   const char *expr_str;
953   struct value *result = NULL;
954
955   if (!PyArg_ParseTuple (args, "s", &expr_str))
956     return NULL;
957
958   try
959     {
960       gdbpy_allow_threads allow_threads;
961       result = parse_and_eval (expr_str);
962     }
963   catch (const gdb_exception &except)
964     {
965       GDB_PY_HANDLE_EXCEPTION (except);
966     }
967
968   return value_to_value_object (result);
969 }
970
971 /* Implementation of gdb.invalidate_cached_frames.  */
972
973 static PyObject *
974 gdbpy_invalidate_cached_frames (PyObject *self, PyObject *args)
975 {
976   reinit_frame_cache ();
977   Py_RETURN_NONE;
978 }
979
980 /* Read a file as Python code.
981    This is the extension_language_script_ops.script_sourcer "method".
982    FILE is the file to load.  FILENAME is name of the file FILE.
983    This does not throw any errors.  If an exception occurs python will print
984    the traceback and clear the error indicator.  */
985
986 static void
987 gdbpy_source_script (const struct extension_language_defn *extlang,
988                      FILE *file, const char *filename)
989 {
990   gdbpy_enter enter_py;
991   python_run_simple_file (file, filename);
992 }
993
994 \f
995
996 /* Posting and handling events.  */
997
998 /* A single event.  */
999 struct gdbpy_event
1000 {
1001   gdbpy_event (gdbpy_ref<> &&func)
1002     : m_func (func.release ())
1003   {
1004   }
1005
1006   gdbpy_event (gdbpy_event &&other) noexcept
1007     : m_func (other.m_func)
1008   {
1009     other.m_func = nullptr;
1010   }
1011
1012   gdbpy_event (const gdbpy_event &other)
1013     : m_func (other.m_func)
1014   {
1015     gdbpy_gil gil;
1016     Py_XINCREF (m_func);
1017   }
1018
1019   ~gdbpy_event ()
1020   {
1021     gdbpy_gil gil;
1022     Py_XDECREF (m_func);
1023   }
1024
1025   gdbpy_event &operator= (const gdbpy_event &other) = delete;
1026
1027   void operator() ()
1028   {
1029     gdbpy_enter enter_py;
1030
1031     gdbpy_ref<> call_result (PyObject_CallObject (m_func, NULL));
1032     if (call_result == NULL)
1033       gdbpy_print_stack ();
1034   }
1035
1036 private:
1037
1038   /* The Python event.  This is just a callable object.  Note that
1039      this is not a gdbpy_ref<>, because we have to take particular
1040      care to only destroy the reference when holding the GIL. */
1041   PyObject *m_func;
1042 };
1043
1044 /* Submit an event to the gdb thread.  */
1045 static PyObject *
1046 gdbpy_post_event (PyObject *self, PyObject *args)
1047 {
1048   PyObject *func;
1049
1050   if (!PyArg_ParseTuple (args, "O", &func))
1051     return NULL;
1052
1053   if (!PyCallable_Check (func))
1054     {
1055       PyErr_SetString (PyExc_RuntimeError,
1056                        _("Posted event is not callable"));
1057       return NULL;
1058     }
1059
1060   gdbpy_ref<> func_ref = gdbpy_ref<>::new_reference (func);
1061   gdbpy_event event (std::move (func_ref));
1062   run_on_main_thread (event);
1063
1064   Py_RETURN_NONE;
1065 }
1066
1067 \f
1068
1069 /* This is the extension_language_ops.before_prompt "method".  */
1070
1071 static enum ext_lang_rc
1072 gdbpy_before_prompt_hook (const struct extension_language_defn *extlang,
1073                           const char *current_gdb_prompt)
1074 {
1075   if (!gdb_python_initialized)
1076     return EXT_LANG_RC_NOP;
1077
1078   gdbpy_enter enter_py;
1079
1080   if (!evregpy_no_listeners_p (gdb_py_events.before_prompt)
1081       && evpy_emit_event (NULL, gdb_py_events.before_prompt) < 0)
1082     return EXT_LANG_RC_ERROR;
1083
1084   if (gdb_python_module
1085       && PyObject_HasAttrString (gdb_python_module, "prompt_hook"))
1086     {
1087       gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module,
1088                                                 "prompt_hook"));
1089       if (hook == NULL)
1090         {
1091           gdbpy_print_stack ();
1092           return EXT_LANG_RC_ERROR;
1093         }
1094
1095       if (PyCallable_Check (hook.get ()))
1096         {
1097           gdbpy_ref<> current_prompt (PyString_FromString (current_gdb_prompt));
1098           if (current_prompt == NULL)
1099             {
1100               gdbpy_print_stack ();
1101               return EXT_LANG_RC_ERROR;
1102             }
1103
1104           gdbpy_ref<> result
1105             (PyObject_CallFunctionObjArgs (hook.get (), current_prompt.get (),
1106                                            NULL));
1107           if (result == NULL)
1108             {
1109               gdbpy_print_stack ();
1110               return EXT_LANG_RC_ERROR;
1111             }
1112
1113           /* Return type should be None, or a String.  If it is None,
1114              fall through, we will not set a prompt.  If it is a
1115              string, set  PROMPT.  Anything else, set an exception.  */
1116           if (result != Py_None && ! PyString_Check (result.get ()))
1117             {
1118               PyErr_Format (PyExc_RuntimeError,
1119                             _("Return from prompt_hook must " \
1120                               "be either a Python string, or None"));
1121               gdbpy_print_stack ();
1122               return EXT_LANG_RC_ERROR;
1123             }
1124
1125           if (result != Py_None)
1126             {
1127               gdb::unique_xmalloc_ptr<char>
1128                 prompt (python_string_to_host_string (result.get ()));
1129
1130               if (prompt == NULL)
1131                 {
1132                   gdbpy_print_stack ();
1133                   return EXT_LANG_RC_ERROR;
1134                 }
1135
1136               set_prompt (prompt.get ());
1137               return EXT_LANG_RC_OK;
1138             }
1139         }
1140     }
1141
1142   return EXT_LANG_RC_NOP;
1143 }
1144
1145 /* This is the extension_language_ops.colorize "method".  */
1146
1147 static gdb::optional<std::string>
1148 gdbpy_colorize (const std::string &filename, const std::string &contents)
1149 {
1150   if (!gdb_python_initialized)
1151     return {};
1152
1153   gdbpy_enter enter_py;
1154
1155   if (gdb_python_module == nullptr
1156       || !PyObject_HasAttrString (gdb_python_module, "colorize"))
1157     return {};
1158
1159   gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module, "colorize"));
1160   if (hook == nullptr)
1161     {
1162       gdbpy_print_stack ();
1163       return {};
1164     }
1165
1166   if (!PyCallable_Check (hook.get ()))
1167     return {};
1168
1169   gdbpy_ref<> fname_arg (PyString_FromString (filename.c_str ()));
1170   if (fname_arg == nullptr)
1171     {
1172       gdbpy_print_stack ();
1173       return {};
1174     }
1175
1176   /* The pygments library, which is what we currently use for applying
1177      styling, is happy to take input as a bytes object, and to figure out
1178      the encoding for itself.  This removes the need for us to figure out
1179      (guess?) at how the content is encoded, which is probably a good
1180      thing.  */
1181   gdbpy_ref<> contents_arg (PyBytes_FromStringAndSize (contents.c_str (),
1182                                                        contents.size ()));
1183   if (contents_arg == nullptr)
1184     {
1185       gdbpy_print_stack ();
1186       return {};
1187     }
1188
1189   /* Calling gdb.colorize passing in the filename (a string), and the file
1190      contents (a bytes object).  This function should return either a bytes
1191      object, the same contents with styling applied, or None to indicate
1192      that no styling should be performed.  */
1193   gdbpy_ref<> result (PyObject_CallFunctionObjArgs (hook.get (),
1194                                                     fname_arg.get (),
1195                                                     contents_arg.get (),
1196                                                     nullptr));
1197   if (result == nullptr)
1198     {
1199       gdbpy_print_stack ();
1200       return {};
1201     }
1202
1203   if (result == Py_None)
1204     return {};
1205   else if (!PyBytes_Check (result.get ()))
1206     {
1207       PyErr_SetString (PyExc_TypeError,
1208                        _("Return value from gdb.colorize should be a bytes object or None."));
1209       gdbpy_print_stack ();
1210       return {};
1211     }
1212
1213   return std::string (PyBytes_AsString (result.get ()));
1214 }
1215
1216 \f
1217
1218 /* Printing.  */
1219
1220 /* A python function to write a single string using gdb's filtered
1221    output stream .  The optional keyword STREAM can be used to write
1222    to a particular stream.  The default stream is to gdb_stdout.  */
1223
1224 static PyObject *
1225 gdbpy_write (PyObject *self, PyObject *args, PyObject *kw)
1226 {
1227   const char *arg;
1228   static const char *keywords[] = { "text", "stream", NULL };
1229   int stream_type = 0;
1230
1231   if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|i", keywords, &arg,
1232                                         &stream_type))
1233     return NULL;
1234
1235   try
1236     {
1237       switch (stream_type)
1238         {
1239         case 1:
1240           {
1241             fprintf_filtered (gdb_stderr, "%s", arg);
1242             break;
1243           }
1244         case 2:
1245           {
1246             fprintf_filtered (gdb_stdlog, "%s", arg);
1247             break;
1248           }
1249         default:
1250           fprintf_filtered (gdb_stdout, "%s", arg);
1251         }
1252     }
1253   catch (const gdb_exception &except)
1254     {
1255       GDB_PY_HANDLE_EXCEPTION (except);
1256     }
1257
1258   Py_RETURN_NONE;
1259 }
1260
1261 /* A python function to flush a gdb stream.  The optional keyword
1262    STREAM can be used to flush a particular stream.  The default stream
1263    is gdb_stdout.  */
1264
1265 static PyObject *
1266 gdbpy_flush (PyObject *self, PyObject *args, PyObject *kw)
1267 {
1268   static const char *keywords[] = { "stream", NULL };
1269   int stream_type = 0;
1270
1271   if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|i", keywords,
1272                                         &stream_type))
1273     return NULL;
1274
1275   switch (stream_type)
1276     {
1277     case 1:
1278       {
1279         gdb_flush (gdb_stderr);
1280         break;
1281       }
1282     case 2:
1283       {
1284         gdb_flush (gdb_stdlog);
1285         break;
1286       }
1287     default:
1288       gdb_flush (gdb_stdout);
1289     }
1290
1291   Py_RETURN_NONE;
1292 }
1293
1294 /* Return non-zero if print-stack is not "none".  */
1295
1296 int
1297 gdbpy_print_python_errors_p (void)
1298 {
1299   return gdbpy_should_print_stack != python_excp_none;
1300 }
1301
1302 /* Print a python exception trace, print just a message, or print
1303    nothing and clear the python exception, depending on
1304    gdbpy_should_print_stack.  Only call this if a python exception is
1305    set.  */
1306 void
1307 gdbpy_print_stack (void)
1308 {
1309
1310   /* Print "none", just clear exception.  */
1311   if (gdbpy_should_print_stack == python_excp_none)
1312     {
1313       PyErr_Clear ();
1314     }
1315   /* Print "full" message and backtrace.  */
1316   else if (gdbpy_should_print_stack == python_excp_full)
1317     {
1318       PyErr_Print ();
1319       /* PyErr_Print doesn't necessarily end output with a newline.
1320          This works because Python's stdout/stderr is fed through
1321          printf_filtered.  */
1322       try
1323         {
1324           begin_line ();
1325         }
1326       catch (const gdb_exception &except)
1327         {
1328         }
1329     }
1330   /* Print "message", just error print message.  */
1331   else
1332     {
1333       gdbpy_err_fetch fetched_error;
1334
1335       gdb::unique_xmalloc_ptr<char> msg = fetched_error.to_string ();
1336       gdb::unique_xmalloc_ptr<char> type;
1337       /* Don't compute TYPE if MSG already indicates that there is an
1338          error.  */
1339       if (msg != NULL)
1340         type = fetched_error.type_to_string ();
1341
1342       try
1343         {
1344           if (msg == NULL || type == NULL)
1345             {
1346               /* An error occurred computing the string representation of the
1347                  error message.  */
1348               fprintf_filtered (gdb_stderr,
1349                                 _("Error occurred computing Python error" \
1350                                   "message.\n"));
1351               PyErr_Clear ();
1352             }
1353           else
1354             fprintf_filtered (gdb_stderr, "Python Exception %s: %s\n",
1355                               type.get (), msg.get ());
1356         }
1357       catch (const gdb_exception &except)
1358         {
1359         }
1360     }
1361 }
1362
1363 /* Like gdbpy_print_stack, but if the exception is a
1364    KeyboardException, throw a gdb "quit" instead.  */
1365
1366 void
1367 gdbpy_print_stack_or_quit ()
1368 {
1369   if (PyErr_ExceptionMatches (PyExc_KeyboardInterrupt))
1370     {
1371       PyErr_Clear ();
1372       throw_quit ("Quit");
1373     }
1374   gdbpy_print_stack ();
1375 }
1376
1377 \f
1378
1379 /* Return a sequence holding all the Progspaces.  */
1380
1381 static PyObject *
1382 gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
1383 {
1384   gdbpy_ref<> list (PyList_New (0));
1385   if (list == NULL)
1386     return NULL;
1387
1388   for (struct program_space *ps : program_spaces)
1389     {
1390       gdbpy_ref<> item = pspace_to_pspace_object (ps);
1391
1392       if (item == NULL || PyList_Append (list.get (), item.get ()) == -1)
1393         return NULL;
1394     }
1395
1396   return list.release ();
1397 }
1398
1399 \f
1400
1401 /* The "current" objfile.  This is set when gdb detects that a new
1402    objfile has been loaded.  It is only set for the duration of a call to
1403    gdbpy_source_objfile_script and gdbpy_execute_objfile_script; it is NULL
1404    at other times.  */
1405 static struct objfile *gdbpy_current_objfile;
1406
1407 /* Set the current objfile to OBJFILE and then read FILE named FILENAME
1408    as Python code.  This does not throw any errors.  If an exception
1409    occurs python will print the traceback and clear the error indicator.
1410    This is the extension_language_script_ops.objfile_script_sourcer
1411    "method".  */
1412
1413 static void
1414 gdbpy_source_objfile_script (const struct extension_language_defn *extlang,
1415                              struct objfile *objfile, FILE *file,
1416                              const char *filename)
1417 {
1418   if (!gdb_python_initialized)
1419     return;
1420
1421   gdbpy_enter enter_py (objfile->arch ());
1422   scoped_restore restire_current_objfile
1423     = make_scoped_restore (&gdbpy_current_objfile, objfile);
1424
1425   python_run_simple_file (file, filename);
1426 }
1427
1428 /* Set the current objfile to OBJFILE and then execute SCRIPT
1429    as Python code.  This does not throw any errors.  If an exception
1430    occurs python will print the traceback and clear the error indicator.
1431    This is the extension_language_script_ops.objfile_script_executor
1432    "method".  */
1433
1434 static void
1435 gdbpy_execute_objfile_script (const struct extension_language_defn *extlang,
1436                               struct objfile *objfile, const char *name,
1437                               const char *script)
1438 {
1439   if (!gdb_python_initialized)
1440     return;
1441
1442   gdbpy_enter enter_py (objfile->arch ());
1443   scoped_restore restire_current_objfile
1444     = make_scoped_restore (&gdbpy_current_objfile, objfile);
1445
1446   PyRun_SimpleString (script);
1447 }
1448
1449 /* Return the current Objfile, or None if there isn't one.  */
1450
1451 static PyObject *
1452 gdbpy_get_current_objfile (PyObject *unused1, PyObject *unused2)
1453 {
1454   if (! gdbpy_current_objfile)
1455     Py_RETURN_NONE;
1456
1457   return objfile_to_objfile_object (gdbpy_current_objfile).release ();
1458 }
1459
1460 /* Compute the list of active python type printers and store them in
1461    EXT_PRINTERS->py_type_printers.  The product of this function is used by
1462    gdbpy_apply_type_printers, and freed by gdbpy_free_type_printers.
1463    This is the extension_language_ops.start_type_printers "method".  */
1464
1465 static void
1466 gdbpy_start_type_printers (const struct extension_language_defn *extlang,
1467                            struct ext_lang_type_printers *ext_printers)
1468 {
1469   PyObject *printers_obj = NULL;
1470
1471   if (!gdb_python_initialized)
1472     return;
1473
1474   gdbpy_enter enter_py;
1475
1476   gdbpy_ref<> type_module (PyImport_ImportModule ("gdb.types"));
1477   if (type_module == NULL)
1478     {
1479       gdbpy_print_stack ();
1480       return;
1481     }
1482
1483   gdbpy_ref<> func (PyObject_GetAttrString (type_module.get (),
1484                                             "get_type_recognizers"));
1485   if (func == NULL)
1486     {
1487       gdbpy_print_stack ();
1488       return;
1489     }
1490
1491   printers_obj = PyObject_CallFunctionObjArgs (func.get (), (char *) NULL);
1492   if (printers_obj == NULL)
1493     gdbpy_print_stack ();
1494   else
1495     ext_printers->py_type_printers = printers_obj;
1496 }
1497
1498 /* If TYPE is recognized by some type printer, store in *PRETTIED_TYPE
1499    a newly allocated string holding the type's replacement name, and return
1500    EXT_LANG_RC_OK.  The caller is responsible for freeing the string.
1501    If there's a Python error return EXT_LANG_RC_ERROR.
1502    Otherwise, return EXT_LANG_RC_NOP.
1503    This is the extension_language_ops.apply_type_printers "method".  */
1504
1505 static enum ext_lang_rc
1506 gdbpy_apply_type_printers (const struct extension_language_defn *extlang,
1507                            const struct ext_lang_type_printers *ext_printers,
1508                            struct type *type, char **prettied_type)
1509 {
1510   PyObject *printers_obj = (PyObject *) ext_printers->py_type_printers;
1511   gdb::unique_xmalloc_ptr<char> result;
1512
1513   if (printers_obj == NULL)
1514     return EXT_LANG_RC_NOP;
1515
1516   if (!gdb_python_initialized)
1517     return EXT_LANG_RC_NOP;
1518
1519   gdbpy_enter enter_py;
1520
1521   gdbpy_ref<> type_obj (type_to_type_object (type));
1522   if (type_obj == NULL)
1523     {
1524       gdbpy_print_stack ();
1525       return EXT_LANG_RC_ERROR;
1526     }
1527
1528   gdbpy_ref<> type_module (PyImport_ImportModule ("gdb.types"));
1529   if (type_module == NULL)
1530     {
1531       gdbpy_print_stack ();
1532       return EXT_LANG_RC_ERROR;
1533     }
1534
1535   gdbpy_ref<> func (PyObject_GetAttrString (type_module.get (),
1536                                             "apply_type_recognizers"));
1537   if (func == NULL)
1538     {
1539       gdbpy_print_stack ();
1540       return EXT_LANG_RC_ERROR;
1541     }
1542
1543   gdbpy_ref<> result_obj (PyObject_CallFunctionObjArgs (func.get (),
1544                                                         printers_obj,
1545                                                         type_obj.get (),
1546                                                         (char *) NULL));
1547   if (result_obj == NULL)
1548     {
1549       gdbpy_print_stack ();
1550       return EXT_LANG_RC_ERROR;
1551     }
1552
1553   if (result_obj == Py_None)
1554     return EXT_LANG_RC_NOP;
1555
1556   result = python_string_to_host_string (result_obj.get ());
1557   if (result == NULL)
1558     {
1559       gdbpy_print_stack ();
1560       return EXT_LANG_RC_ERROR;
1561     }
1562
1563   *prettied_type = result.release ();
1564   return EXT_LANG_RC_OK;
1565 }
1566
1567 /* Free the result of start_type_printers.
1568    This is the extension_language_ops.free_type_printers "method".  */
1569
1570 static void
1571 gdbpy_free_type_printers (const struct extension_language_defn *extlang,
1572                           struct ext_lang_type_printers *ext_printers)
1573 {
1574   PyObject *printers = (PyObject *) ext_printers->py_type_printers;
1575
1576   if (printers == NULL)
1577     return;
1578
1579   if (!gdb_python_initialized)
1580     return;
1581
1582   gdbpy_enter enter_py;
1583   Py_DECREF (printers);
1584 }
1585
1586 #else /* HAVE_PYTHON */
1587
1588 /* Dummy implementation of the gdb "python-interactive" and "python"
1589    command. */
1590
1591 static void
1592 python_interactive_command (const char *arg, int from_tty)
1593 {
1594   arg = skip_spaces (arg);
1595   if (arg && *arg)
1596     error (_("Python scripting is not supported in this copy of GDB."));
1597   else
1598     {
1599       counted_command_line l = get_command_line (python_control, "");
1600
1601       execute_control_command_untraced (l.get ());
1602     }
1603 }
1604
1605 static void
1606 python_command (const char *arg, int from_tty)
1607 {
1608   python_interactive_command (arg, from_tty);
1609 }
1610
1611 #endif /* HAVE_PYTHON */
1612
1613 /* When this is turned on before Python is initialised then Python will
1614    ignore any environment variables related to Python.  This is equivalent
1615    to passing `-E' to the python program.  */
1616 static bool python_ignore_environment = false;
1617
1618 /* Implement 'show python ignore-environment'.  */
1619
1620 static void
1621 show_python_ignore_environment (struct ui_file *file, int from_tty,
1622                                 struct cmd_list_element *c, const char *value)
1623 {
1624   fprintf_filtered (file, _("Python's ignore-environment setting is %s.\n"),
1625                     value);
1626 }
1627
1628 /* Implement 'set python ignore-environment'.  This sets Python's internal
1629    flag no matter when the command is issued, however, if this is used
1630    after Py_Initialize has been called then most of the environment will
1631    already have been read.  */
1632
1633 static void
1634 set_python_ignore_environment (const char *args, int from_tty,
1635                                struct cmd_list_element *c)
1636 {
1637 #ifdef HAVE_PYTHON
1638   Py_IgnoreEnvironmentFlag = python_ignore_environment ? 1 : 0;
1639 #endif
1640 }
1641
1642 /* When this is turned on before Python is initialised then Python will
1643    not write `.pyc' files on import of a module.  */
1644 static enum auto_boolean python_dont_write_bytecode = AUTO_BOOLEAN_AUTO;
1645
1646 /* Implement 'show python dont-write-bytecode'.  */
1647
1648 static void
1649 show_python_dont_write_bytecode (struct ui_file *file, int from_tty,
1650                                  struct cmd_list_element *c, const char *value)
1651 {
1652   if (python_dont_write_bytecode == AUTO_BOOLEAN_AUTO)
1653     {
1654       const char *auto_string
1655         = (python_ignore_environment
1656            || getenv ("PYTHONDONTWRITEBYTECODE") == nullptr) ? "off" : "on";
1657
1658       fprintf_filtered (file,
1659                         _("Python's dont-write-bytecode setting is %s (currently %s).\n"),
1660                         value, auto_string);
1661     }
1662   else
1663     fprintf_filtered (file, _("Python's dont-write-bytecode setting is %s.\n"),
1664                       value);
1665 }
1666
1667 /* Implement 'set python dont-write-bytecode'.  This sets Python's internal
1668    flag no matter when the command is issued, however, if this is used
1669    after Py_Initialize has been called then many modules could already
1670    have been imported and their byte code written out.  */
1671
1672 static void
1673 set_python_dont_write_bytecode (const char *args, int from_tty,
1674                                 struct cmd_list_element *c)
1675 {
1676 #ifdef HAVE_PYTHON
1677   if (python_dont_write_bytecode == AUTO_BOOLEAN_AUTO)
1678     Py_DontWriteBytecodeFlag
1679       = (!python_ignore_environment
1680          && getenv ("PYTHONDONTWRITEBYTECODE") != nullptr) ? 1 : 0;
1681   else
1682     Py_DontWriteBytecodeFlag
1683       = python_dont_write_bytecode == AUTO_BOOLEAN_TRUE ? 1 : 0;
1684 #endif /* HAVE_PYTHON */
1685 }
1686
1687 \f
1688
1689 /* Lists for 'set python' commands.  */
1690
1691 static struct cmd_list_element *user_set_python_list;
1692 static struct cmd_list_element *user_show_python_list;
1693
1694 /* Initialize the Python code.  */
1695
1696 #ifdef HAVE_PYTHON
1697
1698 /* This is installed as a final cleanup and cleans up the
1699    interpreter.  This lets Python's 'atexit' work.  */
1700
1701 static void
1702 finalize_python (void *ignore)
1703 {
1704   struct active_ext_lang_state *previous_active;
1705
1706   /* We don't use ensure_python_env here because if we ever ran the
1707      cleanup, gdb would crash -- because the cleanup calls into the
1708      Python interpreter, which we are about to destroy.  It seems
1709      clearer to make the needed calls explicitly here than to create a
1710      cleanup and then mysteriously discard it.  */
1711
1712   /* This is only called as a final cleanup so we can assume the active
1713      SIGINT handler is gdb's.  We still need to tell it to notify Python.  */
1714   previous_active = set_active_ext_lang (&extension_language_python);
1715
1716   (void) PyGILState_Ensure ();
1717   gdbpy_enter::finalize ();
1718
1719   Py_Finalize ();
1720
1721   gdb_python_initialized = false;
1722   restore_active_ext_lang (previous_active);
1723 }
1724
1725 #ifdef IS_PY3K
1726 static struct PyModuleDef python_GdbModuleDef =
1727 {
1728   PyModuleDef_HEAD_INIT,
1729   "_gdb",
1730   NULL,
1731   -1,
1732   python_GdbMethods,
1733   NULL,
1734   NULL,
1735   NULL,
1736   NULL
1737 };
1738
1739 /* This is called via the PyImport_AppendInittab mechanism called
1740    during initialization, to make the built-in _gdb module known to
1741    Python.  */
1742 PyMODINIT_FUNC init__gdb_module (void);
1743 PyMODINIT_FUNC
1744 init__gdb_module (void)
1745 {
1746   return PyModule_Create (&python_GdbModuleDef);
1747 }
1748 #endif
1749
1750 /* Emit a gdb.GdbExitingEvent, return a negative value if there are any
1751    errors, otherwise, return 0.  */
1752
1753 static int
1754 emit_exiting_event (int exit_code)
1755 {
1756   gdbpy_ref<> event_obj = create_event_object (&gdb_exiting_event_object_type);
1757   if (event_obj == nullptr)
1758     return -1;
1759
1760   gdbpy_ref<> code = gdb_py_object_from_longest (exit_code);
1761   if (evpy_add_attribute (event_obj.get (), "exit_code", code.get ()) < 0)
1762     return -1;
1763
1764   return evpy_emit_event (event_obj.get (), gdb_py_events.gdb_exiting);
1765 }
1766
1767 /* Callback for the gdb_exiting observable.  EXIT_CODE is the value GDB
1768    will exit with.  */
1769
1770 static void
1771 gdbpy_gdb_exiting (int exit_code)
1772 {
1773   if (!gdb_python_initialized)
1774     return;
1775
1776   gdbpy_enter enter_py;
1777
1778   if (emit_exiting_event (exit_code) < 0)
1779     gdbpy_print_stack ();
1780 }
1781
1782 static bool
1783 do_start_initialization ()
1784 {
1785 #ifdef WITH_PYTHON_PATH
1786   /* Work around problem where python gets confused about where it is,
1787      and then can't find its libraries, etc.
1788      NOTE: Python assumes the following layout:
1789      /foo/bin/python
1790      /foo/lib/pythonX.Y/...
1791      This must be done before calling Py_Initialize.  */
1792   gdb::unique_xmalloc_ptr<char> progname
1793     (concat (ldirname (python_libdir.c_str ()).c_str (), SLASH_STRING, "bin",
1794               SLASH_STRING, "python", (char *) NULL));
1795 #ifdef IS_PY3K
1796   /* Python documentation indicates that the memory given
1797      to Py_SetProgramName cannot be freed.  However, it seems that
1798      at least Python 3.7.4 Py_SetProgramName takes a copy of the
1799      given program_name.  Making progname_copy static and not release
1800      the memory avoids a leak report for Python versions that duplicate
1801      program_name, and respect the requirement of Py_SetProgramName
1802      for Python versions that do not duplicate program_name.  */
1803   static wchar_t *progname_copy;
1804
1805   std::string oldloc = setlocale (LC_ALL, NULL);
1806   setlocale (LC_ALL, "");
1807   size_t progsize = strlen (progname.get ());
1808   progname_copy = XNEWVEC (wchar_t, progsize + 1);
1809   size_t count = mbstowcs (progname_copy, progname.get (), progsize + 1);
1810   if (count == (size_t) -1)
1811     {
1812       fprintf (stderr, "Could not convert python path to string\n");
1813       return false;
1814     }
1815   setlocale (LC_ALL, oldloc.c_str ());
1816
1817   /* Note that Py_SetProgramName expects the string it is passed to
1818      remain alive for the duration of the program's execution, so
1819      it is not freed after this call.  */
1820   Py_SetProgramName (progname_copy);
1821
1822   /* Define _gdb as a built-in module.  */
1823   PyImport_AppendInittab ("_gdb", init__gdb_module);
1824 #else
1825   Py_SetProgramName (progname.release ());
1826 #endif
1827 #endif
1828
1829   Py_Initialize ();
1830 #if PY_VERSION_HEX < 0x03090000
1831   /* PyEval_InitThreads became deprecated in Python 3.9 and will
1832      be removed in Python 3.11.  Prior to Python 3.7, this call was
1833      required to initialize the GIL.  */
1834   PyEval_InitThreads ();
1835 #endif
1836
1837 #ifdef IS_PY3K
1838   gdb_module = PyImport_ImportModule ("_gdb");
1839 #else
1840   gdb_module = Py_InitModule ("_gdb", python_GdbMethods);
1841 #endif
1842   if (gdb_module == NULL)
1843     return false;
1844
1845   if (PyModule_AddStringConstant (gdb_module, "VERSION", version) < 0
1846       || PyModule_AddStringConstant (gdb_module, "HOST_CONFIG", host_name) < 0
1847       || PyModule_AddStringConstant (gdb_module, "TARGET_CONFIG",
1848                                      target_name) < 0)
1849     return false;
1850
1851   /* Add stream constants.  */
1852   if (PyModule_AddIntConstant (gdb_module, "STDOUT", 0) < 0
1853       || PyModule_AddIntConstant (gdb_module, "STDERR", 1) < 0
1854       || PyModule_AddIntConstant (gdb_module, "STDLOG", 2) < 0)
1855     return false;
1856
1857   gdbpy_gdb_error = PyErr_NewException ("gdb.error", PyExc_RuntimeError, NULL);
1858   if (gdbpy_gdb_error == NULL
1859       || gdb_pymodule_addobject (gdb_module, "error", gdbpy_gdb_error) < 0)
1860     return false;
1861
1862   gdbpy_gdb_memory_error = PyErr_NewException ("gdb.MemoryError",
1863                                                gdbpy_gdb_error, NULL);
1864   if (gdbpy_gdb_memory_error == NULL
1865       || gdb_pymodule_addobject (gdb_module, "MemoryError",
1866                                  gdbpy_gdb_memory_error) < 0)
1867     return false;
1868
1869   gdbpy_gdberror_exc = PyErr_NewException ("gdb.GdbError", NULL, NULL);
1870   if (gdbpy_gdberror_exc == NULL
1871       || gdb_pymodule_addobject (gdb_module, "GdbError",
1872                                  gdbpy_gdberror_exc) < 0)
1873     return false;
1874
1875   gdbpy_initialize_gdb_readline ();
1876
1877   if (gdbpy_initialize_auto_load () < 0
1878       || gdbpy_initialize_values () < 0
1879       || gdbpy_initialize_frames () < 0
1880       || gdbpy_initialize_commands () < 0
1881       || gdbpy_initialize_instruction () < 0
1882       || gdbpy_initialize_record () < 0
1883       || gdbpy_initialize_btrace () < 0
1884       || gdbpy_initialize_symbols () < 0
1885       || gdbpy_initialize_symtabs () < 0
1886       || gdbpy_initialize_blocks () < 0
1887       || gdbpy_initialize_functions () < 0
1888       || gdbpy_initialize_parameters () < 0
1889       || gdbpy_initialize_types () < 0
1890       || gdbpy_initialize_pspace () < 0
1891       || gdbpy_initialize_objfile () < 0
1892       || gdbpy_initialize_breakpoints () < 0
1893       || gdbpy_initialize_finishbreakpoints () < 0
1894       || gdbpy_initialize_lazy_string () < 0
1895       || gdbpy_initialize_linetable () < 0
1896       || gdbpy_initialize_thread () < 0
1897       || gdbpy_initialize_inferior () < 0
1898       || gdbpy_initialize_eventregistry () < 0
1899       || gdbpy_initialize_py_events () < 0
1900       || gdbpy_initialize_event () < 0
1901       || gdbpy_initialize_arch () < 0
1902       || gdbpy_initialize_registers () < 0
1903       || gdbpy_initialize_xmethods () < 0
1904       || gdbpy_initialize_unwind () < 0
1905       || gdbpy_initialize_membuf () < 0
1906       || gdbpy_initialize_connection () < 0
1907       || gdbpy_initialize_tui () < 0)
1908     return false;
1909
1910 #define GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base)      \
1911   if (gdbpy_initialize_event_generic (&name##_event_object_type, py_name) < 0) \
1912     return false;
1913 #include "py-event-types.def"
1914 #undef GDB_PY_DEFINE_EVENT_TYPE
1915
1916   gdbpy_to_string_cst = PyString_FromString ("to_string");
1917   if (gdbpy_to_string_cst == NULL)
1918     return false;
1919   gdbpy_children_cst = PyString_FromString ("children");
1920   if (gdbpy_children_cst == NULL)
1921     return false;
1922   gdbpy_display_hint_cst = PyString_FromString ("display_hint");
1923   if (gdbpy_display_hint_cst == NULL)
1924     return false;
1925   gdbpy_doc_cst = PyString_FromString ("__doc__");
1926   if (gdbpy_doc_cst == NULL)
1927     return false;
1928   gdbpy_enabled_cst = PyString_FromString ("enabled");
1929   if (gdbpy_enabled_cst == NULL)
1930     return false;
1931   gdbpy_value_cst = PyString_FromString ("value");
1932   if (gdbpy_value_cst == NULL)
1933     return false;
1934
1935   gdb::observers::gdb_exiting.attach (gdbpy_gdb_exiting, "python");
1936
1937   /* Release the GIL while gdb runs.  */
1938   PyEval_SaveThread ();
1939
1940   make_final_cleanup (finalize_python, NULL);
1941
1942   /* Only set this when initialization has succeeded.  */
1943   gdb_python_initialized = 1;
1944   return true;
1945 }
1946
1947 #if GDB_SELF_TEST
1948 namespace selftests {
1949
1950 /* Entry point for python unit tests.  */
1951
1952 static void
1953 test_python ()
1954 {
1955 #define CMD(S) execute_command_to_string (S, "python print(5)", 0, true)
1956
1957   std::string output;
1958
1959   CMD (output);
1960   SELF_CHECK (output == "5\n");
1961   output.clear ();
1962
1963   bool saw_exception = false;
1964   {
1965     scoped_restore reset_gdb_python_initialized
1966       = make_scoped_restore (&gdb_python_initialized, 0);
1967     try
1968       {
1969         CMD (output);
1970       }
1971     catch (const gdb_exception &e)
1972       {
1973         saw_exception = true;
1974         SELF_CHECK (e.reason == RETURN_ERROR);
1975         SELF_CHECK (e.error == GENERIC_ERROR);
1976         SELF_CHECK (*e.message == "Python not initialized");
1977       }
1978     SELF_CHECK (saw_exception);
1979     SELF_CHECK (output.empty ());
1980   }
1981
1982   saw_exception = false;
1983   {
1984     scoped_restore save_hook
1985       = make_scoped_restore (&hook_set_active_ext_lang,
1986                              []() { raise (SIGINT); });
1987     try
1988       {
1989         CMD (output);
1990       }
1991     catch (const gdb_exception &e)
1992       {
1993         saw_exception = true;
1994         SELF_CHECK (e.reason == RETURN_ERROR);
1995         SELF_CHECK (e.error == GENERIC_ERROR);
1996         SELF_CHECK (*e.message == "Error while executing Python code.");
1997       }
1998     SELF_CHECK (saw_exception);
1999     std::string ref_output("Traceback (most recent call last):\n"
2000                            "  File \"<string>\", line 1, in <module>\n"
2001                            "KeyboardInterrupt\n");
2002     SELF_CHECK (output == ref_output);
2003   }
2004
2005 #undef CMD
2006 }
2007
2008 #undef CHECK_OUTPUT
2009
2010 } // namespace selftests
2011 #endif /* GDB_SELF_TEST */
2012
2013 #endif /* HAVE_PYTHON */
2014
2015 /* See python.h.  */
2016 cmd_list_element *python_cmd_element = nullptr;
2017
2018 void _initialize_python ();
2019 void
2020 _initialize_python ()
2021 {
2022   cmd_list_element *python_interactive_cmd
2023     =   add_com ("python-interactive", class_obscure,
2024                  python_interactive_command,
2025 #ifdef HAVE_PYTHON
2026            _("\
2027 Start an interactive Python prompt.\n\
2028 \n\
2029 To return to GDB, type the EOF character (e.g., Ctrl-D on an empty\n\
2030 prompt).\n\
2031 \n\
2032 Alternatively, a single-line Python command can be given as an\n\
2033 argument, and if the command is an expression, the result will be\n\
2034 printed.  For example:\n\
2035 \n\
2036     (gdb) python-interactive 2 + 3\n\
2037     5")
2038 #else /* HAVE_PYTHON */
2039            _("\
2040 Start a Python interactive prompt.\n\
2041 \n\
2042 Python scripting is not supported in this copy of GDB.\n\
2043 This command is only a placeholder.")
2044 #endif /* HAVE_PYTHON */
2045            );
2046   add_com_alias ("pi", python_interactive_cmd, class_obscure, 1);
2047
2048   python_cmd_element = add_com ("python", class_obscure, python_command,
2049 #ifdef HAVE_PYTHON
2050            _("\
2051 Evaluate a Python command.\n\
2052 \n\
2053 The command can be given as an argument, for instance:\n\
2054 \n\
2055     python print (23)\n\
2056 \n\
2057 If no argument is given, the following lines are read and used\n\
2058 as the Python commands.  Type a line containing \"end\" to indicate\n\
2059 the end of the command.")
2060 #else /* HAVE_PYTHON */
2061            _("\
2062 Evaluate a Python command.\n\
2063 \n\
2064 Python scripting is not supported in this copy of GDB.\n\
2065 This command is only a placeholder.")
2066 #endif /* HAVE_PYTHON */
2067            );
2068   add_com_alias ("py", python_cmd_element, class_obscure, 1);
2069
2070   /* Add set/show python print-stack.  */
2071   add_setshow_prefix_cmd ("python", no_class,
2072                           _("Prefix command for python preference settings."),
2073                           _("Prefix command for python preference settings."),
2074                           &user_set_python_list, &user_show_python_list,
2075                           &setlist, &showlist);
2076
2077   add_setshow_enum_cmd ("print-stack", no_class, python_excp_enums,
2078                         &gdbpy_should_print_stack, _("\
2079 Set mode for Python stack dump on error."), _("\
2080 Show the mode of Python stack printing on error."), _("\
2081 none  == no stack or message will be printed.\n\
2082 full == a message and a stack will be printed.\n\
2083 message == an error message without a stack will be printed."),
2084                         NULL, NULL,
2085                         &user_set_python_list,
2086                         &user_show_python_list);
2087
2088   add_setshow_boolean_cmd ("ignore-environment", no_class,
2089                            &python_ignore_environment, _("\
2090 Set whether the Python interpreter should ignore environment variables."), _(" \
2091 Show whether the Python interpreter showlist ignore environment variables."), _(" \
2092 When enabled GDB's Python interpreter will ignore any Python related\n  \
2093 flags in the environment.  This is equivalent to passing `-E' to a\n    \
2094 python executable."),
2095                            set_python_ignore_environment,
2096                            show_python_ignore_environment,
2097                            &user_set_python_list,
2098                            &user_show_python_list);
2099
2100   add_setshow_auto_boolean_cmd ("dont-write-bytecode", no_class,
2101                                 &python_dont_write_bytecode, _("\
2102 Set whether the Python interpreter should ignore environment variables."), _(" \
2103 Show whether the Python interpreter showlist ignore environment variables."), _(" \
2104 When enabled GDB's Python interpreter will ignore any Python related\n  \
2105 flags in the environment.  This is equivalent to passing `-E' to a\n    \
2106 python executable."),
2107                                 set_python_dont_write_bytecode,
2108                                 show_python_dont_write_bytecode,
2109                                 &user_set_python_list,
2110                                 &user_show_python_list);
2111
2112 #ifdef HAVE_PYTHON
2113 #if GDB_SELF_TEST
2114   selftests::register_test ("python", selftests::test_python);
2115 #endif /* GDB_SELF_TEST */
2116 #endif /* HAVE_PYTHON */
2117 }
2118
2119 #ifdef HAVE_PYTHON
2120
2121 /* Helper function for gdbpy_initialize.  This does the work and then
2122    returns false if an error has occurred and must be displayed, or true on
2123    success.  */
2124
2125 static bool
2126 do_initialize (const struct extension_language_defn *extlang)
2127 {
2128   PyObject *m;
2129   PyObject *sys_path;
2130
2131   /* Add the initial data-directory to sys.path.  */
2132
2133   std::string gdb_pythondir = (std::string (gdb_datadir) + SLASH_STRING
2134                                + "python");
2135
2136   sys_path = PySys_GetObject ("path");
2137
2138   /* If sys.path is not defined yet, define it first.  */
2139   if (!(sys_path && PyList_Check (sys_path)))
2140     {
2141 #ifdef IS_PY3K
2142       PySys_SetPath (L"");
2143 #else
2144       PySys_SetPath ("");
2145 #endif
2146       sys_path = PySys_GetObject ("path");
2147     }
2148   if (sys_path && PyList_Check (sys_path))
2149     {
2150       gdbpy_ref<> pythondir (PyString_FromString (gdb_pythondir.c_str ()));
2151       if (pythondir == NULL || PyList_Insert (sys_path, 0, pythondir.get ()))
2152         return false;
2153     }
2154   else
2155     return false;
2156
2157   /* Import the gdb module to finish the initialization, and
2158      add it to __main__ for convenience.  */
2159   m = PyImport_AddModule ("__main__");
2160   if (m == NULL)
2161     return false;
2162
2163   /* Keep the reference to gdb_python_module since it is in a global
2164      variable.  */
2165   gdb_python_module = PyImport_ImportModule ("gdb");
2166   if (gdb_python_module == NULL)
2167     {
2168       gdbpy_print_stack ();
2169       /* This is passed in one call to warning so that blank lines aren't
2170          inserted between each line of text.  */
2171       warning (_("\n"
2172                  "Could not load the Python gdb module from `%s'.\n"
2173                  "Limited Python support is available from the _gdb module.\n"
2174                  "Suggest passing --data-directory=/path/to/gdb/data-directory."),
2175                gdb_pythondir.c_str ());
2176       /* We return "success" here as we've already emitted the
2177          warning.  */
2178       return true;
2179     }
2180
2181   return gdb_pymodule_addobject (m, "gdb", gdb_python_module) >= 0;
2182 }
2183
2184 /* Perform Python initialization.  This will be called after GDB has
2185    performed all of its own initialization.  This is the
2186    extension_language_ops.initialize "method".  */
2187
2188 static void
2189 gdbpy_initialize (const struct extension_language_defn *extlang)
2190 {
2191   if (!do_start_initialization () && PyErr_Occurred ())
2192     gdbpy_print_stack ();
2193
2194   gdbpy_enter enter_py;
2195
2196   if (!do_initialize (extlang))
2197     {
2198       gdbpy_print_stack ();
2199       warning (_("internal error: Unhandled Python exception"));
2200     }
2201 }
2202
2203 /* Return non-zero if Python has successfully initialized.
2204    This is the extension_languages_ops.initialized "method".  */
2205
2206 static int
2207 gdbpy_initialized (const struct extension_language_defn *extlang)
2208 {
2209   return gdb_python_initialized;
2210 }
2211
2212 PyMethodDef python_GdbMethods[] =
2213 {
2214   { "history", gdbpy_history, METH_VARARGS,
2215     "Get a value from history" },
2216   { "add_history", gdbpy_add_history, METH_VARARGS,
2217     "Add a value to the value history list" },
2218   { "history_count", gdbpy_history_count, METH_NOARGS,
2219     "Return an integer, the number of values in GDB's value history" },
2220   { "execute", (PyCFunction) execute_gdb_command, METH_VARARGS | METH_KEYWORDS,
2221     "execute (command [, from_tty] [, to_string]) -> [String]\n\
2222 Evaluate command, a string, as a gdb CLI command.  Optionally returns\n\
2223 a Python String containing the output of the command if to_string is\n\
2224 set to True." },
2225   { "parameter", gdbpy_parameter, METH_VARARGS,
2226     "Return a gdb parameter's value" },
2227
2228   { "breakpoints", gdbpy_breakpoints, METH_NOARGS,
2229     "Return a tuple of all breakpoint objects" },
2230
2231   { "default_visualizer", gdbpy_default_visualizer, METH_VARARGS,
2232     "Find the default visualizer for a Value." },
2233
2234   { "progspaces", gdbpy_progspaces, METH_NOARGS,
2235     "Return a sequence of all progspaces." },
2236
2237   { "current_objfile", gdbpy_get_current_objfile, METH_NOARGS,
2238     "Return the current Objfile being loaded, or None." },
2239
2240   { "newest_frame", gdbpy_newest_frame, METH_NOARGS,
2241     "newest_frame () -> gdb.Frame.\n\
2242 Return the newest frame object." },
2243   { "selected_frame", gdbpy_selected_frame, METH_NOARGS,
2244     "selected_frame () -> gdb.Frame.\n\
2245 Return the selected frame object." },
2246   { "frame_stop_reason_string", gdbpy_frame_stop_reason_string, METH_VARARGS,
2247     "stop_reason_string (Integer) -> String.\n\
2248 Return a string explaining unwind stop reason." },
2249
2250   { "start_recording", gdbpy_start_recording, METH_VARARGS,
2251     "start_recording ([method] [, format]) -> gdb.Record.\n\
2252 Start recording with the given method.  If no method is given, will fall back\n\
2253 to the system default method.  If no format is given, will fall back to the\n\
2254 default format for the given method."},
2255   { "current_recording", gdbpy_current_recording, METH_NOARGS,
2256     "current_recording () -> gdb.Record.\n\
2257 Return current recording object." },
2258   { "stop_recording", gdbpy_stop_recording, METH_NOARGS,
2259     "stop_recording () -> None.\n\
2260 Stop current recording." },
2261
2262   { "lookup_type", (PyCFunction) gdbpy_lookup_type,
2263     METH_VARARGS | METH_KEYWORDS,
2264     "lookup_type (name [, block]) -> type\n\
2265 Return a Type corresponding to the given name." },
2266   { "lookup_symbol", (PyCFunction) gdbpy_lookup_symbol,
2267     METH_VARARGS | METH_KEYWORDS,
2268     "lookup_symbol (name [, block] [, domain]) -> (symbol, is_field_of_this)\n\
2269 Return a tuple with the symbol corresponding to the given name (or None) and\n\
2270 a boolean indicating if name is a field of the current implied argument\n\
2271 `this' (when the current language is object-oriented)." },
2272   { "lookup_global_symbol", (PyCFunction) gdbpy_lookup_global_symbol,
2273     METH_VARARGS | METH_KEYWORDS,
2274     "lookup_global_symbol (name [, domain]) -> symbol\n\
2275 Return the symbol corresponding to the given name (or None)." },
2276   { "lookup_static_symbol", (PyCFunction) gdbpy_lookup_static_symbol,
2277     METH_VARARGS | METH_KEYWORDS,
2278     "lookup_static_symbol (name [, domain]) -> symbol\n\
2279 Return the static-linkage symbol corresponding to the given name (or None)." },
2280   { "lookup_static_symbols", (PyCFunction) gdbpy_lookup_static_symbols,
2281     METH_VARARGS | METH_KEYWORDS,
2282     "lookup_static_symbols (name [, domain]) -> symbol\n\
2283 Return a list of all static-linkage symbols corresponding to the given name." },
2284
2285   { "lookup_objfile", (PyCFunction) gdbpy_lookup_objfile,
2286     METH_VARARGS | METH_KEYWORDS,
2287     "lookup_objfile (name, [by_build_id]) -> objfile\n\
2288 Look up the specified objfile.\n\
2289 If by_build_id is True, the objfile is looked up by using name\n\
2290 as its build id." },
2291
2292   { "decode_line", gdbpy_decode_line, METH_VARARGS,
2293     "decode_line (String) -> Tuple.  Decode a string argument the way\n\
2294 that 'break' or 'edit' does.  Return a tuple containing two elements.\n\
2295 The first element contains any unparsed portion of the String parameter\n\
2296 (or None if the string was fully parsed).  The second element contains\n\
2297 a tuple that contains all the locations that match, represented as\n\
2298 gdb.Symtab_and_line objects (or None)."},
2299   { "parse_and_eval", gdbpy_parse_and_eval, METH_VARARGS,
2300     "parse_and_eval (String) -> Value.\n\
2301 Parse String as an expression, evaluate it, and return the result as a Value."
2302   },
2303
2304   { "post_event", gdbpy_post_event, METH_VARARGS,
2305     "Post an event into gdb's event loop." },
2306
2307   { "target_charset", gdbpy_target_charset, METH_NOARGS,
2308     "target_charset () -> string.\n\
2309 Return the name of the current target charset." },
2310   { "target_wide_charset", gdbpy_target_wide_charset, METH_NOARGS,
2311     "target_wide_charset () -> string.\n\
2312 Return the name of the current target wide charset." },
2313   { "host_charset", gdbpy_host_charset, METH_NOARGS,
2314     "host_charset () -> string.\n\
2315 Return the name of the current host charset." },
2316   { "rbreak", (PyCFunction) gdbpy_rbreak, METH_VARARGS | METH_KEYWORDS,
2317     "rbreak (Regex) -> List.\n\
2318 Return a Tuple containing gdb.Breakpoint objects that match the given Regex." },
2319   { "string_to_argv", gdbpy_string_to_argv, METH_VARARGS,
2320     "string_to_argv (String) -> Array.\n\
2321 Parse String and return an argv-like array.\n\
2322 Arguments are separate by spaces and may be quoted."
2323   },
2324   { "write", (PyCFunction)gdbpy_write, METH_VARARGS | METH_KEYWORDS,
2325     "Write a string using gdb's filtered stream." },
2326   { "flush", (PyCFunction)gdbpy_flush, METH_VARARGS | METH_KEYWORDS,
2327     "Flush gdb's filtered stdout stream." },
2328   { "selected_thread", gdbpy_selected_thread, METH_NOARGS,
2329     "selected_thread () -> gdb.InferiorThread.\n\
2330 Return the selected thread object." },
2331   { "selected_inferior", gdbpy_selected_inferior, METH_NOARGS,
2332     "selected_inferior () -> gdb.Inferior.\n\
2333 Return the selected inferior object." },
2334   { "inferiors", gdbpy_inferiors, METH_NOARGS,
2335     "inferiors () -> (gdb.Inferior, ...).\n\
2336 Return a tuple containing all inferiors." },
2337
2338   { "invalidate_cached_frames", gdbpy_invalidate_cached_frames, METH_NOARGS,
2339     "invalidate_cached_frames () -> None.\n\
2340 Invalidate any cached frame objects in gdb.\n\
2341 Intended for internal use only." },
2342
2343   { "convenience_variable", gdbpy_convenience_variable, METH_VARARGS,
2344     "convenience_variable (NAME) -> value.\n\
2345 Return the value of the convenience variable $NAME,\n\
2346 or None if not set." },
2347   { "set_convenience_variable", gdbpy_set_convenience_variable, METH_VARARGS,
2348     "convenience_variable (NAME, VALUE) -> None.\n\
2349 Set the value of the convenience variable $NAME." },
2350
2351 #ifdef TUI
2352   { "register_window_type", (PyCFunction) gdbpy_register_tui_window,
2353     METH_VARARGS | METH_KEYWORDS,
2354     "register_window_type (NAME, CONSTRUCSTOR) -> None\n\
2355 Register a TUI window constructor." },
2356 #endif  /* TUI */
2357
2358   { "architecture_names", gdbpy_all_architecture_names, METH_NOARGS,
2359     "architecture_names () -> List.\n\
2360 Return a list of all the architecture names GDB understands." },
2361
2362   { "connections", gdbpy_connections, METH_NOARGS,
2363     "connections () -> List.\n\
2364 Return a list of gdb.TargetConnection objects." },
2365
2366   {NULL, NULL, 0, NULL}
2367 };
2368
2369 /* Define all the event objects.  */
2370 #define GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base) \
2371   PyTypeObject name##_event_object_type             \
2372         CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object") \
2373     = { \
2374       PyVarObject_HEAD_INIT (NULL, 0)                           \
2375       "gdb." py_name,                             /* tp_name */ \
2376       sizeof (event_object),                      /* tp_basicsize */ \
2377       0,                                          /* tp_itemsize */ \
2378       evpy_dealloc,                               /* tp_dealloc */ \
2379       0,                                          /* tp_print */ \
2380       0,                                          /* tp_getattr */ \
2381       0,                                          /* tp_setattr */ \
2382       0,                                          /* tp_compare */ \
2383       0,                                          /* tp_repr */ \
2384       0,                                          /* tp_as_number */ \
2385       0,                                          /* tp_as_sequence */ \
2386       0,                                          /* tp_as_mapping */ \
2387       0,                                          /* tp_hash  */ \
2388       0,                                          /* tp_call */ \
2389       0,                                          /* tp_str */ \
2390       0,                                          /* tp_getattro */ \
2391       0,                                          /* tp_setattro */ \
2392       0,                                          /* tp_as_buffer */ \
2393       Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */ \
2394       doc,                                        /* tp_doc */ \
2395       0,                                          /* tp_traverse */ \
2396       0,                                          /* tp_clear */ \
2397       0,                                          /* tp_richcompare */ \
2398       0,                                          /* tp_weaklistoffset */ \
2399       0,                                          /* tp_iter */ \
2400       0,                                          /* tp_iternext */ \
2401       0,                                          /* tp_methods */ \
2402       0,                                          /* tp_members */ \
2403       0,                                          /* tp_getset */ \
2404       &base,                                      /* tp_base */ \
2405       0,                                          /* tp_dict */ \
2406       0,                                          /* tp_descr_get */ \
2407       0,                                          /* tp_descr_set */ \
2408       0,                                          /* tp_dictoffset */ \
2409       0,                                          /* tp_init */ \
2410       0                                           /* tp_alloc */ \
2411     };
2412 #include "py-event-types.def"
2413 #undef GDB_PY_DEFINE_EVENT_TYPE
2414
2415 #endif /* HAVE_PYTHON */
This page took 0.161626 seconds and 4 git commands to generate.