gdb/testsuite/
[deliverable/binutils-gdb.git] / gdb / python / python.c
CommitLineData
d57a3c85
TJB
1/* General python/gdb code
2
0fb0cc75 3 Copyright (C) 2008, 2009 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"
89c73ade
TT
26#include "objfiles.h"
27#include "observer.h"
d452c4bc
UW
28#include "value.h"
29#include "language.h"
d57a3c85
TJB
30
31#include <ctype.h>
32
33/* True if we should print the stack when catching a Python error,
34 false otherwise. */
35static int gdbpy_should_print_stack = 1;
36
89c73ade
TT
37/* This is true if we should auto-load python code when an objfile is
38 opened, false otherwise. */
39static int gdbpy_auto_load = 1;
40
d57a3c85
TJB
41#ifdef HAVE_PYTHON
42
43#include "python.h"
44#include "libiberty.h"
45#include "cli/cli-decode.h"
46#include "charset.h"
47#include "top.h"
48#include "exceptions.h"
49#include "python-internal.h"
50#include "version.h"
51#include "target.h"
52#include "gdbthread.h"
53
12453b93 54static PyMethodDef GdbMethods[];
d57a3c85
TJB
55
56PyObject *gdb_module;
57
a6bac58e
TT
58/* Some string constants we may wish to use. */
59PyObject *gdbpy_to_string_cst;
60PyObject *gdbpy_children_cst;
61PyObject *gdbpy_display_hint_cst;
d8906c6f
TJB
62PyObject *gdbpy_doc_cst;
63
d452c4bc
UW
64
65/* Architecture and language to be used in callbacks from
66 the Python interpreter. */
67struct gdbarch *python_gdbarch;
68const struct language_defn *python_language;
69
70/* Restore global language and architecture and Python GIL state
71 when leaving the Python interpreter. */
72
73struct python_env
74{
75 PyGILState_STATE state;
76 struct gdbarch *gdbarch;
77 const struct language_defn *language;
78};
79
80static void
81restore_python_env (void *p)
82{
83 struct python_env *env = (struct python_env *)p;
84 PyGILState_Release (env->state);
85 python_gdbarch = env->gdbarch;
86 python_language = env->language;
87 xfree (env);
88}
89
90/* Called before entering the Python interpreter to install the
91 current language and architecture to be used for Python values. */
92
93struct cleanup *
94ensure_python_env (struct gdbarch *gdbarch,
95 const struct language_defn *language)
96{
97 struct python_env *env = xmalloc (sizeof *env);
98
99 env->state = PyGILState_Ensure ();
100 env->gdbarch = python_gdbarch;
101 env->language = python_language;
102
103 python_gdbarch = gdbarch;
104 python_language = language;
105
106 return make_cleanup (restore_python_env, env);
107}
108
109
d57a3c85
TJB
110/* Given a command_line, return a command string suitable for passing
111 to Python. Lines in the string are separated by newlines. The
112 return value is allocated using xmalloc and the caller is
113 responsible for freeing it. */
114
115static char *
116compute_python_string (struct command_line *l)
117{
118 struct command_line *iter;
119 char *script = NULL;
120 int size = 0;
121 int here;
122
123 for (iter = l; iter; iter = iter->next)
124 size += strlen (iter->line) + 1;
125
126 script = xmalloc (size + 1);
127 here = 0;
128 for (iter = l; iter; iter = iter->next)
129 {
130 int len = strlen (iter->line);
131 strcpy (&script[here], iter->line);
132 here += len;
133 script[here++] = '\n';
134 }
135 script[here] = '\0';
136 return script;
137}
138
139/* Take a command line structure representing a 'python' command, and
140 evaluate its body using the Python interpreter. */
141
142void
143eval_python_from_control_command (struct command_line *cmd)
144{
12453b93 145 int ret;
d57a3c85 146 char *script;
ca30a762 147 struct cleanup *cleanup;
d57a3c85
TJB
148
149 if (cmd->body_count != 1)
150 error (_("Invalid \"python\" block structure."));
151
d452c4bc 152 cleanup = ensure_python_env (get_current_arch (), current_language);
ca30a762 153
d57a3c85 154 script = compute_python_string (cmd->body_list[0]);
12453b93 155 ret = PyRun_SimpleString (script);
d57a3c85 156 xfree (script);
12453b93 157 if (ret)
d57a3c85
TJB
158 {
159 gdbpy_print_stack ();
12453b93 160 error (_("Error while executing Python code."));
d57a3c85 161 }
ca30a762
TT
162
163 do_cleanups (cleanup);
d57a3c85
TJB
164}
165
166/* Implementation of the gdb "python" command. */
167
168static void
169python_command (char *arg, int from_tty)
170{
ca30a762 171 struct cleanup *cleanup;
d452c4bc 172 cleanup = ensure_python_env (get_current_arch (), current_language);
ca30a762 173
d57a3c85
TJB
174 while (arg && *arg && isspace (*arg))
175 ++arg;
176 if (arg && *arg)
177 {
12453b93 178 if (PyRun_SimpleString (arg))
d57a3c85
TJB
179 {
180 gdbpy_print_stack ();
12453b93 181 error (_("Error while executing Python code."));
d57a3c85
TJB
182 }
183 }
184 else
185 {
186 struct command_line *l = get_command_line (python_control, "");
ca30a762 187 make_cleanup_free_command_lines (&l);
d57a3c85 188 execute_control_command_untraced (l);
d57a3c85 189 }
ca30a762
TT
190
191 do_cleanups (cleanup);
d57a3c85
TJB
192}
193
194\f
195
196/* Transform a gdb parameters's value into a Python value. May return
197 NULL (and set a Python exception) on error. Helper function for
198 get_parameter. */
199
200static PyObject *
201parameter_to_python (struct cmd_list_element *cmd)
202{
203 switch (cmd->var_type)
204 {
205 case var_string:
206 case var_string_noescape:
207 case var_optional_filename:
208 case var_filename:
209 case var_enum:
210 {
211 char *str = * (char **) cmd->var;
212 if (! str)
213 str = "";
214 return PyString_Decode (str, strlen (str), host_charset (), NULL);
215 }
216
217 case var_boolean:
218 {
219 if (* (int *) cmd->var)
220 Py_RETURN_TRUE;
221 else
222 Py_RETURN_FALSE;
223 }
224
225 case var_auto_boolean:
226 {
227 enum auto_boolean ab = * (enum auto_boolean *) cmd->var;
228 if (ab == AUTO_BOOLEAN_TRUE)
229 Py_RETURN_TRUE;
230 else if (ab == AUTO_BOOLEAN_FALSE)
231 Py_RETURN_FALSE;
232 else
233 Py_RETURN_NONE;
234 }
235
236 case var_integer:
237 if ((* (int *) cmd->var) == INT_MAX)
238 Py_RETURN_NONE;
239 /* Fall through. */
240 case var_zinteger:
241 return PyLong_FromLong (* (int *) cmd->var);
242
243 case var_uinteger:
244 {
245 unsigned int val = * (unsigned int *) cmd->var;
246 if (val == UINT_MAX)
247 Py_RETURN_NONE;
248 return PyLong_FromUnsignedLong (val);
249 }
250 }
251
252 return PyErr_Format (PyExc_RuntimeError, "programmer error: unhandled type");
253}
254
255/* A Python function which returns a gdb parameter's value as a Python
256 value. */
257
258static PyObject *
8f500870 259gdbpy_parameter (PyObject *self, PyObject *args)
d57a3c85
TJB
260{
261 struct cmd_list_element *alias, *prefix, *cmd;
262 char *arg, *newarg;
cc924cad 263 int found = -1;
d57a3c85
TJB
264 volatile struct gdb_exception except;
265
266 if (! PyArg_ParseTuple (args, "s", &arg))
267 return NULL;
268
269 newarg = concat ("show ", arg, (char *) NULL);
270
271 TRY_CATCH (except, RETURN_MASK_ALL)
272 {
cc924cad 273 found = lookup_cmd_composition (newarg, &alias, &prefix, &cmd);
d57a3c85
TJB
274 }
275 xfree (newarg);
276 GDB_PY_HANDLE_EXCEPTION (except);
cc924cad
TJB
277 if (!found)
278 return PyErr_Format (PyExc_RuntimeError,
279 "could not find parameter `%s'", arg);
d57a3c85
TJB
280
281 if (! cmd->var)
8f500870 282 return PyErr_Format (PyExc_RuntimeError, "`%s' is not a parameter", arg);
d57a3c85
TJB
283 return parameter_to_python (cmd);
284}
285
286/* A Python function which evaluates a string using the gdb CLI. */
287
288static PyObject *
289execute_gdb_command (PyObject *self, PyObject *args)
290{
291 struct cmd_list_element *alias, *prefix, *cmd;
292 char *arg, *newarg;
12453b93
TJB
293 PyObject *from_tty_obj = NULL;
294 int from_tty;
295 int cmp;
d57a3c85 296 volatile struct gdb_exception except;
d57a3c85 297
12453b93 298 if (! PyArg_ParseTuple (args, "s|O!", &arg, &PyBool_Type, &from_tty_obj))
d57a3c85
TJB
299 return NULL;
300
12453b93
TJB
301 from_tty = 0;
302 if (from_tty_obj)
303 {
304 cmp = PyObject_IsTrue (from_tty_obj);
305 if (cmp < 0)
306 return NULL;
307 from_tty = cmp;
308 }
309
d57a3c85
TJB
310 TRY_CATCH (except, RETURN_MASK_ALL)
311 {
12453b93 312 execute_command (arg, from_tty);
d57a3c85
TJB
313 }
314 GDB_PY_HANDLE_EXCEPTION (except);
315
347bddb7
PA
316 /* Do any commands attached to breakpoint we stopped at. */
317 bpstat_do_actions ();
d57a3c85
TJB
318
319 Py_RETURN_NONE;
320}
321
322\f
323
324/* Printing. */
325
326/* A python function to write a single string using gdb's filtered
327 output stream. */
328static PyObject *
329gdbpy_write (PyObject *self, PyObject *args)
330{
331 char *arg;
332 if (! PyArg_ParseTuple (args, "s", &arg))
333 return NULL;
334 printf_filtered ("%s", arg);
335 Py_RETURN_NONE;
336}
337
338/* A python function to flush gdb's filtered output stream. */
339static PyObject *
340gdbpy_flush (PyObject *self, PyObject *args)
341{
342 gdb_flush (gdb_stdout);
343 Py_RETURN_NONE;
344}
345
346/* Print a python exception trace, or print nothing and clear the
347 python exception, depending on gdbpy_should_print_stack. Only call
348 this if a python exception is set. */
349void
350gdbpy_print_stack (void)
351{
352 if (gdbpy_should_print_stack)
353 PyErr_Print ();
354 else
355 PyErr_Clear ();
356}
357
89c73ade
TT
358\f
359
360/* The "current" objfile. This is set when gdb detects that a new
361 objfile has been loaded. It is only set for the duration of a call
362 to gdbpy_new_objfile; it is NULL at other times. */
363static struct objfile *gdbpy_current_objfile;
364
365/* The file name we attempt to read. */
366#define GDBPY_AUTO_FILENAME "-gdb.py"
367
368/* This is a new_objfile observer callback which loads python code
369 based on the path to the objfile. */
370static void
371gdbpy_new_objfile (struct objfile *objfile)
372{
373 char *realname;
374 char *filename, *debugfile;
375 int len;
376 FILE *input;
89c73ade
TT
377 struct cleanup *cleanups;
378
379 if (!gdbpy_auto_load || !objfile || !objfile->name)
380 return;
381
d452c4bc 382 cleanups = ensure_python_env (get_objfile_arch (objfile), current_language);
89c73ade
TT
383
384 gdbpy_current_objfile = objfile;
385
386 realname = gdb_realpath (objfile->name);
387 len = strlen (realname);
388 filename = xmalloc (len + sizeof (GDBPY_AUTO_FILENAME));
389 memcpy (filename, realname, len);
390 strcpy (filename + len, GDBPY_AUTO_FILENAME);
391
392 input = fopen (filename, "r");
393 debugfile = filename;
394
d452c4bc 395 make_cleanup (xfree, filename);
89c73ade
TT
396 make_cleanup (xfree, realname);
397
398 if (!input && debug_file_directory)
399 {
400 /* Also try the same file in the separate debug info directory. */
401 debugfile = xmalloc (strlen (filename)
402 + strlen (debug_file_directory) + 1);
403 strcpy (debugfile, debug_file_directory);
404 /* FILENAME is absolute, so we don't need a "/" here. */
405 strcat (debugfile, filename);
406
407 make_cleanup (xfree, debugfile);
408 input = fopen (debugfile, "r");
409 }
410
411 if (!input && gdb_datadir)
412 {
413 /* Also try the same file in a subdirectory of gdb's data
414 directory. */
415 debugfile = xmalloc (strlen (gdb_datadir) + strlen (filename)
416 + strlen ("/auto-load") + 1);
417 strcpy (debugfile, gdb_datadir);
418 strcat (debugfile, "/auto-load");
419 /* FILENAME is absolute, so we don't need a "/" here. */
420 strcat (debugfile, filename);
421
422 make_cleanup (xfree, debugfile);
423 input = fopen (debugfile, "r");
424 }
425
426 if (input)
427 {
428 /* We don't want to throw an exception here -- but the user
429 would like to know that something went wrong. */
430 if (PyRun_SimpleFile (input, debugfile))
431 gdbpy_print_stack ();
432 fclose (input);
433 }
434
435 do_cleanups (cleanups);
436 gdbpy_current_objfile = NULL;
89c73ade
TT
437}
438
439/* Return the current Objfile, or None if there isn't one. */
440static PyObject *
441gdbpy_get_current_objfile (PyObject *unused1, PyObject *unused2)
442{
443 PyObject *result;
444
445 if (! gdbpy_current_objfile)
446 Py_RETURN_NONE;
447
448 result = objfile_to_objfile_object (gdbpy_current_objfile);
449 if (result)
450 Py_INCREF (result);
451 return result;
452}
453
454/* Return a sequence holding all the Objfiles. */
455static PyObject *
456gdbpy_objfiles (PyObject *unused1, PyObject *unused2)
457{
458 struct objfile *objf;
459 PyObject *list;
460
461 list = PyList_New (0);
462 if (!list)
463 return NULL;
464
465 ALL_OBJFILES (objf)
466 {
467 PyObject *item = objfile_to_objfile_object (objf);
468 if (!item || PyList_Append (list, item) == -1)
469 {
470 Py_DECREF (list);
471 return NULL;
472 }
473 }
474
475 return list;
476}
477
d57a3c85
TJB
478#else /* HAVE_PYTHON */
479
480/* Dummy implementation of the gdb "python" command. */
481
482static void
483python_command (char *arg, int from_tty)
484{
485 while (arg && *arg && isspace (*arg))
486 ++arg;
487 if (arg && *arg)
488 error (_("Python scripting is not supported in this copy of GDB."));
489 else
490 {
491 struct command_line *l = get_command_line (python_control, "");
492 struct cleanup *cleanups = make_cleanup_free_command_lines (&l);
493 execute_control_command_untraced (l);
494 do_cleanups (cleanups);
495 }
496}
497
498void
499eval_python_from_control_command (struct command_line *cmd)
500{
501 error (_("Python scripting is not supported in this copy of GDB."));
502}
503
504#endif /* HAVE_PYTHON */
505
506\f
507
508/* Lists for 'maint set python' commands. */
509
510static struct cmd_list_element *set_python_list;
511static struct cmd_list_element *show_python_list;
512
513/* Function for use by 'maint set python' prefix command. */
514
515static void
516set_python (char *args, int from_tty)
517{
518 help_list (set_python_list, "maintenance set python ", -1, gdb_stdout);
519}
520
521/* Function for use by 'maint show python' prefix command. */
522
523static void
524show_python (char *args, int from_tty)
525{
526 cmd_show_list (show_python_list, from_tty, "");
527}
528
529/* Initialize the Python code. */
530
2c0b251b
PA
531/* Provide a prototype to silence -Wmissing-prototypes. */
532extern initialize_file_ftype _initialize_python;
533
d57a3c85
TJB
534void
535_initialize_python (void)
536{
537 add_com ("python", class_obscure, python_command,
538#ifdef HAVE_PYTHON
539 _("\
540Evaluate a Python command.\n\
541\n\
542The command can be given as an argument, for instance:\n\
543\n\
544 python print 23\n\
545\n\
546If no argument is given, the following lines are read and used\n\
547as the Python commands. Type a line containing \"end\" to indicate\n\
548the end of the command.")
549#else /* HAVE_PYTHON */
550 _("\
551Evaluate a Python command.\n\
552\n\
553Python scripting is not supported in this copy of GDB.\n\
554This command is only a placeholder.")
555#endif /* HAVE_PYTHON */
556 );
557
558 add_prefix_cmd ("python", no_class, show_python,
559 _("Prefix command for python maintenance settings."),
509238d6 560 &show_python_list, "maintenance show python ", 0,
d57a3c85
TJB
561 &maintenance_show_cmdlist);
562 add_prefix_cmd ("python", no_class, set_python,
563 _("Prefix command for python maintenance settings."),
509238d6 564 &set_python_list, "maintenance set python ", 0,
d57a3c85
TJB
565 &maintenance_set_cmdlist);
566
567 add_setshow_boolean_cmd ("print-stack", class_maintenance,
568 &gdbpy_should_print_stack, _("\
569Enable or disable printing of Python stack dump on error."), _("\
570Show whether Python stack will be printed on error."), _("\
571Enables or disables printing of Python stack traces."),
572 NULL, NULL,
573 &set_python_list,
574 &show_python_list);
575
89c73ade
TT
576 add_setshow_boolean_cmd ("auto-load", class_maintenance,
577 &gdbpy_auto_load, _("\
578Enable or disable auto-loading of Python code when an object is opened."), _("\
579Show whether Python code will be auto-loaded when an object is opened."), _("\
580Enables or disables auto-loading of Python code when an object is opened."),
581 NULL, NULL,
582 &set_python_list,
583 &show_python_list);
584
d57a3c85
TJB
585#ifdef HAVE_PYTHON
586 Py_Initialize ();
ca30a762 587 PyEval_InitThreads ();
d57a3c85
TJB
588
589 gdb_module = Py_InitModule ("gdb", GdbMethods);
590
591 /* The casts to (char*) are for python 2.4. */
592 PyModule_AddStringConstant (gdb_module, "VERSION", (char*) version);
593 PyModule_AddStringConstant (gdb_module, "HOST_CONFIG", (char*) host_name);
594 PyModule_AddStringConstant (gdb_module, "TARGET_CONFIG", (char*) target_name);
595
a08702d6 596 gdbpy_initialize_values ();
f8f6f20b 597 gdbpy_initialize_frames ();
d8906c6f 598 gdbpy_initialize_commands ();
bc3b79fd 599 gdbpy_initialize_functions ();
2c74e833 600 gdbpy_initialize_types ();
89c73ade 601 gdbpy_initialize_objfile ();
a08702d6 602
d57a3c85 603 PyRun_SimpleString ("import gdb");
a6bac58e 604 PyRun_SimpleString ("gdb.pretty_printers = []");
d57a3c85 605
89c73ade
TT
606 observer_attach_new_objfile (gdbpy_new_objfile);
607
a6bac58e
TT
608 gdbpy_to_string_cst = PyString_FromString ("to_string");
609 gdbpy_children_cst = PyString_FromString ("children");
610 gdbpy_display_hint_cst = PyString_FromString ("display_hint");
d8906c6f
TJB
611 gdbpy_doc_cst = PyString_FromString ("__doc__");
612
d57a3c85
TJB
613 /* Create a couple objects which are used for Python's stdout and
614 stderr. */
615 PyRun_SimpleString ("\
616import sys\n\
617class GdbOutputFile:\n\
618 def close(self):\n\
619 # Do nothing.\n\
620 return None\n\
621\n\
622 def isatty(self):\n\
623 return False\n\
624\n\
625 def write(self, s):\n\
626 gdb.write(s)\n\
627\n\
628 def writelines(self, iterable):\n\
629 for line in iterable:\n\
630 self.write(line)\n\
631\n\
632 def flush(self):\n\
633 gdb.flush()\n\
634\n\
635sys.stderr = GdbOutputFile()\n\
636sys.stdout = GdbOutputFile()\n\
637");
ca30a762
TT
638
639 /* Release the GIL while gdb runs. */
640 PyThreadState_Swap (NULL);
641 PyEval_ReleaseLock ();
642
d57a3c85
TJB
643#endif /* HAVE_PYTHON */
644}
12453b93
TJB
645
646\f
647
648#if HAVE_PYTHON
649
650static PyMethodDef GdbMethods[] =
651{
652 { "history", gdbpy_history, METH_VARARGS,
653 "Get a value from history" },
654 { "execute", execute_gdb_command, METH_VARARGS,
655 "Execute a gdb command" },
8f500870 656 { "parameter", gdbpy_parameter, METH_VARARGS,
12453b93
TJB
657 "Return a gdb parameter's value" },
658
b6313243
TT
659 { "default_visualizer", gdbpy_default_visualizer, METH_VARARGS,
660 "Find the default visualizer for a Value." },
661
89c73ade
TT
662 { "current_objfile", gdbpy_get_current_objfile, METH_NOARGS,
663 "Return the current Objfile being loaded, or None." },
664 { "objfiles", gdbpy_objfiles, METH_NOARGS,
665 "Return a sequence of all loaded objfiles." },
666
f8f6f20b
TJB
667 { "selected_frame", gdbpy_selected_frame, METH_NOARGS,
668 "selected_frame () -> gdb.Frame.\n\
669Return the selected frame object." },
670 { "frame_stop_reason_string", gdbpy_frame_stop_reason_string, METH_VARARGS,
671 "stop_reason_string (Integer) -> String.\n\
672Return a string explaining unwind stop reason." },
673
2c74e833
TT
674 { "lookup_type", (PyCFunction) gdbpy_lookup_type,
675 METH_VARARGS | METH_KEYWORDS,
676 "lookup_type (name [, block]) -> type\n\
677Return a Type corresponding to the given name." },
678
12453b93
TJB
679 { "write", gdbpy_write, METH_VARARGS,
680 "Write a string using gdb's filtered stream." },
681 { "flush", gdbpy_flush, METH_NOARGS,
682 "Flush gdb's filtered stdout stream." },
683
684 {NULL, NULL, 0, NULL}
685};
686
687#endif /* HAVE_PYTHON */
This page took 0.183533 seconds and 4 git commands to generate.