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