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