Add basic Python API for convenience variables
[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
b7b633e9 605 scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
b4a14fd0 606
67ad9399 607 scoped_restore save_uiout = make_scoped_restore (&current_uiout);
cd94f6d5 608
e7ea3ec7
CU
609 /* Use the console interpreter uiout to have the same print format
610 for console or MI. */
8322445e 611 interp = interp_lookup (current_ui, "console");
29f94340 612 current_uiout = interp->interp_ui_out ();
e7ea3ec7 613
1ac32117 614 scoped_restore preventer = prevent_dont_repeat ();
bc9f0842 615 if (to_string)
56bcdbea
TT
616 to_string_res = execute_control_commands_to_string (lines.get (),
617 from_tty);
5da1313b 618 else
56bcdbea 619 execute_control_commands (lines.get (), from_tty);
d57a3c85 620 }
492d29ea
PA
621 CATCH (except, RETURN_MASK_ALL)
622 {
623 GDB_PY_HANDLE_EXCEPTION (except);
624 }
625 END_CATCH
d57a3c85 626
347bddb7
PA
627 /* Do any commands attached to breakpoint we stopped at. */
628 bpstat_do_actions ();
d57a3c85 629
db1ec11f
PA
630 if (to_string)
631 return PyString_FromString (to_string_res.c_str ());
d57a3c85
TJB
632 Py_RETURN_NONE;
633}
634
cb2e07a6
PM
635/* Implementation of gdb.solib_name (Long) -> String.
636 Returns the name of the shared library holding a given address, or None. */
637
638static PyObject *
639gdbpy_solib_name (PyObject *self, PyObject *args)
640{
641 char *soname;
642 PyObject *str_obj;
1b40ec05 643 gdb_py_ulongest pc;
74aedc46 644
1b40ec05 645 if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc))
cb2e07a6
PM
646 return NULL;
647
648 soname = solib_name_from_address (current_program_space, pc);
649 if (soname)
4ae6cc19 650 str_obj = host_string_to_python_string (soname);
cb2e07a6
PM
651 else
652 {
653 str_obj = Py_None;
654 Py_INCREF (Py_None);
655 }
656
657 return str_obj;
658}
659
d8ae99a7
PM
660/* Implementation of Python rbreak command. Take a REGEX and
661 optionally a MINSYMS, THROTTLE and SYMTABS keyword and return a
662 Python list that contains newly set breakpoints that match that
663 criteria. REGEX refers to a GDB format standard regex pattern of
664 symbols names to search; MINSYMS is an optional boolean (default
665 False) that indicates if the function should search GDB's minimal
666 symbols; THROTTLE is an optional integer (default unlimited) that
667 indicates the maximum amount of breakpoints allowable before the
668 function exits (note, if the throttle bound is passed, no
669 breakpoints will be set and a runtime error returned); SYMTABS is
670 an optional Python iterable that contains a set of gdb.Symtabs to
671 constrain the search within. */
672
673static PyObject *
674gdbpy_rbreak (PyObject *self, PyObject *args, PyObject *kw)
675{
676 /* A simple type to ensure clean up of a vector of allocated strings
677 when a C interface demands a const char *array[] type
678 interface. */
679 struct symtab_list_type
680 {
681 ~symtab_list_type ()
682 {
683 for (const char *elem: vec)
684 xfree ((void *) elem);
685 }
686 std::vector<const char *> vec;
687 };
688
689 char *regex = NULL;
690 std::vector<symbol_search> symbols;
691 unsigned long count = 0;
692 PyObject *symtab_list = NULL;
693 PyObject *minsyms_p_obj = NULL;
694 int minsyms_p = 0;
695 unsigned int throttle = 0;
696 static const char *keywords[] = {"regex","minsyms", "throttle",
697 "symtabs", NULL};
698 symtab_list_type symtab_paths;
699
700 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O!IO", keywords,
701 &regex, &PyBool_Type,
702 &minsyms_p_obj, &throttle,
703 &symtab_list))
704 return NULL;
705
706 /* Parse minsyms keyword. */
707 if (minsyms_p_obj != NULL)
708 {
709 int cmp = PyObject_IsTrue (minsyms_p_obj);
710 if (cmp < 0)
711 return NULL;
712 minsyms_p = cmp;
713 }
714
715 /* The "symtabs" keyword is any Python iterable object that returns
716 a gdb.Symtab on each iteration. If specified, iterate through
717 the provided gdb.Symtabs and extract their full path. As
718 python_string_to_target_string returns a
719 gdb::unique_xmalloc_ptr<char> and a vector containing these types
720 cannot be coerced to a const char **p[] via the vector.data call,
721 release the value from the unique_xmalloc_ptr and place it in a
722 simple type symtab_list_type (which holds the vector and a
723 destructor that frees the contents of the allocated strings. */
724 if (symtab_list != NULL)
725 {
726 gdbpy_ref<> iter (PyObject_GetIter (symtab_list));
727
728 if (iter == NULL)
729 return NULL;
730
731 while (true)
732 {
733 gdbpy_ref<> next (PyIter_Next (iter.get ()));
734
735 if (next == NULL)
736 {
737 if (PyErr_Occurred ())
738 return NULL;
739 break;
740 }
741
742 gdbpy_ref<> obj_name (PyObject_GetAttrString (next.get (),
743 "filename"));
744
745 if (obj_name == NULL)
746 return NULL;
747
748 /* Is the object file still valid? */
749 if (obj_name == Py_None)
750 continue;
751
752 gdb::unique_xmalloc_ptr<char> filename =
753 python_string_to_target_string (obj_name.get ());
754
755 if (filename == NULL)
756 return NULL;
757
758 /* Make sure there is a definite place to store the value of
759 filename before it is released. */
760 symtab_paths.vec.push_back (nullptr);
761 symtab_paths.vec.back () = filename.release ();
762 }
763 }
764
765 if (symtab_list)
766 {
767 const char **files = symtab_paths.vec.data ();
768
769 symbols = search_symbols (regex, FUNCTIONS_DOMAIN,
770 symtab_paths.vec.size (), files);
771 }
772 else
773 symbols = search_symbols (regex, FUNCTIONS_DOMAIN, 0, NULL);
774
775 /* Count the number of symbols (both symbols and optionally minimal
776 symbols) so we can correctly check the throttle limit. */
777 for (const symbol_search &p : symbols)
778 {
779 /* Minimal symbols included? */
780 if (minsyms_p)
781 {
782 if (p.msymbol.minsym != NULL)
783 count++;
784 }
785
786 if (p.symbol != NULL)
787 count++;
788 }
789
790 /* Check throttle bounds and exit if in excess. */
791 if (throttle != 0 && count > throttle)
792 {
793 PyErr_SetString (PyExc_RuntimeError,
794 _("Number of breakpoints exceeds throttled maximum."));
795 return NULL;
796 }
797
798 gdbpy_ref<> return_list (PyList_New (0));
799
800 if (return_list == NULL)
801 return NULL;
802
803 /* Construct full path names for symbols and call the Python
804 breakpoint constructor on the resulting names. Be tolerant of
805 individual breakpoint failures. */
806 for (const symbol_search &p : symbols)
807 {
808 std::string symbol_name;
809
810 /* Skipping minimal symbols? */
811 if (minsyms_p == 0)
812 if (p.msymbol.minsym != NULL)
813 continue;
814
815 if (p.msymbol.minsym == NULL)
816 {
817 struct symtab *symtab = symbol_symtab (p.symbol);
818 const char *fullname = symtab_to_fullname (symtab);
819
820 symbol_name = fullname;
821 symbol_name += ":";
822 symbol_name += SYMBOL_LINKAGE_NAME (p.symbol);
823 }
824 else
825 symbol_name = MSYMBOL_LINKAGE_NAME (p.msymbol.minsym);
826
827 gdbpy_ref<> argList (Py_BuildValue("(s)", symbol_name.c_str ()));
828 gdbpy_ref<> obj (PyObject_CallObject ((PyObject *)
829 &breakpoint_object_type,
830 argList.get ()));
831
832 /* Tolerate individual breakpoint failures. */
833 if (obj == NULL)
834 gdbpy_print_stack ();
835 else
836 {
837 if (PyList_Append (return_list.get (), obj.get ()) == -1)
838 return NULL;
839 }
840 }
841 return return_list.release ();
842}
843
cb2e07a6
PM
844/* A Python function which is a wrapper for decode_line_1. */
845
846static PyObject *
847gdbpy_decode_line (PyObject *self, PyObject *args)
848{
f2fc3015 849 const char *arg = NULL;
7780f186
TT
850 gdbpy_ref<> result;
851 gdbpy_ref<> unparsed;
ffc2605c 852 event_location_up location;
cb2e07a6
PM
853
854 if (! PyArg_ParseTuple (args, "|s", &arg))
855 return NULL;
856
f00aae0f 857 if (arg != NULL)
a20714ff
PA
858 location = string_to_event_location_basic (&arg, python_language,
859 symbol_name_match_type::WILD);
f00aae0f 860
6c5b2ebe
PA
861 std::vector<symtab_and_line> decoded_sals;
862 symtab_and_line def_sal;
863 gdb::array_view<symtab_and_line> sals;
492d29ea 864 TRY
cb2e07a6 865 {
59ecaff3 866 if (location != NULL)
6c5b2ebe
PA
867 {
868 decoded_sals = decode_line_1 (location.get (), 0, NULL, NULL, 0);
869 sals = decoded_sals;
870 }
cb2e07a6
PM
871 else
872 {
873 set_default_source_symtab_and_line ();
6c5b2ebe
PA
874 def_sal = get_current_source_symtab_and_line ();
875 sals = def_sal;
cb2e07a6
PM
876 }
877 }
492d29ea 878 CATCH (ex, RETURN_MASK_ALL)
cb2e07a6 879 {
cb2e07a6 880 /* We know this will always throw. */
6c5b2ebe 881 gdbpy_convert_exception (ex);
f3300387 882 return NULL;
cb2e07a6 883 }
6c5b2ebe 884 END_CATCH
cb2e07a6 885
6c5b2ebe 886 if (!sals.empty ())
cb2e07a6 887 {
6c5b2ebe 888 result.reset (PyTuple_New (sals.size ()));
59876f8f 889 if (result == NULL)
0d50bde3 890 return NULL;
6c5b2ebe 891 for (size_t i = 0; i < sals.size (); ++i)
cb2e07a6 892 {
6c5b2ebe
PA
893 PyObject *obj = symtab_and_line_to_sal_object (sals[i]);
894 if (obj == NULL)
0d50bde3 895 return NULL;
cb2e07a6 896
59876f8f 897 PyTuple_SetItem (result.get (), i, obj);
cb2e07a6
PM
898 }
899 }
900 else
7c66fffc 901 result = gdbpy_ref<>::new_reference (Py_None);
cb2e07a6 902
7780f186 903 gdbpy_ref<> return_result (PyTuple_New (2));
59876f8f 904 if (return_result == NULL)
0d50bde3 905 return NULL;
cb2e07a6 906
f00aae0f 907 if (arg != NULL && strlen (arg) > 0)
9bc3523d 908 {
59876f8f 909 unparsed.reset (PyString_FromString (arg));
9bc3523d 910 if (unparsed == NULL)
0d50bde3 911 return NULL;
9bc3523d 912 }
cb2e07a6 913 else
7c66fffc 914 unparsed = gdbpy_ref<>::new_reference (Py_None);
cb2e07a6 915
59876f8f
TT
916 PyTuple_SetItem (return_result.get (), 0, unparsed.release ());
917 PyTuple_SetItem (return_result.get (), 1, result.release ());
cb2e07a6 918
59876f8f 919 return return_result.release ();
cb2e07a6
PM
920}
921
57a1d736
TT
922/* Parse a string and evaluate it as an expression. */
923static PyObject *
924gdbpy_parse_and_eval (PyObject *self, PyObject *args)
925{
ddd49eee 926 const char *expr_str;
57a1d736 927 struct value *result = NULL;
57a1d736
TT
928
929 if (!PyArg_ParseTuple (args, "s", &expr_str))
930 return NULL;
931
492d29ea 932 TRY
57a1d736 933 {
bbc13ae3 934 result = parse_and_eval (expr_str);
57a1d736 935 }
492d29ea
PA
936 CATCH (except, RETURN_MASK_ALL)
937 {
938 GDB_PY_HANDLE_EXCEPTION (except);
939 }
940 END_CATCH
57a1d736
TT
941
942 return value_to_value_object (result);
943}
944
7efc75aa
SCR
945/* Implementation of gdb.find_pc_line function.
946 Returns the gdb.Symtab_and_line object corresponding to a PC value. */
947
948static PyObject *
949gdbpy_find_pc_line (PyObject *self, PyObject *args)
950{
29ca12b3 951 gdb_py_ulongest pc_llu;
62d7fb51 952 PyObject *result = NULL; /* init for gcc -Wall */
7efc75aa
SCR
953
954 if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc_llu))
955 return NULL;
956
492d29ea 957 TRY
9e974e55
TT
958 {
959 struct symtab_and_line sal;
960 CORE_ADDR pc;
961
962 pc = (CORE_ADDR) pc_llu;
963 sal = find_pc_line (pc, 0);
964 result = symtab_and_line_to_sal_object (sal);
965 }
492d29ea
PA
966 CATCH (except, RETURN_MASK_ALL)
967 {
968 GDB_PY_HANDLE_EXCEPTION (except);
969 }
970 END_CATCH
9e974e55
TT
971
972 return result;
7efc75aa
SCR
973}
974
e0f3fd7c
TT
975/* Implementation of gdb.invalidate_cached_frames. */
976
977static PyObject *
978gdbpy_invalidate_cached_frames (PyObject *self, PyObject *args)
979{
980 reinit_frame_cache ();
981 Py_RETURN_NONE;
982}
983
d234ef5c 984/* Read a file as Python code.
6dddc817
DE
985 This is the extension_language_script_ops.script_sourcer "method".
986 FILE is the file to load. FILENAME is name of the file FILE.
d234ef5c
DE
987 This does not throw any errors. If an exception occurs python will print
988 the traceback and clear the error indicator. */
973817a3 989
6dddc817
DE
990static void
991gdbpy_source_script (const struct extension_language_defn *extlang,
992 FILE *file, const char *filename)
973817a3 993{
60e600ec 994 gdbpy_enter enter_py (get_current_arch (), current_language);
4c63965b 995 python_run_simple_file (file, filename);
973817a3
JB
996}
997
d57a3c85
TJB
998\f
999
ca5c20b6
PM
1000/* Posting and handling events. */
1001
1002/* A single event. */
1003struct gdbpy_event
1004{
1005 /* The Python event. This is just a callable object. */
1006 PyObject *event;
1007 /* The next event. */
1008 struct gdbpy_event *next;
1009};
1010
1011/* All pending events. */
1012static struct gdbpy_event *gdbpy_event_list;
1013/* The final link of the event list. */
1014static struct gdbpy_event **gdbpy_event_list_end;
1015
6eddd09a
PA
1016/* So that we can wake up the main thread even when it is blocked in
1017 poll(). */
1018static struct serial_event *gdbpy_serial_event;
ca5c20b6
PM
1019
1020/* The file handler callback. This reads from the internal pipe, and
1021 then processes the Python event queue. This will always be run in
1022 the main gdb thread. */
4a532131 1023
ca5c20b6 1024static void
6eddd09a 1025gdbpy_run_events (int error, gdb_client_data client_data)
ca5c20b6 1026{
60e600ec 1027 gdbpy_enter enter_py (get_current_arch (), current_language);
ca5c20b6 1028
6eddd09a
PA
1029 /* Clear the event fd. Do this before flushing the events list, so
1030 that any new event post afterwards is sure to re-awake the event
4a532131 1031 loop. */
6eddd09a 1032 serial_event_clear (gdbpy_serial_event);
ca5c20b6
PM
1033
1034 while (gdbpy_event_list)
1035 {
1036 /* Dispatching the event might push a new element onto the event
1037 loop, so we update here "atomically enough". */
1038 struct gdbpy_event *item = gdbpy_event_list;
1039 gdbpy_event_list = gdbpy_event_list->next;
1040 if (gdbpy_event_list == NULL)
1041 gdbpy_event_list_end = &gdbpy_event_list;
1042
1043 /* Ignore errors. */
7780f186 1044 gdbpy_ref<> call_result (PyObject_CallObject (item->event, NULL));
02146ba5 1045 if (call_result == NULL)
ca5c20b6
PM
1046 PyErr_Clear ();
1047
1048 Py_DECREF (item->event);
1049 xfree (item);
1050 }
ca5c20b6
PM
1051}
1052
1053/* Submit an event to the gdb thread. */
1054static PyObject *
1055gdbpy_post_event (PyObject *self, PyObject *args)
1056{
1057 struct gdbpy_event *event;
1058 PyObject *func;
1059 int wakeup;
1060
1061 if (!PyArg_ParseTuple (args, "O", &func))
1062 return NULL;
1063
1064 if (!PyCallable_Check (func))
1065 {
256458bc 1066 PyErr_SetString (PyExc_RuntimeError,
ca5c20b6
PM
1067 _("Posted event is not callable"));
1068 return NULL;
1069 }
1070
1071 Py_INCREF (func);
1072
1073 /* From here until the end of the function, we have the GIL, so we
1074 can operate on our global data structures without worrying. */
1075 wakeup = gdbpy_event_list == NULL;
1076
1077 event = XNEW (struct gdbpy_event);
1078 event->event = func;
1079 event->next = NULL;
1080 *gdbpy_event_list_end = event;
1081 gdbpy_event_list_end = &event->next;
1082
1083 /* Wake up gdb when needed. */
1084 if (wakeup)
6eddd09a 1085 serial_event_set (gdbpy_serial_event);
ca5c20b6
PM
1086
1087 Py_RETURN_NONE;
1088}
1089
1090/* Initialize the Python event handler. */
999633ed 1091static int
ca5c20b6
PM
1092gdbpy_initialize_events (void)
1093{
6eddd09a
PA
1094 gdbpy_event_list_end = &gdbpy_event_list;
1095
1096 gdbpy_serial_event = make_serial_event ();
1097 add_file_handler (serial_event_fd (gdbpy_serial_event),
1098 gdbpy_run_events, NULL);
999633ed
TT
1099
1100 return 0;
ca5c20b6
PM
1101}
1102
d17b6f81
PM
1103\f
1104
6dddc817
DE
1105/* This is the extension_language_ops.before_prompt "method". */
1106
1107static enum ext_lang_rc
1108gdbpy_before_prompt_hook (const struct extension_language_defn *extlang,
1109 const char *current_gdb_prompt)
d17b6f81 1110{
0646da15 1111 if (!gdb_python_initialized)
6dddc817 1112 return EXT_LANG_RC_NOP;
0646da15 1113
a88b13c7 1114 gdbpy_enter enter_py (get_current_arch (), current_language);
d17b6f81 1115
3f77c769
TT
1116 if (!evregpy_no_listeners_p (gdb_py_events.before_prompt)
1117 && evpy_emit_event (NULL, gdb_py_events.before_prompt) < 0)
1118 return EXT_LANG_RC_ERROR;
1119
b9516fa1
YPK
1120 if (gdb_python_module
1121 && PyObject_HasAttrString (gdb_python_module, "prompt_hook"))
d17b6f81 1122 {
7780f186
TT
1123 gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module,
1124 "prompt_hook"));
d17b6f81 1125 if (hook == NULL)
d17b6f81 1126 {
a88b13c7
TT
1127 gdbpy_print_stack ();
1128 return EXT_LANG_RC_ERROR;
1129 }
d17b6f81 1130
a88b13c7
TT
1131 if (PyCallable_Check (hook.get ()))
1132 {
7780f186 1133 gdbpy_ref<> current_prompt (PyString_FromString (current_gdb_prompt));
d17b6f81 1134 if (current_prompt == NULL)
a88b13c7
TT
1135 {
1136 gdbpy_print_stack ();
1137 return EXT_LANG_RC_ERROR;
1138 }
d17b6f81 1139
7780f186
TT
1140 gdbpy_ref<> result
1141 (PyObject_CallFunctionObjArgs (hook.get (), current_prompt.get (),
1142 NULL));
d17b6f81 1143 if (result == NULL)
a88b13c7
TT
1144 {
1145 gdbpy_print_stack ();
1146 return EXT_LANG_RC_ERROR;
1147 }
d17b6f81
PM
1148
1149 /* Return type should be None, or a String. If it is None,
1150 fall through, we will not set a prompt. If it is a
1151 string, set PROMPT. Anything else, set an exception. */
a88b13c7 1152 if (result != Py_None && ! PyString_Check (result.get ()))
d17b6f81
PM
1153 {
1154 PyErr_Format (PyExc_RuntimeError,
1155 _("Return from prompt_hook must " \
1156 "be either a Python string, or None"));
a88b13c7
TT
1157 gdbpy_print_stack ();
1158 return EXT_LANG_RC_ERROR;
d17b6f81
PM
1159 }
1160
1161 if (result != Py_None)
1162 {
a88b13c7
TT
1163 gdb::unique_xmalloc_ptr<char>
1164 prompt (python_string_to_host_string (result.get ()));
d17b6f81
PM
1165
1166 if (prompt == NULL)
a88b13c7
TT
1167 {
1168 gdbpy_print_stack ();
1169 return EXT_LANG_RC_ERROR;
1170 }
1171
1172 set_prompt (prompt.get ());
1173 return EXT_LANG_RC_OK;
d17b6f81
PM
1174 }
1175 }
1176 }
1177
a88b13c7 1178 return EXT_LANG_RC_NOP;
d17b6f81
PM
1179}
1180
1181\f
1182
d57a3c85
TJB
1183/* Printing. */
1184
1185/* A python function to write a single string using gdb's filtered
99c3dc11
PM
1186 output stream . The optional keyword STREAM can be used to write
1187 to a particular stream. The default stream is to gdb_stdout. */
1188
d57a3c85 1189static PyObject *
99c3dc11 1190gdbpy_write (PyObject *self, PyObject *args, PyObject *kw)
d57a3c85 1191{
ddd49eee 1192 const char *arg;
2adadf51 1193 static const char *keywords[] = { "text", "stream", NULL };
99c3dc11 1194 int stream_type = 0;
256458bc 1195
2adadf51
PA
1196 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|i", keywords, &arg,
1197 &stream_type))
d57a3c85 1198 return NULL;
99c3dc11 1199
492d29ea 1200 TRY
99c3dc11 1201 {
adb4fe3b
ME
1202 switch (stream_type)
1203 {
1204 case 1:
1205 {
1206 fprintf_filtered (gdb_stderr, "%s", arg);
1207 break;
1208 }
1209 case 2:
1210 {
1211 fprintf_filtered (gdb_stdlog, "%s", arg);
1212 break;
1213 }
1214 default:
1215 fprintf_filtered (gdb_stdout, "%s", arg);
1216 }
99c3dc11 1217 }
492d29ea
PA
1218 CATCH (except, RETURN_MASK_ALL)
1219 {
1220 GDB_PY_HANDLE_EXCEPTION (except);
1221 }
1222 END_CATCH
256458bc 1223
d57a3c85
TJB
1224 Py_RETURN_NONE;
1225}
1226
99c3dc11
PM
1227/* A python function to flush a gdb stream. The optional keyword
1228 STREAM can be used to flush a particular stream. The default stream
1229 is gdb_stdout. */
1230
d57a3c85 1231static PyObject *
99c3dc11 1232gdbpy_flush (PyObject *self, PyObject *args, PyObject *kw)
d57a3c85 1233{
2adadf51 1234 static const char *keywords[] = { "stream", NULL };
99c3dc11 1235 int stream_type = 0;
256458bc 1236
2adadf51
PA
1237 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|i", keywords,
1238 &stream_type))
99c3dc11
PM
1239 return NULL;
1240
1241 switch (stream_type)
1242 {
1243 case 1:
1244 {
1245 gdb_flush (gdb_stderr);
1246 break;
1247 }
1248 case 2:
1249 {
1250 gdb_flush (gdb_stdlog);
1251 break;
1252 }
1253 default:
1254 gdb_flush (gdb_stdout);
1255 }
256458bc 1256
d57a3c85
TJB
1257 Py_RETURN_NONE;
1258}
1259
69b4374a
DE
1260/* Return non-zero if print-stack is not "none". */
1261
1262int
1263gdbpy_print_python_errors_p (void)
1264{
1265 return gdbpy_should_print_stack != python_excp_none;
1266}
1267
80b6e756
PM
1268/* Print a python exception trace, print just a message, or print
1269 nothing and clear the python exception, depending on
1270 gdbpy_should_print_stack. Only call this if a python exception is
1271 set. */
d57a3c85
TJB
1272void
1273gdbpy_print_stack (void)
1274{
7f6a5dde 1275
80b6e756
PM
1276 /* Print "none", just clear exception. */
1277 if (gdbpy_should_print_stack == python_excp_none)
1278 {
1279 PyErr_Clear ();
1280 }
1281 /* Print "full" message and backtrace. */
1282 else if (gdbpy_should_print_stack == python_excp_full)
0bf0f8c4
DE
1283 {
1284 PyErr_Print ();
1285 /* PyErr_Print doesn't necessarily end output with a newline.
1286 This works because Python's stdout/stderr is fed through
1287 printf_filtered. */
492d29ea 1288 TRY
7f6a5dde
TT
1289 {
1290 begin_line ();
1291 }
492d29ea
PA
1292 CATCH (except, RETURN_MASK_ALL)
1293 {
1294 }
1295 END_CATCH
0bf0f8c4 1296 }
80b6e756 1297 /* Print "message", just error print message. */
d57a3c85 1298 else
80b6e756
PM
1299 {
1300 PyObject *ptype, *pvalue, *ptraceback;
80b6e756
PM
1301
1302 PyErr_Fetch (&ptype, &pvalue, &ptraceback);
1303
1304 /* Fetch the error message contained within ptype, pvalue. */
9b972014
TT
1305 gdb::unique_xmalloc_ptr<char>
1306 msg (gdbpy_exception_to_string (ptype, pvalue));
1307 gdb::unique_xmalloc_ptr<char> type (gdbpy_obj_to_string (ptype));
7f6a5dde 1308
492d29ea 1309 TRY
80b6e756 1310 {
7f6a5dde
TT
1311 if (msg == NULL)
1312 {
1313 /* An error occurred computing the string representation of the
1314 error message. */
1315 fprintf_filtered (gdb_stderr,
1316 _("Error occurred computing Python error" \
1317 "message.\n"));
1318 }
1319 else
1320 fprintf_filtered (gdb_stderr, "Python Exception %s %s: \n",
9b972014 1321 type.get (), msg.get ());
80b6e756 1322 }
492d29ea
PA
1323 CATCH (except, RETURN_MASK_ALL)
1324 {
1325 }
1326 END_CATCH
80b6e756
PM
1327
1328 Py_XDECREF (ptype);
1329 Py_XDECREF (pvalue);
1330 Py_XDECREF (ptraceback);
80b6e756 1331 }
d57a3c85
TJB
1332}
1333
89c73ade
TT
1334\f
1335
fa33c3cd
DE
1336/* Return the current Progspace.
1337 There always is one. */
1338
1339static PyObject *
1340gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2)
1341{
1342 PyObject *result;
1343
1344 result = pspace_to_pspace_object (current_program_space);
1345 if (result)
1346 Py_INCREF (result);
1347 return result;
1348}
1349
1350/* Return a sequence holding all the Progspaces. */
1351
1352static PyObject *
1353gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
1354{
1355 struct program_space *ps;
fa33c3cd 1356
7780f186 1357 gdbpy_ref<> list (PyList_New (0));
ff3724f5 1358 if (list == NULL)
fa33c3cd
DE
1359 return NULL;
1360
1361 ALL_PSPACES (ps)
1362 {
1363 PyObject *item = pspace_to_pspace_object (ps);
d59b6f6c 1364
ff3724f5
TT
1365 if (!item || PyList_Append (list.get (), item) == -1)
1366 return NULL;
fa33c3cd
DE
1367 }
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
60e600ec 1394 gdbpy_enter enter_py (get_objfile_arch (objfile), 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
60e600ec 1416 gdbpy_enter enter_py (get_objfile_arch (objfile), 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{
1429 PyObject *result;
1430
1431 if (! gdbpy_current_objfile)
1432 Py_RETURN_NONE;
1433
1434 result = objfile_to_objfile_object (gdbpy_current_objfile);
1435 if (result)
1436 Py_INCREF (result);
1437 return result;
1438}
1439
1440/* Return a sequence holding all the Objfiles. */
fa33c3cd 1441
89c73ade
TT
1442static PyObject *
1443gdbpy_objfiles (PyObject *unused1, PyObject *unused2)
1444{
1445 struct objfile *objf;
89c73ade 1446
7780f186 1447 gdbpy_ref<> list (PyList_New (0));
ff3724f5 1448 if (list == NULL)
89c73ade
TT
1449 return NULL;
1450
1451 ALL_OBJFILES (objf)
1452 {
1453 PyObject *item = objfile_to_objfile_object (objf);
d59b6f6c 1454
ff3724f5
TT
1455 if (!item || PyList_Append (list.get (), item) == -1)
1456 return NULL;
89c73ade
TT
1457 }
1458
ff3724f5 1459 return list.release ();
89c73ade
TT
1460}
1461
6dddc817
DE
1462/* Compute the list of active python type printers and store them in
1463 EXT_PRINTERS->py_type_printers. The product of this function is used by
1464 gdbpy_apply_type_printers, and freed by gdbpy_free_type_printers.
1465 This is the extension_language_ops.start_type_printers "method". */
18a9fc12 1466
6dddc817
DE
1467static void
1468gdbpy_start_type_printers (const struct extension_language_defn *extlang,
1469 struct ext_lang_type_printers *ext_printers)
18a9fc12 1470{
59876f8f 1471 PyObject *printers_obj = NULL;
18a9fc12 1472
0646da15 1473 if (!gdb_python_initialized)
6dddc817 1474 return;
0646da15 1475
60e600ec 1476 gdbpy_enter enter_py (get_current_arch (), current_language);
18a9fc12 1477
7780f186 1478 gdbpy_ref<> type_module (PyImport_ImportModule ("gdb.types"));
18a9fc12
TT
1479 if (type_module == NULL)
1480 {
1481 gdbpy_print_stack ();
59876f8f 1482 return;
18a9fc12 1483 }
18a9fc12 1484
7780f186
TT
1485 gdbpy_ref<> func (PyObject_GetAttrString (type_module.get (),
1486 "get_type_recognizers"));
18a9fc12
TT
1487 if (func == NULL)
1488 {
1489 gdbpy_print_stack ();
59876f8f 1490 return;
18a9fc12 1491 }
18a9fc12 1492
59876f8f 1493 printers_obj = PyObject_CallFunctionObjArgs (func.get (), (char *) NULL);
6dddc817 1494 if (printers_obj == NULL)
18a9fc12 1495 gdbpy_print_stack ();
6dddc817
DE
1496 else
1497 ext_printers->py_type_printers = printers_obj;
18a9fc12
TT
1498}
1499
6dddc817
DE
1500/* If TYPE is recognized by some type printer, store in *PRETTIED_TYPE
1501 a newly allocated string holding the type's replacement name, and return
1502 EXT_LANG_RC_OK. The caller is responsible for freeing the string.
1503 If there's a Python error return EXT_LANG_RC_ERROR.
1504 Otherwise, return EXT_LANG_RC_NOP.
1505 This is the extension_language_ops.apply_type_printers "method". */
1506
1507static enum ext_lang_rc
1508gdbpy_apply_type_printers (const struct extension_language_defn *extlang,
1509 const struct ext_lang_type_printers *ext_printers,
1510 struct type *type, char **prettied_type)
18a9fc12 1511{
19ba03f4 1512 PyObject *printers_obj = (PyObject *) ext_printers->py_type_printers;
9b972014 1513 gdb::unique_xmalloc_ptr<char> result;
18a9fc12
TT
1514
1515 if (printers_obj == NULL)
6dddc817 1516 return EXT_LANG_RC_NOP;
18a9fc12 1517
0646da15 1518 if (!gdb_python_initialized)
6dddc817 1519 return EXT_LANG_RC_NOP;
0646da15 1520
60e600ec 1521 gdbpy_enter enter_py (get_current_arch (), current_language);
18a9fc12 1522
7780f186 1523 gdbpy_ref<> type_obj (type_to_type_object (type));
18a9fc12
TT
1524 if (type_obj == NULL)
1525 {
1526 gdbpy_print_stack ();
59876f8f 1527 return EXT_LANG_RC_ERROR;
18a9fc12 1528 }
18a9fc12 1529
7780f186 1530 gdbpy_ref<> type_module (PyImport_ImportModule ("gdb.types"));
18a9fc12
TT
1531 if (type_module == NULL)
1532 {
1533 gdbpy_print_stack ();
59876f8f 1534 return EXT_LANG_RC_ERROR;
18a9fc12 1535 }
18a9fc12 1536
7780f186
TT
1537 gdbpy_ref<> func (PyObject_GetAttrString (type_module.get (),
1538 "apply_type_recognizers"));
18a9fc12
TT
1539 if (func == NULL)
1540 {
1541 gdbpy_print_stack ();
59876f8f 1542 return EXT_LANG_RC_ERROR;
18a9fc12 1543 }
18a9fc12 1544
7780f186
TT
1545 gdbpy_ref<> result_obj (PyObject_CallFunctionObjArgs (func.get (),
1546 printers_obj,
1547 type_obj.get (),
1548 (char *) NULL));
18a9fc12
TT
1549 if (result_obj == NULL)
1550 {
1551 gdbpy_print_stack ();
59876f8f 1552 return EXT_LANG_RC_ERROR;
18a9fc12 1553 }
18a9fc12 1554
59876f8f
TT
1555 if (result_obj == Py_None)
1556 return EXT_LANG_RC_NOP;
18a9fc12 1557
59876f8f
TT
1558 result = python_string_to_host_string (result_obj.get ());
1559 if (result == NULL)
9b972014 1560 {
59876f8f
TT
1561 gdbpy_print_stack ();
1562 return EXT_LANG_RC_ERROR;
9b972014 1563 }
59876f8f
TT
1564
1565 *prettied_type = result.release ();
1566 return EXT_LANG_RC_OK;
18a9fc12
TT
1567}
1568
6dddc817
DE
1569/* Free the result of start_type_printers.
1570 This is the extension_language_ops.free_type_printers "method". */
18a9fc12 1571
6dddc817
DE
1572static void
1573gdbpy_free_type_printers (const struct extension_language_defn *extlang,
1574 struct ext_lang_type_printers *ext_printers)
18a9fc12 1575{
19ba03f4 1576 PyObject *printers = (PyObject *) ext_printers->py_type_printers;
18a9fc12
TT
1577
1578 if (printers == NULL)
1579 return;
1580
0646da15
TT
1581 if (!gdb_python_initialized)
1582 return;
1583
60e600ec 1584 gdbpy_enter enter_py (get_current_arch (), current_language);
18a9fc12 1585 Py_DECREF (printers);
18a9fc12
TT
1586}
1587
d57a3c85
TJB
1588#else /* HAVE_PYTHON */
1589
8315665e
YPK
1590/* Dummy implementation of the gdb "python-interactive" and "python"
1591 command. */
d57a3c85
TJB
1592
1593static void
0b39b52e 1594python_interactive_command (const char *arg, int from_tty)
d57a3c85 1595{
529480d0 1596 arg = skip_spaces (arg);
d57a3c85
TJB
1597 if (arg && *arg)
1598 error (_("Python scripting is not supported in this copy of GDB."));
1599 else
1600 {
12973681 1601 counted_command_line l = get_command_line (python_control, "");
d59b6f6c 1602
93921405 1603 execute_control_command_untraced (l.get ());
d57a3c85
TJB
1604 }
1605}
1606
8315665e 1607static void
0b39b52e 1608python_command (const char *arg, int from_tty)
8315665e
YPK
1609{
1610 python_interactive_command (arg, from_tty);
1611}
1612
d57a3c85
TJB
1613#endif /* HAVE_PYTHON */
1614
1615\f
1616
713389e0
PM
1617/* Lists for 'set python' commands. */
1618
1619static struct cmd_list_element *user_set_python_list;
1620static struct cmd_list_element *user_show_python_list;
d57a3c85 1621
713389e0
PM
1622/* Function for use by 'set python' prefix command. */
1623
1624static void
981a3fb3 1625user_set_python (const char *args, int from_tty)
713389e0
PM
1626{
1627 help_list (user_set_python_list, "set python ", all_commands,
1628 gdb_stdout);
1629}
1630
1631/* Function for use by 'show python' prefix command. */
1632
1633static void
981a3fb3 1634user_show_python (const char *args, int from_tty)
d57a3c85 1635{
713389e0 1636 cmd_show_list (user_show_python_list, from_tty, "");
d57a3c85
TJB
1637}
1638
1639/* Initialize the Python code. */
1640
810849a3
AS
1641#ifdef HAVE_PYTHON
1642
d7de8e3c
TT
1643/* This is installed as a final cleanup and cleans up the
1644 interpreter. This lets Python's 'atexit' work. */
1645
1646static void
1647finalize_python (void *ignore)
1648{
6dddc817
DE
1649 struct active_ext_lang_state *previous_active;
1650
d7de8e3c
TT
1651 /* We don't use ensure_python_env here because if we ever ran the
1652 cleanup, gdb would crash -- because the cleanup calls into the
1653 Python interpreter, which we are about to destroy. It seems
1654 clearer to make the needed calls explicitly here than to create a
1655 cleanup and then mysteriously discard it. */
6dddc817
DE
1656
1657 /* This is only called as a final cleanup so we can assume the active
1658 SIGINT handler is gdb's. We still need to tell it to notify Python. */
1659 previous_active = set_active_ext_lang (&extension_language_python);
1660
b1209b03 1661 (void) PyGILState_Ensure ();
f5656ead 1662 python_gdbarch = target_gdbarch ();
d7de8e3c
TT
1663 python_language = current_language;
1664
1665 Py_Finalize ();
6dddc817
DE
1666
1667 restore_active_ext_lang (previous_active);
d7de8e3c 1668}
2bb8f231
TT
1669
1670static bool
1671do_start_initialization ()
d57a3c85 1672{
9a27f2c6 1673#ifdef IS_PY3K
9a27f2c6 1674 size_t progsize, count;
9a27f2c6
PK
1675 wchar_t *progname_copy;
1676#endif
713389e0 1677
0c4a4063
DE
1678#ifdef WITH_PYTHON_PATH
1679 /* Work around problem where python gets confused about where it is,
1680 and then can't find its libraries, etc.
1681 NOTE: Python assumes the following layout:
1682 /foo/bin/python
1683 /foo/lib/pythonX.Y/...
1684 This must be done before calling Py_Initialize. */
e8e7d10c
SM
1685 gdb::unique_xmalloc_ptr<char> progname
1686 (concat (ldirname (python_libdir).c_str (), SLASH_STRING, "bin",
1687 SLASH_STRING, "python", (char *) NULL));
9a27f2c6 1688#ifdef IS_PY3K
7f968c89 1689 std::string oldloc = setlocale (LC_ALL, NULL);
9a27f2c6 1690 setlocale (LC_ALL, "");
e8e7d10c 1691 progsize = strlen (progname.get ());
db0f0d0c 1692 progname_copy = (wchar_t *) PyMem_Malloc ((progsize + 1) * sizeof (wchar_t));
9a27f2c6
PK
1693 if (!progname_copy)
1694 {
1695 fprintf (stderr, "out of memory\n");
2bb8f231 1696 return false;
9a27f2c6 1697 }
e8e7d10c 1698 count = mbstowcs (progname_copy, progname.get (), progsize + 1);
9a27f2c6
PK
1699 if (count == (size_t) -1)
1700 {
1701 fprintf (stderr, "Could not convert python path to string\n");
2bb8f231 1702 return false;
9a27f2c6 1703 }
7f968c89 1704 setlocale (LC_ALL, oldloc.c_str ());
9a27f2c6
PK
1705
1706 /* Note that Py_SetProgramName expects the string it is passed to
1707 remain alive for the duration of the program's execution, so
1708 it is not freed after this call. */
1709 Py_SetProgramName (progname_copy);
1710#else
e8e7d10c 1711 Py_SetProgramName (progname.release ());
9a27f2c6 1712#endif
0c4a4063
DE
1713#endif
1714
d57a3c85 1715 Py_Initialize ();
ca30a762 1716 PyEval_InitThreads ();
d57a3c85 1717
9a27f2c6 1718#ifdef IS_PY3K
bcabf420 1719 gdb_module = PyModule_Create (&python_GdbModuleDef);
9a27f2c6
PK
1720 /* Add _gdb module to the list of known built-in modules. */
1721 _PyImport_FixupBuiltin (gdb_module, "_gdb");
1722#else
bcabf420 1723 gdb_module = Py_InitModule ("_gdb", python_GdbMethods);
9a27f2c6 1724#endif
999633ed 1725 if (gdb_module == NULL)
2bb8f231 1726 return false;
d57a3c85
TJB
1727
1728 /* The casts to (char*) are for python 2.4. */
999633ed
TT
1729 if (PyModule_AddStringConstant (gdb_module, "VERSION", (char*) version) < 0
1730 || PyModule_AddStringConstant (gdb_module, "HOST_CONFIG",
1731 (char*) host_name) < 0
1732 || PyModule_AddStringConstant (gdb_module, "TARGET_CONFIG",
1733 (char*) target_name) < 0)
2bb8f231 1734 return false;
f17618ea 1735
99c3dc11 1736 /* Add stream constants. */
999633ed
TT
1737 if (PyModule_AddIntConstant (gdb_module, "STDOUT", 0) < 0
1738 || PyModule_AddIntConstant (gdb_module, "STDERR", 1) < 0
1739 || PyModule_AddIntConstant (gdb_module, "STDLOG", 2) < 0)
2bb8f231 1740 return false;
d57a3c85 1741
621c8364 1742 gdbpy_gdb_error = PyErr_NewException ("gdb.error", PyExc_RuntimeError, NULL);
999633ed 1743 if (gdbpy_gdb_error == NULL
aa36459a 1744 || gdb_pymodule_addobject (gdb_module, "error", gdbpy_gdb_error) < 0)
2bb8f231 1745 return false;
621c8364
TT
1746
1747 gdbpy_gdb_memory_error = PyErr_NewException ("gdb.MemoryError",
1748 gdbpy_gdb_error, NULL);
999633ed 1749 if (gdbpy_gdb_memory_error == NULL
aa36459a
TT
1750 || gdb_pymodule_addobject (gdb_module, "MemoryError",
1751 gdbpy_gdb_memory_error) < 0)
2bb8f231 1752 return false;
621c8364 1753
07ca107c 1754 gdbpy_gdberror_exc = PyErr_NewException ("gdb.GdbError", NULL, NULL);
999633ed 1755 if (gdbpy_gdberror_exc == NULL
aa36459a
TT
1756 || gdb_pymodule_addobject (gdb_module, "GdbError",
1757 gdbpy_gdberror_exc) < 0)
2bb8f231 1758 return false;
07ca107c 1759
037bbc8e 1760 gdbpy_initialize_gdb_readline ();
999633ed
TT
1761
1762 if (gdbpy_initialize_auto_load () < 0
1763 || gdbpy_initialize_values () < 0
1764 || gdbpy_initialize_frames () < 0
1765 || gdbpy_initialize_commands () < 0
d050f7d7 1766 || gdbpy_initialize_instruction () < 0
4726b2d8 1767 || gdbpy_initialize_record () < 0
75c0bdf4 1768 || gdbpy_initialize_btrace () < 0
999633ed
TT
1769 || gdbpy_initialize_symbols () < 0
1770 || gdbpy_initialize_symtabs () < 0
1771 || gdbpy_initialize_blocks () < 0
1772 || gdbpy_initialize_functions () < 0
1773 || gdbpy_initialize_parameters () < 0
1774 || gdbpy_initialize_types () < 0
1775 || gdbpy_initialize_pspace () < 0
1776 || gdbpy_initialize_objfile () < 0
1777 || gdbpy_initialize_breakpoints () < 0
1778 || gdbpy_initialize_finishbreakpoints () < 0
1779 || gdbpy_initialize_lazy_string () < 0
bc79de95 1780 || gdbpy_initialize_linetable () < 0
999633ed
TT
1781 || gdbpy_initialize_thread () < 0
1782 || gdbpy_initialize_inferior () < 0
1783 || gdbpy_initialize_events () < 0
1784 || gdbpy_initialize_eventregistry () < 0
1785 || gdbpy_initialize_py_events () < 0
1786 || gdbpy_initialize_event () < 0
883964a7 1787 || gdbpy_initialize_arch () < 0
d11916aa
SS
1788 || gdbpy_initialize_xmethods () < 0
1789 || gdbpy_initialize_unwind () < 0)
2bb8f231 1790 return false;
505500db 1791
7d221d74
TT
1792#define GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base) \
1793 if (gdbpy_initialize_event_generic (&name##_event_object_type, py_name) < 0) \
1794 return false;
1795#include "py-event-types.def"
1796#undef GDB_PY_DEFINE_EVENT_TYPE
1797
a6bac58e 1798 gdbpy_to_string_cst = PyString_FromString ("to_string");
999633ed 1799 if (gdbpy_to_string_cst == NULL)
2bb8f231 1800 return false;
a6bac58e 1801 gdbpy_children_cst = PyString_FromString ("children");
999633ed 1802 if (gdbpy_children_cst == NULL)
2bb8f231 1803 return false;
a6bac58e 1804 gdbpy_display_hint_cst = PyString_FromString ("display_hint");
999633ed 1805 if (gdbpy_display_hint_cst == NULL)
2bb8f231 1806 return false;
d8906c6f 1807 gdbpy_doc_cst = PyString_FromString ("__doc__");
999633ed 1808 if (gdbpy_doc_cst == NULL)
2bb8f231 1809 return false;
967cf477 1810 gdbpy_enabled_cst = PyString_FromString ("enabled");
999633ed 1811 if (gdbpy_enabled_cst == NULL)
2bb8f231 1812 return false;
fb6a3ed3 1813 gdbpy_value_cst = PyString_FromString ("value");
999633ed 1814 if (gdbpy_value_cst == NULL)
2bb8f231 1815 return false;
d8906c6f 1816
9dea9163
DE
1817 /* Release the GIL while gdb runs. */
1818 PyThreadState_Swap (NULL);
1819 PyEval_ReleaseLock ();
1820
d7de8e3c 1821 make_final_cleanup (finalize_python, NULL);
999633ed 1822
2bb8f231 1823 /* Only set this when initialization has succeeded. */
999633ed 1824 gdb_python_initialized = 1;
2bb8f231
TT
1825 return true;
1826}
999633ed 1827
2bb8f231 1828#endif /* HAVE_PYTHON */
999633ed 1829
2bb8f231
TT
1830void
1831_initialize_python (void)
1832{
1833 add_com ("python-interactive", class_obscure,
1834 python_interactive_command,
1835#ifdef HAVE_PYTHON
1836 _("\
1837Start an interactive Python prompt.\n\
1838\n\
1839To return to GDB, type the EOF character (e.g., Ctrl-D on an empty\n\
1840prompt).\n\
1841\n\
1842Alternatively, a single-line Python command can be given as an\n\
1843argument, and if the command is an expression, the result will be\n\
1844printed. For example:\n\
1845\n\
1846 (gdb) python-interactive 2 + 3\n\
1847 5\n\
1848")
1849#else /* HAVE_PYTHON */
1850 _("\
1851Start a Python interactive prompt.\n\
1852\n\
1853Python scripting is not supported in this copy of GDB.\n\
1854This command is only a placeholder.")
1855#endif /* HAVE_PYTHON */
1856 );
1857 add_com_alias ("pi", "python-interactive", class_obscure, 1);
1858
1859 add_com ("python", class_obscure, python_command,
1860#ifdef HAVE_PYTHON
1861 _("\
1862Evaluate a Python command.\n\
1863\n\
1864The command can be given as an argument, for instance:\n\
1865\n\
1866 python print 23\n\
1867\n\
1868If no argument is given, the following lines are read and used\n\
1869as the Python commands. Type a line containing \"end\" to indicate\n\
1870the end of the command.")
1871#else /* HAVE_PYTHON */
1872 _("\
1873Evaluate a Python command.\n\
1874\n\
1875Python scripting is not supported in this copy of GDB.\n\
1876This command is only a placeholder.")
1877#endif /* HAVE_PYTHON */
1878 );
1879 add_com_alias ("py", "python", class_obscure, 1);
1880
1881 /* Add set/show python print-stack. */
1882 add_prefix_cmd ("python", no_class, user_show_python,
1883 _("Prefix command for python preference settings."),
1884 &user_show_python_list, "show python ", 0,
1885 &showlist);
1886
1887 add_prefix_cmd ("python", no_class, user_set_python,
1888 _("Prefix command for python preference settings."),
1889 &user_set_python_list, "set python ", 0,
1890 &setlist);
1891
1892 add_setshow_enum_cmd ("print-stack", no_class, python_excp_enums,
1893 &gdbpy_should_print_stack, _("\
1894Set mode for Python stack dump on error."), _("\
1895Show the mode of Python stack printing on error."), _("\
1896none == no stack or message will be printed.\n\
1897full == a message and a stack will be printed.\n\
1898message == an error message without a stack will be printed."),
1899 NULL, NULL,
1900 &user_set_python_list,
1901 &user_show_python_list);
1902
1903#ifdef HAVE_PYTHON
1904 if (!do_start_initialization () && PyErr_Occurred ())
1905 gdbpy_print_stack ();
9dea9163
DE
1906#endif /* HAVE_PYTHON */
1907}
1908
1909#ifdef HAVE_PYTHON
1910
a7785f8c
TT
1911/* Helper function for gdbpy_finish_initialization. This does the
1912 work and then returns false if an error has occurred and must be
1913 displayed, or true on success. */
9dea9163 1914
a7785f8c
TT
1915static bool
1916do_finish_initialization (const struct extension_language_defn *extlang)
9dea9163 1917{
b9516fa1 1918 PyObject *m;
b9516fa1 1919 PyObject *sys_path;
f17618ea 1920
b9516fa1
YPK
1921 /* Add the initial data-directory to sys.path. */
1922
a7785f8c
TT
1923 std::string gdb_pythondir = (std::string (gdb_datadir) + SLASH_STRING
1924 + "python");
b9516fa1
YPK
1925
1926 sys_path = PySys_GetObject ("path");
ca30a762 1927
9a27f2c6
PK
1928 /* If sys.path is not defined yet, define it first. */
1929 if (!(sys_path && PyList_Check (sys_path)))
1930 {
1931#ifdef IS_PY3K
1932 PySys_SetPath (L"");
1933#else
1934 PySys_SetPath ("");
1935#endif
1936 sys_path = PySys_GetObject ("path");
1937 }
256458bc 1938 if (sys_path && PyList_Check (sys_path))
b9516fa1 1939 {
7780f186 1940 gdbpy_ref<> pythondir (PyString_FromString (gdb_pythondir.c_str ()));
a7785f8c
TT
1941 if (pythondir == NULL || PyList_Insert (sys_path, 0, pythondir.get ()))
1942 return false;
b9516fa1
YPK
1943 }
1944 else
a7785f8c 1945 return false;
b9516fa1
YPK
1946
1947 /* Import the gdb module to finish the initialization, and
1948 add it to __main__ for convenience. */
1949 m = PyImport_AddModule ("__main__");
1950 if (m == NULL)
a7785f8c 1951 return false;
b9516fa1 1952
a7785f8c
TT
1953 /* Keep the reference to gdb_python_module since it is in a global
1954 variable. */
b9516fa1
YPK
1955 gdb_python_module = PyImport_ImportModule ("gdb");
1956 if (gdb_python_module == NULL)
1957 {
1958 gdbpy_print_stack ();
41245087
DE
1959 /* This is passed in one call to warning so that blank lines aren't
1960 inserted between each line of text. */
1961 warning (_("\n"
1962 "Could not load the Python gdb module from `%s'.\n"
1963 "Limited Python support is available from the _gdb module.\n"
1964 "Suggest passing --data-directory=/path/to/gdb/data-directory.\n"),
a7785f8c
TT
1965 gdb_pythondir.c_str ());
1966 /* We return "success" here as we've already emitted the
1967 warning. */
1968 return true;
b9516fa1
YPK
1969 }
1970
a7785f8c
TT
1971 return gdb_pymodule_addobject (m, "gdb", gdb_python_module) >= 0;
1972}
b9516fa1 1973
a7785f8c
TT
1974/* Perform the remaining python initializations.
1975 These must be done after GDB is at least mostly initialized.
1976 E.g., The "info pretty-printer" command needs the "info" prefix
1977 command installed.
1978 This is the extension_language_ops.finish_initialization "method". */
b9516fa1 1979
a7785f8c
TT
1980static void
1981gdbpy_finish_initialization (const struct extension_language_defn *extlang)
1982{
1983 gdbpy_enter enter_py (get_current_arch (), current_language);
b9516fa1 1984
a7785f8c
TT
1985 if (!do_finish_initialization (extlang))
1986 {
1987 gdbpy_print_stack ();
1988 warning (_("internal error: Unhandled Python exception"));
1989 }
9dea9163 1990}
ca30a762 1991
6dddc817
DE
1992/* Return non-zero if Python has successfully initialized.
1993 This is the extension_languages_ops.initialized "method". */
1994
1995static int
1996gdbpy_initialized (const struct extension_language_defn *extlang)
1997{
1998 return gdb_python_initialized;
1999}
2000
d57a3c85 2001#endif /* HAVE_PYTHON */
12453b93
TJB
2002
2003\f
2004
9dea9163 2005#ifdef HAVE_PYTHON
12453b93 2006
bcabf420 2007PyMethodDef python_GdbMethods[] =
12453b93
TJB
2008{
2009 { "history", gdbpy_history, METH_VARARGS,
2010 "Get a value from history" },
bc9f0842 2011 { "execute", (PyCFunction) execute_gdb_command, METH_VARARGS | METH_KEYWORDS,
751e7549
PM
2012 "execute (command [, from_tty] [, to_string]) -> [String]\n\
2013Evaluate command, a string, as a gdb CLI command. Optionally returns\n\
2014a Python String containing the output of the command if to_string is\n\
2015set to True." },
8f500870 2016 { "parameter", gdbpy_parameter, METH_VARARGS,
12453b93
TJB
2017 "Return a gdb parameter's value" },
2018
adc36818
PM
2019 { "breakpoints", gdbpy_breakpoints, METH_NOARGS,
2020 "Return a tuple of all breakpoint objects" },
2021
b6313243
TT
2022 { "default_visualizer", gdbpy_default_visualizer, METH_VARARGS,
2023 "Find the default visualizer for a Value." },
2024
fa33c3cd
DE
2025 { "current_progspace", gdbpy_get_current_progspace, METH_NOARGS,
2026 "Return the current Progspace." },
2027 { "progspaces", gdbpy_progspaces, METH_NOARGS,
2028 "Return a sequence of all progspaces." },
2029
89c73ade
TT
2030 { "current_objfile", gdbpy_get_current_objfile, METH_NOARGS,
2031 "Return the current Objfile being loaded, or None." },
2032 { "objfiles", gdbpy_objfiles, METH_NOARGS,
2033 "Return a sequence of all loaded objfiles." },
2034
d8e22779
TT
2035 { "newest_frame", gdbpy_newest_frame, METH_NOARGS,
2036 "newest_frame () -> gdb.Frame.\n\
2037Return the newest frame object." },
f8f6f20b
TJB
2038 { "selected_frame", gdbpy_selected_frame, METH_NOARGS,
2039 "selected_frame () -> gdb.Frame.\n\
2040Return the selected frame object." },
2041 { "frame_stop_reason_string", gdbpy_frame_stop_reason_string, METH_VARARGS,
2042 "stop_reason_string (Integer) -> String.\n\
2043Return a string explaining unwind stop reason." },
2044
4726b2d8
TW
2045 { "start_recording", gdbpy_start_recording, METH_VARARGS,
2046 "start_recording ([method] [, format]) -> gdb.Record.\n\
2047Start recording with the given method. If no method is given, will fall back\n\
2048to the system default method. If no format is given, will fall back to the\n\
2049default format for the given method."},
2050 { "current_recording", gdbpy_current_recording, METH_NOARGS,
2051 "current_recording () -> gdb.Record.\n\
2052Return current recording object." },
2053 { "stop_recording", gdbpy_stop_recording, METH_NOARGS,
2054 "stop_recording () -> None.\n\
2055Stop current recording." },
2056
2c74e833
TT
2057 { "lookup_type", (PyCFunction) gdbpy_lookup_type,
2058 METH_VARARGS | METH_KEYWORDS,
2059 "lookup_type (name [, block]) -> type\n\
2060Return a Type corresponding to the given name." },
f3e9a817
PM
2061 { "lookup_symbol", (PyCFunction) gdbpy_lookup_symbol,
2062 METH_VARARGS | METH_KEYWORDS,
2063 "lookup_symbol (name [, block] [, domain]) -> (symbol, is_field_of_this)\n\
2064Return a tuple with the symbol corresponding to the given name (or None) and\n\
2065a boolean indicating if name is a field of the current implied argument\n\
2066`this' (when the current language is object-oriented)." },
6e6fbe60
DE
2067 { "lookup_global_symbol", (PyCFunction) gdbpy_lookup_global_symbol,
2068 METH_VARARGS | METH_KEYWORDS,
2069 "lookup_global_symbol (name [, domain]) -> symbol\n\
2070Return the symbol corresponding to the given name (or None)." },
6dddd6a5
DE
2071
2072 { "lookup_objfile", (PyCFunction) gdbpy_lookup_objfile,
2073 METH_VARARGS | METH_KEYWORDS,
2074 "lookup_objfile (name, [by_build_id]) -> objfile\n\
2075Look up the specified objfile.\n\
2076If by_build_id is True, the objfile is looked up by using name\n\
2077as its build id." },
2078
f3e9a817
PM
2079 { "block_for_pc", gdbpy_block_for_pc, METH_VARARGS,
2080 "Return the block containing the given pc value, or None." },
cb2e07a6
PM
2081 { "solib_name", gdbpy_solib_name, METH_VARARGS,
2082 "solib_name (Long) -> String.\n\
2083Return the name of the shared library holding a given address, or None." },
2084 { "decode_line", gdbpy_decode_line, METH_VARARGS,
2085 "decode_line (String) -> Tuple. Decode a string argument the way\n\
2086that 'break' or 'edit' does. Return a tuple containing two elements.\n\
2087The first element contains any unparsed portion of the String parameter\n\
2088(or None if the string was fully parsed). The second element contains\n\
2089a tuple that contains all the locations that match, represented as\n\
2090gdb.Symtab_and_line objects (or None)."},
57a1d736
TT
2091 { "parse_and_eval", gdbpy_parse_and_eval, METH_VARARGS,
2092 "parse_and_eval (String) -> Value.\n\
2093Parse String as an expression, evaluate it, and return the result as a Value."
2094 },
7efc75aa
SCR
2095 { "find_pc_line", gdbpy_find_pc_line, METH_VARARGS,
2096 "find_pc_line (pc) -> Symtab_and_line.\n\
2097Return the gdb.Symtab_and_line object corresponding to the pc value." },
57a1d736 2098
ca5c20b6
PM
2099 { "post_event", gdbpy_post_event, METH_VARARGS,
2100 "Post an event into gdb's event loop." },
2101
f870a310
TT
2102 { "target_charset", gdbpy_target_charset, METH_NOARGS,
2103 "target_charset () -> string.\n\
2104Return the name of the current target charset." },
2105 { "target_wide_charset", gdbpy_target_wide_charset, METH_NOARGS,
2106 "target_wide_charset () -> string.\n\
2107Return the name of the current target wide charset." },
d8ae99a7
PM
2108 { "rbreak", (PyCFunction) gdbpy_rbreak, METH_VARARGS | METH_KEYWORDS,
2109 "rbreak (Regex) -> List.\n\
2110Return a Tuple containing gdb.Breakpoint objects that match the given Regex." },
07ca107c
DE
2111 { "string_to_argv", gdbpy_string_to_argv, METH_VARARGS,
2112 "string_to_argv (String) -> Array.\n\
2113Parse String and return an argv-like array.\n\
2114Arguments are separate by spaces and may be quoted."
2115 },
99c3dc11 2116 { "write", (PyCFunction)gdbpy_write, METH_VARARGS | METH_KEYWORDS,
12453b93 2117 "Write a string using gdb's filtered stream." },
99c3dc11 2118 { "flush", (PyCFunction)gdbpy_flush, METH_VARARGS | METH_KEYWORDS,
12453b93 2119 "Flush gdb's filtered stdout stream." },
595939de
PM
2120 { "selected_thread", gdbpy_selected_thread, METH_NOARGS,
2121 "selected_thread () -> gdb.InferiorThread.\n\
2122Return the selected thread object." },
2aa48337
KP
2123 { "selected_inferior", gdbpy_selected_inferior, METH_NOARGS,
2124 "selected_inferior () -> gdb.Inferior.\n\
2125Return the selected inferior object." },
595939de
PM
2126 { "inferiors", gdbpy_inferiors, METH_NOARGS,
2127 "inferiors () -> (gdb.Inferior, ...).\n\
2128Return a tuple containing all inferiors." },
e0f3fd7c
TT
2129
2130 { "invalidate_cached_frames", gdbpy_invalidate_cached_frames, METH_NOARGS,
2131 "invalidate_cached_frames () -> None.\n\
2132Invalidate any cached frame objects in gdb.\n\
2133Intended for internal use only." },
2134
7729052b
TT
2135 { "convenience_variable", gdbpy_convenience_variable, METH_VARARGS,
2136 "convenience_variable (NAME) -> value.\n\
2137Return the value of the convenience variable $NAME,\n\
2138or None if not set." },
2139 { "set_convenience_variable", gdbpy_set_convenience_variable, METH_VARARGS,
2140 "convenience_variable (NAME, VALUE) -> None.\n\
2141Set the value of the convenience variable $NAME." },
2142
12453b93
TJB
2143 {NULL, NULL, 0, NULL}
2144};
2145
9a27f2c6 2146#ifdef IS_PY3K
bcabf420 2147struct PyModuleDef python_GdbModuleDef =
9a27f2c6
PK
2148{
2149 PyModuleDef_HEAD_INIT,
2150 "_gdb",
2151 NULL,
256458bc 2152 -1,
02e62830 2153 python_GdbMethods,
9a27f2c6
PK
2154 NULL,
2155 NULL,
2156 NULL,
2157 NULL
2158};
2159#endif
7d221d74
TT
2160
2161/* Define all the event objects. */
2162#define GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base) \
2163 PyTypeObject name##_event_object_type \
2164 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object") \
2165 = { \
2166 PyVarObject_HEAD_INIT (NULL, 0) \
2167 "gdb." py_name, /* tp_name */ \
2168 sizeof (event_object), /* tp_basicsize */ \
2169 0, /* tp_itemsize */ \
2170 evpy_dealloc, /* tp_dealloc */ \
2171 0, /* tp_print */ \
2172 0, /* tp_getattr */ \
2173 0, /* tp_setattr */ \
2174 0, /* tp_compare */ \
2175 0, /* tp_repr */ \
2176 0, /* tp_as_number */ \
2177 0, /* tp_as_sequence */ \
2178 0, /* tp_as_mapping */ \
2179 0, /* tp_hash */ \
2180 0, /* tp_call */ \
2181 0, /* tp_str */ \
2182 0, /* tp_getattro */ \
2183 0, /* tp_setattro */ \
2184 0, /* tp_as_buffer */ \
2185 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ \
2186 doc, /* tp_doc */ \
2187 0, /* tp_traverse */ \
2188 0, /* tp_clear */ \
2189 0, /* tp_richcompare */ \
2190 0, /* tp_weaklistoffset */ \
2191 0, /* tp_iter */ \
2192 0, /* tp_iternext */ \
2193 0, /* tp_methods */ \
2194 0, /* tp_members */ \
2195 0, /* tp_getset */ \
2196 &base, /* tp_base */ \
2197 0, /* tp_dict */ \
2198 0, /* tp_descr_get */ \
2199 0, /* tp_descr_set */ \
2200 0, /* tp_dictoffset */ \
2201 0, /* tp_init */ \
2202 0 /* tp_alloc */ \
2203 };
2204#include "py-event-types.def"
2205#undef GDB_PY_DEFINE_EVENT_TYPE
2206
12453b93 2207#endif /* HAVE_PYTHON */
This page took 1.0995 seconds and 4 git commands to generate.