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